[libdap] 01/10: Upstream release 3.15-1

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Nov 6 11:40:50 UTC 2015


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to branch debian/experimental
in repository libdap.

commit ae516a8bf2d89cb7a3343d74f07789c684c62c0a
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Sat Oct 17 03:40:28 2015 +0100

    Upstream release 3.15-1
---
 Array.cc                                           |    7 +-
 AttrTable.h                                        |    5 +-
 BaseType.cc                                        |   46 +-
 BaseType.h                                         |  114 +-
 Byte.cc                                            |    4 +-
 ChangeLog                                          |  876 +++++++
 Connect.cc                                         |   51 +-
 Connect.h                                          |   14 +-
 D4Connect.cc                                       |  647 +----
 D4Enum.cc                                          |   20 +-
 D4Enum.h                                           |   42 +-
 D4EnumDefs.cc                                      |    4 +-
 D4EnumDefs.h                                       |   11 +
 D4Group.cc                                         |   22 +-
 D4Opaque.cc                                        |   20 +-
 D4Opaque.h                                         |    5 +
 D4ParserSax2.cc                                    |  360 ++-
 D4Sequence.cc                                      |   53 +-
 D4Sequence.h                                       |    5 +
 D4StreamMarshaller.cc                              |   55 +
 D4StreamMarshaller.h                               |   30 +-
 DAS.cc                                             |    8 +-
 DDS.cc                                             |    8 +-
 DDXParserSAX2.cc                                   |   25 +-
 DDXParserSAX2.h                                    |    5 +-
 DODSFilter.cc                                      |    8 +-
 Float64.cc                                         |   11 +-
 HTTPCache.cc                                       |   37 +-
 HTTPCache.h                                        |   49 +-
 HTTPCacheTable.cc                                  |   24 +-
 HTTPCacheTable.h                                   |  365 ++-
 HTTPConnect.cc                                     |   14 +-
 HTTPConnect.h                                      |    2 +-
 INSTALL                                            |   54 +-
 Makefile.am                                        |   65 +-
 Makefile.in                                        | 1295 +++++-----
 Marshaller.h                                       |   90 +-
 MarshallerThread.cc                                |  293 +++
 MarshallerThread.h                                 |  154 ++
 NEWS                                               |   43 +
 Operators.h                                        |    2 +-
 RCReader.cc                                        |  293 ++-
 RCReader.h                                         |    6 +-
 README                                             |   23 +
 Sequence.cc                                        |   31 +-
 Sequence.h                                         |  194 +-
 VCPP/sample/getdap.cc                              |    2 +-
 Vector.cc                                          |  583 +----
 Vector.h                                           |  121 +-
 XDRFileMarshaller.cc                               |  161 +-
 XDRFileMarshaller.h                                |   56 +-
 XDRStreamMarshaller.cc                             |  744 +++---
 XDRStreamMarshaller.h                              |   98 +-
 aclocal.m4                                         |  525 +++--
 conf/._compile                                     |  Bin 240 -> 222 bytes
 conf/._config.guess                                |  Bin 240 -> 222 bytes
 conf/._config.sub                                  |  Bin 240 -> 222 bytes
 conf/._depcomp                                     |  Bin 240 -> 222 bytes
 conf/._install-sh                                  |  Bin 240 -> 222 bytes
 conf/._missing                                     |  Bin 240 -> 222 bytes
 conf/._test-driver                                 |  Bin 0 -> 222 bytes
 conf/compile                                       |    9 +-
 conf/config.guess                                  |  194 +-
 conf/config.rpath                                  |   18 +-
 conf/config.sub                                    |  110 +-
 conf/depcomp                                       |  454 ++--
 conf/gcov_valgrind.m4                              |   48 +-
 conf/missing                                       |  405 ++--
 conf/snippet/arg-nonnull.h                         |    2 +-
 conf/snippet/c++defs.h                             |    2 +-
 conf/snippet/warn-on-use.h                         |    2 +-
 conf/test-driver                                   |  139 ++
 config.h.in                                        |  102 +-
 configure                                          | 1597 +++++++------
 configure.ac                                       |   88 +-
 d4_ce/D4ConstraintEvaluator.cc                     |   12 +-
 d4_ce/D4FunctionEvaluator.h                        |  115 -
 d4_ce/Makefile.am                                  |  106 +-
 d4_ce/Makefile.in                                  |  428 ++--
 d4_ce/gen_grammar_sources/FlexLexer.h.tmp          |  206 --
 d4_ce/gen_grammar_sources/d4_ce_parser.tab.cc.tmp  | 1861 ---------------
 d4_ce/gen_grammar_sources/d4_ce_parser.tab.hh.tmp  |  731 ------
 .../d4_function_parser.tab.cc.tmp                  | 2467 --------------------
 .../d4_function_parser.tab.hh.tmp                  |  783 -------
 d4_ce/gen_grammar_sources/lex.d4_ce.cc.tmp         | 2145 -----------------
 d4_ce/gen_grammar_sources/lex.d4_function.cc.tmp   | 2172 -----------------
 d4_ce/lex.d4_ce.cc                                 | 2145 -----------------
 d4_ce/lex.d4_function.cc                           | 2172 -----------------
 {d4_ce => d4_function}/D4FunctionEvaluator.cc      |  184 +-
 d4_function/D4FunctionEvaluator.h                  |  171 ++
 {d4_ce => d4_function}/D4FunctionScanner.h         |    0
 d4_function/Makefile.am                            |   68 +
 {d4_ce => d4_function}/Makefile.in                 |  439 ++--
 {d4_ce => d4_function}/d4_function_parser.tab.cc   |    0
 {d4_ce => d4_function}/d4_function_parser.tab.hh   |    0
 {d4_ce => d4_function}/d4_function_parser.yy       |    0
 {d4_ce => d4_function}/d4_function_scanner.ll      |    0
 .../location.hh.tmp => d4_function/location.hh     |   12 +-
 .../position.hh.tmp => d4_function/position.hh     |   20 +-
 .../stack.hh.tmp => d4_function/stack.hh           |   10 +-
 das.tab.cc                                         |   56 +-
 das.yy                                             |   52 +-
 dds.tab.cc                                         |  333 ++-
 dds.yy                                             |  246 +-
 debug.h                                            |    2 +
 doxy.conf                                          |    2 +-
 getdap.cc                                          |    2 +-
 getdap4.cc                                         |    2 +-
 gl/Makefile.am                                     |   34 +-
 gl/Makefile.in                                     |  331 +--
 gl/alloca.in.h                                     |    2 +-
 gl/btowc.c                                         |    2 +-
 gl/byteswap.in.h                                   |    2 +-
 gl/config.charset                                  |    6 +-
 gl/gettext.h                                       |    2 +-
 gl/glthread/lock.c                                 |    2 +-
 gl/glthread/lock.h                                 |    2 +-
 gl/glthread/threadlib.c                            |    2 +-
 gl/langinfo.in.h                                   |   20 +-
 gl/localcharset.c                                  |   81 +-
 gl/localcharset.h                                  |    2 +-
 gl/locale.in.h                                     |    2 +-
 gl/localeconv.c                                    |    2 +-
 gl/m4/00gnulib.m4                                  |   22 +-
 gl/m4/absolute-header.m4                           |  102 +
 gl/m4/alloca.m4                                    |    2 +-
 gl/m4/btowc.m4                                     |    2 +-
 gl/m4/byteswap.m4                                  |    2 +-
 gl/m4/codeset.m4                                   |    2 +-
 gl/m4/configmake.m4                                |    2 +-
 gl/m4/eealloc.m4                                   |    2 +-
 gl/m4/extensions.m4                                |    7 +-
 gl/m4/extern-inline.m4                             |   60 +-
 gl/m4/fcntl-o.m4                                   |    2 +-
 gl/m4/glibc21.m4                                   |    2 +-
 gl/m4/gnulib-cache.m4                              |    2 +-
 gl/m4/gnulib-common.m4                             |  124 +-
 gl/m4/gnulib-comp.m4                               |   18 +-
 gl/m4/gnulib-tool.m4                               |    2 +-
 gl/m4/include_next.m4                              |   55 +-
 gl/m4/langinfo_h.m4                                |    2 +-
 gl/m4/lib-ld.m4                                    |    2 +-
 gl/m4/lib-link.m4                                  |    2 +-
 gl/m4/lib-prefix.m4                                |    2 +-
 gl/m4/localcharset.m4                              |    2 +-
 gl/m4/locale-fr.m4                                 |    2 +-
 gl/m4/locale-ja.m4                                 |    2 +-
 gl/m4/locale-zh.m4                                 |    2 +-
 gl/m4/locale_h.m4                                  |    2 +-
 gl/m4/localeconv.m4                                |    2 +-
 gl/m4/lock.m4                                      |    2 +-
 gl/m4/longlong.m4                                  |    2 +-
 gl/m4/malloc.m4                                    |   98 -
 gl/m4/mbrtowc.m4                                   |   48 +-
 gl/m4/mbsinit.m4                                   |    2 +-
 gl/m4/mbstate_t.m4                                 |    2 +-
 gl/m4/mbtowc.m4                                    |    2 +-
 gl/m4/multiarch.m4                                 |    2 +-
 gl/m4/nl_langinfo.m4                               |    2 +-
 gl/m4/off_t.m4                                     |    2 +-
 gl/m4/regex.m4                                     |   30 +-
 gl/m4/ssize_t.m4                                   |    2 +-
 gl/m4/stdbool.m4                                   |    2 +-
 gl/m4/stddef_h.m4                                  |   10 +-
 gl/m4/stdint.m4                                    |    2 +-
 gl/m4/stdlib_h.m4                                  |    4 +-
 gl/m4/sys_types_h.m4                               |    2 +-
 gl/m4/threadlib.m4                                 |   40 +-
 gl/m4/unistd_h.m4                                  |    6 +-
 gl/m4/warn-on-use.m4                               |    2 +-
 gl/m4/wchar_h.m4                                   |    2 +-
 gl/m4/wchar_t.m4                                   |    2 +-
 gl/m4/wcrtomb.m4                                   |    2 +-
 gl/m4/wctype_h.m4                                  |    2 +-
 gl/m4/wint_t.m4                                    |    2 +-
 gl/malloc.c                                        |   56 -
 gl/mbrtowc.c                                       |    9 +-
 gl/mbsinit.c                                       |    2 +-
 gl/mbtowc-impl.h                                   |    2 +-
 gl/mbtowc.c                                        |    2 +-
 gl/nl_langinfo.c                                   |  255 +-
 gl/ref-add.sin                                     |    2 +-
 gl/ref-del.sin                                     |    2 +-
 gl/regcomp.c                                       |   24 +-
 gl/regex.c                                         |    2 +-
 gl/regex.h                                         |    4 +-
 gl/regex_internal.c                                |   21 +-
 gl/regex_internal.h                                |    8 +-
 gl/regexec.c                                       |    2 +-
 gl/stdbool.in.h                                    |    2 +-
 gl/stddef.in.h                                     |   54 +-
 gl/stdint.in.h                                     |    5 +-
 gl/stdlib.in.h                                     |   25 +-
 gl/streq.h                                         |    2 +-
 gl/sys_types.in.h                                  |    4 +-
 gl/unistd.in.h                                     |   54 +-
 gl/verify.h                                        |    2 +-
 gl/wchar.in.h                                      |   11 +-
 gl/wcrtomb.c                                       |    2 +-
 gl/wctype.in.h                                     |    2 +-
 libdap.spec                                        |    4 +-
 main_page.doxygen.in                               |    3 +-
 media_types.h                                      |    2 +
 mime_util.h                                        |    2 +
 tests/DASTest                                      |   10 +-
 tests/DDSTest                                      |   10 +-
 tests/DMRTest                                      |   10 +-
 tests/EXPRTest                                     |   10 +-
 tests/Makefile.am                                  |   40 +-
 tests/Makefile.in                                  |  803 ++++---
 tests/ResponseBuilder.cc                           |    7 +
 tests/TestArray.cc                                 |  316 ++-
 tests/TestFunction.cc                              |    2 +-
 tests/atconfig                                     |   20 -
 tests/atlocal                                      |    5 -
 tests/das-test.cc                                  |    2 +-
 tests/dds-test.cc                                  |    2 +-
 tests/dmr-test.cc                                  |    2 +-
 tests/expr-test.cc                                 |    2 +-
 tests/expr-testsuite/test.2                        |   12 +-
 tests/expr-testsuite/test.2a                       |   14 +-
 tests/getdapTest                                   |   10 +-
 tests/package.m4                                   |    4 +-
 unit-tests/AttrTableTest.cc                        |    4 +-
 unit-tests/D4AsyncDocTest.cc                       |    4 +-
 unit-tests/D4DimensionsTest.cc                     |    4 +-
 unit-tests/D4EnumTest.cc                           |    4 +-
 unit-tests/D4GroupTest.cc                          |    4 +-
 unit-tests/D4MarshallerTest.cc                     |    4 +-
 unit-tests/D4ParserSax2Test.cc                     |    4 +-
 unit-tests/D4UnMarshallerTest.cc                   |    4 +-
 unit-tests/DDSTest.cc                              |    4 +-
 unit-tests/DDXParserTest.cc                        |    2 +-
 unit-tests/DMRTest.cc                              |    4 +-
 unit-tests/HTTPCacheTest.cc                        |    4 +-
 unit-tests/HTTPConnectTest.cc                      |    4 +-
 unit-tests/Makefile.am                             |    5 +-
 unit-tests/Makefile.in                             | 1201 +++++++---
 unit-tests/MarshallerTest.cc                       | 1285 +++++++---
 unit-tests/RCReaderTest.cc                         |    8 +-
 unit-tests/SequenceTest.cc                         |    2 +-
 unit-tests/ServerFunctionsListUnitTest.cc          |    2 +-
 unit-tests/SignalHandlerTest.cc                    |    4 +-
 unit-tests/cache-testsuite/Makefile.in             |  103 +-
 unit-tests/chunked_iostream_test.cc                |    4 +-
 unit-tests/marshT.cc                               |  778 +++---
 unit-tests/valgrind_suppressions.txt               |   90 +
 util.cc                                            |  446 ++--
 util.h                                             |   28 +-
 249 files changed, 11527 insertions(+), 23409 deletions(-)

diff --git a/Array.cc b/Array.cc
index 453f49d..e7b8101 100644
--- a/Array.cc
+++ b/Array.cc
@@ -61,9 +61,10 @@ using namespace std;
 
 namespace libdap {
 
-Array::dimension::dimension(D4Dimension *d) : dim(d), use_sdim_for_slice(true) {
-	size = d->size();
-	name = d->name();
+Array::dimension::dimension(D4Dimension *d) : dim(d), use_sdim_for_slice(true)
+{
+    size = d->size();
+    name = d->name();
 
     start = 0;
     stop = size - 1;
diff --git a/AttrTable.h b/AttrTable.h
index d83db9b..67985e4 100644
--- a/AttrTable.h
+++ b/AttrTable.h
@@ -166,7 +166,8 @@ public:
         entry(): name(""), type(Attr_unknown), is_alias(false),
                 aliased_to(""), is_global(true), attributes(0), attr(0) {}
 
-        entry(const entry &rhs)
+        entry(const entry &rhs): name(rhs.name), type(rhs.type), is_alias(rhs.is_alias),
+                aliased_to(rhs.aliased_to), is_global(rhs.is_global),attributes(0), attr(0)
         {
             clone(rhs);
         }
@@ -190,11 +191,13 @@ public:
 
         void clone(const entry &rhs)
         {
+#if 0
             name = rhs.name;
             type = rhs.type;
             is_alias = rhs.is_alias;
             aliased_to = rhs.aliased_to;
             is_global = rhs.is_global;
+#endif
             switch (rhs.type) {
             case Attr_unknown:
                 break;
diff --git a/BaseType.cc b/BaseType.cc
index cfe0236..37feb2d 100644
--- a/BaseType.cc
+++ b/BaseType.cc
@@ -125,7 +125,7 @@ BaseType::m_duplicate(const BaseType &bt)
 BaseType::BaseType(const string &n, const Type &t, bool is_dap4)
         : d_name(n), d_type(t), d_dataset(""), d_is_read(false), d_is_send(false),
         d_parent(0), d_attributes(0), d_is_dap4(is_dap4),
-        d_in_selection(false), d_is_synthesized(false)
+		d_in_selection(false), d_is_synthesized(false)
 {}
 
 /** The BaseType constructor needs a name, a dataset, and a type.
@@ -143,7 +143,7 @@ BaseType::BaseType(const string &n, const Type &t, bool is_dap4)
 BaseType::BaseType(const string &n, const string &d, const Type &t, bool is_dap4)
         : d_name(n), d_type(t), d_dataset(d), d_is_read(false), d_is_send(false),
         d_parent(0), d_attributes(0), d_is_dap4(is_dap4),
-        d_in_selection(false), d_is_synthesized(false)
+		d_in_selection(false), d_is_synthesized(false)
 {}
 
 /** @brief The BaseType copy constructor. */
@@ -180,12 +180,11 @@ BaseType::operator=(const BaseType &rhs)
     debugging when regular inspection w/ddd or gdb isn't enough.
 
     @return A string which shows the object's internal stuff. */
-string
-BaseType::toString()
+string BaseType::toString()
 {
     ostringstream oss;
     oss << "BaseType (" << this << "):" << endl
-    << "          _name: " << d_name << endl
+    << "          _name: " << name() << endl
     << "          _type: " << type_name() << endl
     << "          _dataset: " << d_dataset << endl
     << "          _read_p: " << d_is_read << endl
@@ -240,7 +239,7 @@ BaseType::dump(ostream &strm) const
     << (void *)this << ")" << endl ;
     DapIndent::Indent() ;
 
-    strm << DapIndent::LMarg << "name: " << d_name << endl ;
+    strm << DapIndent::LMarg << "name: " << name() << endl ;
     strm << DapIndent::LMarg << "type: " << type_name() << endl ;
     strm << DapIndent::LMarg << "dataset: " << d_dataset << endl ;
     strm << DapIndent::LMarg << "read_p: " << d_is_read << endl ;
@@ -425,8 +424,11 @@ BaseType::read_p()
 
 /** Sets the value of the <tt>read_p</tt> property. This indicates that the
     value(s) of this variable has/have been read. An implementation of the
-    read() method would typically use this to set the \c read_p property to
-    true.
+    read() method should use this to set the \c read_p property to true.
+
+    @note If the is_synthesized property is true, this method will _not_
+    alter the is_read property. If you need that behavior, specialize the
+    method in your subclasses if the various types.
 
     @note For most of the types the default implementation of this method is
     fine. However, if you're building a server which must handle data
@@ -453,20 +455,28 @@ BaseType::read_p()
 void
 BaseType::set_read_p(bool state)
 {
-    d_is_read = state;
-
+    // The this comment is/was wrong!
     // The is_synthesized property was not being used and the more I thought
     // about how this was coded, the more this code below seemed like a bad idea.
     // Once the property was set, the read_p property could not be changed.
     // That seems a little silly. Also, I think I need to use this is_synthesized
     // property for some of the server function code I'm working on for Raytheon,
     // and I'd like to be able to control the read_p property! jhrg 3/9/15
-#if 0
-    if (! d_is_synthesized) {
-        DBG2(cerr << "Changing read_p state of " << name() << " to "
-	         << state << endl);
+
+    // What's true: The is_synthesized property is used by
+    // 'projection functions' in the freeform handler. It might be better
+    // to modify the FFtypes to support this behavior, but for now I'm returning
+    // the library to its old behavior. That this change (setting is_read
+    // of the value of is_syn...) broke the FF handler was not detected
+    // because the FF tests were not being run due to an error in the FF
+    // bes-testsuite Makefile.am). jhrg 9/9/15
+
+#if 1
+    if (!d_is_synthesized) {
         d_is_read = state;
     }
+#else
+    d_is_read = state;
 #endif
 }
 
@@ -961,7 +971,7 @@ BaseType::print_decl(ostream &out, string space, bool print_semi,
     if (constrained && !send_p())
         return;
 
-    out << space << type_name() << " " << id2www(d_name) ;
+    out << space << type_name() << " " << id2www(name()) ;
 
     if (constraint_info) {
         if (send_p())
@@ -1041,8 +1051,8 @@ BaseType::print_xml_writer(XMLWriter &xml, bool constrained)
     if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)type_name().c_str()) < 0)
         throw InternalErr(__FILE__, __LINE__, "Could not write " + type_name() + " element");
 
-    if (!d_name.empty())
-    if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
+    if (!name().empty())
+    if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
         throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
 
     if (is_dap4())
@@ -1110,7 +1120,7 @@ BaseType::print_dap4(XMLWriter &xml, bool constrained)
 bool
 BaseType::check_semantics(string &msg, bool)
 {
-    bool sem = (d_type != dods_null_c && d_name.length());
+    bool sem = (d_type != dods_null_c && name().length());
 
     if (!sem)
         msg = "Every variable must have both a name and a type\n";
diff --git a/BaseType.h b/BaseType.h
index 136e49a..0d105f8 100644
--- a/BaseType.h
+++ b/BaseType.h
@@ -163,8 +163,22 @@ public:
 
     BaseType &operator=(const BaseType &rhs);
 
-    bool is_dap4() const { return d_is_dap4; }
-    void set_is_dap4(const bool v) { d_is_dap4 = v;}
+    /**
+     * Remove any read or set data in the private data of the variable,
+     * setting read_p() to false. Used to clear any dynamically allocated
+     * storage that holds (potentially large) data. For the simple types,
+     * this no-op version is all that's needed. Vector and some other classes
+     * define a special version and have serialize() implementations that
+     * call it to free data as soon as possible after sending it.
+     *
+     * @note Added 7/5/15 jhrg
+     * @note Any specialization of this should make sure to reset the read_p
+     * property.
+     */
+    virtual void clear_local_data() { set_read_p(false); }
+
+    virtual bool is_dap4() const { return d_is_dap4; }
+    virtual void set_is_dap4(const bool v) { d_is_dap4 = v;}
 
     /** Clone this instance. Allocate a new instance and copy \c *this into
 	it. This method must perform a deep copy.
@@ -174,15 +188,15 @@ public:
 	@return A newly allocated copy of \c this. */
     virtual BaseType *ptr_duplicate() = 0;
 
-    string name() const;
+    virtual string name() const;
     virtual void set_name(const string &n);
     virtual std::string FQN() const;
 
-    Type type() const;
-    void set_type(const Type &t);
-    string type_name() const;
+    virtual Type type() const;
+    virtual void set_type(const Type &t);
+    virtual string type_name() const;
 
-    string dataset() const ;
+    virtual string dataset() const ;
 
     /**
      * @brief How many elements are in this variable.
@@ -372,7 +386,9 @@ public:
         to/from a stream.
 
         This method is defined by the various data type classes. It calls the
-        read() abstract method.
+        read() abstract method. Unlike serialize(), this method does not
+        clear the memory use to hold the data values, so the caller should
+        make sure to delete the DDS or the variable as soon as possible.
 
         @param eval Use this as the constraint expression evaluator.
         @param dds The Data Descriptor Structure object corresponding
@@ -381,9 +397,12 @@ public:
     virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
 
     /** Sends the data from the indicated (local) dataset through the
-	connection identified by the <i>sink</i> parameter. If the
+	connection identified by the Marshaller parameter. If the
 	data is not already incorporated into the DDS object, read the
-	data from the dataset.
+	data from the dataset. Once the data are sent (written to the
+	Marshaller), they are deleted from the object and the object
+	state is reset so that they will be read again if the read()
+	method is called.
 
 	This function is only used on the server side of the
 	client/server connection, and is generally only called from
@@ -391,7 +410,7 @@ public:
 	implementation; each datatype child class supplies its own
 	implementation.
 
-	@brief Move data to the net.
+	@brief Move data to the net, then remove them from the object.
 
         @param eval Use this as the constraint expression evaluator.
 	@param dds The Data Descriptor Structure object corresponding
@@ -400,14 +419,53 @@ public:
 	@param m A marshaller used to serialize data types
 	@param ce_eval A boolean value indicating whether to evaluate
 	the DODS constraint expression that may accompany this
-	dataset. The constraint expression is stored in <i>dds</i>.
+	dataset. The constraint expression is stored in the <i>dds</i>.
 	@return This method always returns true. Older versions used
 	the return value to signal success or failure.
 
+	@note We changed the default behavior of this method so that it
+	calls BaseType::clear_local_data() once the values are sent. This,
+	combined with the behavior that read() is called by this method
+	just before data are sent, means that data for any given variable
+	remain in memory for the shortest time possible. Furthermore, since
+	variables are serialized one at a time, no more than one variable's
+	data will be in memory at any given time when using the default
+	behavior. Some code - code that uses intern_data() or server functions -
+	might alter this default behavior. Only Array (i.e. Vector), Sequence,
+	D4Sequence and D4Opaque types actually hold data in dynamically allocated
+	memory, so sonly those types have the new/changed behavior.
+	This change was made on 7/5/15.
+
 	@exception InternalErr.
 	@exception Error.
 	@see DDS */
-    virtual bool serialize(ConstraintEvaluator &eval, DDS &dds,  Marshaller &m, bool ce_eval = true);
+    virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
+
+#if 0
+    /**
+     * Provide a way to get the old behavior of serialize() - calling this
+     * method will serialize the BaseType object's data but _not_ delete its
+     * data storage.
+     *
+     * @note This method's behavior differs only for Array (i.e. Vector), Sequence,
+     * D4Sequence and D4Opaque types; the other types do not use dynamic memory to
+     * hold data values.
+     *
+     * @param eval Use this as the constraint expression evaluator.
+     * @param dds The Data Descriptor Structure object corresponding
+     * to this dataset. See <i>The DODS User Manual</i> for
+     * information about this structure.
+     * @param m A marshaller used to serialize data types
+     * @param ce_eval A boolean value indicating whether to evaluate
+     * the DODS constraint expression that may accompany this
+     * @return This method always returns true. Older versions used
+     * the return value to signal success or failure.
+     * @param
+     */
+    virtual bool serialize_no_release(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true) {
+        return serialize(eval, dds, m, ce_eval);
+    }
+#endif
 
     /**
      * @brief include the data for this variable in the checksum
@@ -423,14 +481,40 @@ public:
      * @brief The DAP4 serialization method.
      * Serialize a variable's values for DAP4. This does not write the DMR
      * persistent representation but does write that part of the binary
-     * data blob that holds a variable's data.
+     * data blob that holds a variable's data. Once a variable's data are
+     * serialized, that memory is reclaimed (by calling BaseType::clear_local_data())
+     *
      * @param m
      * @param dmr
      * @param eval
      * @param filter True if there is one variable that should be 'filtered'
      * @exception Error or InternalErr
      */
-    virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
+    virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
+
+#if 0
+    /**
+     * @brief Variation on the DAP4 serialization method - retain data after serialization
+     * Serialize a variable's values for DAP4. This does not write the DMR
+     * persistent representation but does write that part of the binary
+     * data blob that holds a variable's data. Once a variable's data are
+     * serialized, that memory is reclaimed (by calling BaseType::clear_local_data())
+     *
+     * @note This version does not delete the storage of Array, D4Sequence or
+     * D4Opaque variables, as it the case with serialize(). For other types,
+     * this method and serialize have the same beavior (since those types do
+     * not us dynamic memory to hold data values).
+     *
+     * @param m
+     * @param dmr
+     * @param eval
+     * @param filter True if there is one variable that should be 'filtered'
+     * @exception Error or InternalErr
+     */
+    virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false) {
+        serialize(m, dmr, filter);
+    }
+#endif
 
     /** Receives data from the network connection identified by the
 	<tt>source</tt> parameter. The data is put into the class data
diff --git a/Byte.cc b/Byte.cc
index c26b425..2222fc2 100644
--- a/Byte.cc
+++ b/Byte.cc
@@ -79,7 +79,7 @@ namespace libdap {
     created.
 
 */
-Byte::Byte(const string & n): BaseType(n, dods_byte_c)
+Byte::Byte(const string & n): BaseType(n, dods_byte_c), d_buf(0)
 {}
 
 /** This Byte constructor requires the name of the variable to be created
@@ -92,7 +92,7 @@ Byte::Byte(const string & n): BaseType(n, dods_byte_c)
     @param d A string containing the name of the dataset from which the
     variable is being created.
 */
-Byte::Byte(const string &n, const string &d): BaseType(n, d, dods_byte_c)
+Byte::Byte(const string &n, const string &d): BaseType(n, d, dods_byte_c), d_buf(0)
 {}
 
 Byte::Byte(const Byte & copy_from): BaseType(copy_from)
diff --git a/ChangeLog b/ChangeLog
index 96176f2..4faf8ea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,879 @@
+2015-09-18  James Gallagher  <jgallagher at opendap.org>
+
+	Added empty Coverity model file
+
+	Fixed a bug in the DAP4 CE evaluator
+	The DAP4 CE evaluator was using just the stop index value
+	as the size of a dimension when testing if the stride value
+	was valid. When a dimension of length 1 (i.e., [0:0]) was
+	found, it's length was '0' and a stride of '1' was invalid.
+	I fixed this and the test now uses stop-start +1 for the
+	dimension length.
+
+2015-09-17  James Gallagher  <jgallagher at opendap.org>
+
+	HTTPCacheTable uses verbose errors
+	... instead of obscure error codes
+
+	Modified configure.ac to fail if uuid.h is not found.
+
+2015-09-16  James Gallagher  <jgallagher at opendap.org>
+
+	Added #error if uuid.h is not found modified:   DODSFilter.cc modified:   tests/ResponseBuilder.cc
+
+	Fixed a syntax error modified:   tests/ResponseBuilder.cc
+
+	An attempt to fix the uuid.h header issues.
+	I added a test to test for uuid.h in addition to uuid/uuid.h
+	in the hope that it'll find something and compile. I may have to
+	work on this a bit more since it's caused such a hassle on the
+	different build systems.
+
+2015-09-15  James Gallagher  <jgallagher at opendap.org>
+
+	Minor issue in D4EnumDefs.cc with range checking
+
+	Added #include <cerrno> where needed
+
+2015-09-14  James Gallagher  <jgallagher at opendap.org>
+
+	Minor fix for precision in Float64, other fixes.
+
+	CID 81430, CID 81412, CID 81409, CID 81405, CID 81402, CID 81401,
+	CID 81397, formatting, CID 81389, CID 81382, CID 81377, CID 81375,
+	CID 81373, CID 81370, CID 81363, CID 81362, CID 81361, CID 81360,
+	CID 81359
+
+015-09-10  James Gallagher  <jgallagher at opendap.org>
+
+	Updated files for the release of 3.15
+
+2015-09-09  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' into parallel_io
+
+	An error introduced in March has been fixed; Freeform tests now
+	pass. Commit 6b005387 introduced a change where set_read_p() no
+	longer tested the state of the is_synthesized property. Before, if
+	the property was set the method would not change the state of
+	is_read. The change made it so the is_read propery was changed
+	regardless of the state of is_synthesized. This broke the
+	'projection functions' in the FreeForm handler. I have reverted to
+	the old libdap behavior, and the tests now pass.
+
+2015-09-04  James Gallagher  <jgallagher at opendap.org>
+
+	Removed the old serialize_no_release() method
+
+2015-09-02  James Gallagher  <jgallagher at opendap.org>
+
+	Now has a special class for RAII on the lock in the child thread.
+
+2015-08-31  James Gallagher  <jgallagher at opendap.org>
+
+	Cleaned out more dead code from Vector.cc
+
+2015-08-28  James Gallagher  <jgallagher at opendap.org>
+
+	Updated the versio number to 3.15
+	This because of the parallel IO code and pipelining support.
+
+2015-08-28  James Gallagher  <jgallagher at opendap.org>
+
+	Removed old code from MarshallerThread refactor.
+
+	Moved the pthread code from XDRStreamMarshaller
+	It's now in MarshallerThread and used by XDRStreamMarshaller via the
+	'pointer to an implementation' pattern. This means that the pthread.h,
+	which configure looks for but may not find, is not included in XDR-
+	StreamMarshaller's header anymore.
+
+	I did not mention this in the git log, but I've removed the
+	serialize_no_release() method I added after refactoring the code
+	so that it wasn't needed (I moved the 'release' calls to the BES
+	dap module, so libdap's behavior is not changed).
+
+2015-08-27  James Gallagher  <jgallagher at opendap.org>
+
+	Added support for put_vector_part() to D4StreamMarshaller
+
+	Refactor: CLEAR_LOCAL_DATA and USE_POSIX_THREADS
+	We found that we could call clear_local_data() right after variables
+	were serialized and get a much flatter memory profile. However, putting
+	those calls in serialize() changed its behavior. I've moved them to
+	bes/dap/ResponseBuilder - but that is controllable using a comple-time
+	directive. Similarly, the compile-time switch USE_POSIX_THREADS
+	can be used to turn off that feature (#undef). See XDRStreamMarshaller.
+
+	Refactor: Parallel I/O methods
+	I refactored the three new parallel I/O methods back into the matching
+	put_vector() methods of the same/similar names. This cuts down on the
+	naming mess and means that other classes like XDFFileStream don't have
+	to include hacked methods that throw exceptions. This commit also
+	includes changes tha wrap the clear_local_data() calls in #ifdef
+	CLEAR_LOCAL_DATA. Lastly, this refactor will also require a matching
+	edit to ncml_module.
+
+2015-08-24  James Gallagher  <jgallagher at opendap.org>
+
+	Patch/fix/hack for XDRStreamMarshaller
+	This class' header requires pthread.h but that makes for issues since
+	we cannot put an include of config.h in a .h file that is installed.
+	To get on with testing, I'm checking in this version that just includes
+	it; later on I may modify the class to encapsulate the pthreads stuff.
+
+	Fix for clear_local_data() race condition
+	Took advantage of the current XDRStreamMarshaller impl that copies
+	data before writing it out. This means our code can delete the original
+	data held by the object right after the thread used to send that data
+	hass been called (actually, it could delete it _before_ starting the
+	thread, but doing so afterward keeps that feature out of the marshaller
+	class, which may come in handly later on...). Later on we may switch
+	to reference counted pointers and then this issue will go away.
+
+	Removed call to clear_local_data() in Vector::Serialize()
+	This was colliding with the call to clear_local_data() in the thread
+	when put_vector_thread() was called. This showed up as a 'sometimes'
+	failure of expr test #21. The bug happens only when serializing an
+	array of strucutre that contains arrays.
+
+2015-08-22  James Gallagher  <jgallagher at opendap.org>
+
+	Corrected a spelling mistake with 'serialize_no_release'
+
+	I've added synchronization code to the XDRStreamMarshaller dotr
+	This causes the XDRStreamMarshaller dtor to block on the d_out_mutex
+	until the child thread (possibly) writing to the output stream
+	completes.
+
+2015-08-21  James Gallagher  <jgallagher at opendap.org>
+
+	Added parallel_io to the set of branches Travis will build.
+
+	Now threads in XDRStreamMarshaller are created detached state
+
+	Added the new put_vector_thread methods to Marshaller
+	I made them have a default implementation so that child classes
+	won't break. I'm not sure if that's the best way to go...
+	Also dropped the new *_thread() methods into Vector::serialize(),
+	but they don't work so those are turned off by using #undef
+	USE_POSIX_THREADS
+
+	Parallel I/O for vector data maybe working
+	I have coded put_vector_thread() and put_vector_part_thread() and
+	they are passing unit tests.
+
+2015-08-18  James Gallagher  <jgallagher at opendap.org>
+
+	Removed some of the TODOs in libdap
+	[ci skip]
+
+2015-08-17  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4
+
+	Modified Vector::get_buf() so it can be used in the ncml handler
+
+2015-08-17  Nathan Potter  <ndp at opendap.org>
+
+	Merged the new (template-less) version of Vector inot master branch
+
+2015-08-17  James Gallagher  <jgallagher at opendap.org>
+
+	Completed DAP2 put_vector_part() and associated methods.
+
+2015-08-14  Nathan Potter  <ndp at opendap.org>
+
+	Typo
+
+2015-08-14  James Gallagher  <jgallagher at opendap.org>
+
+	Partial Vector/Array serialization partly working!
+	Must still implement the parts for Arrays of int16, ..., types;
+	only byte arrays work now.
+
+	Checkpoint: Adding methods to allow serailization of Vectors in parts.
+	Missing methods in D4StreamMarshaller, XDRFileMarsahller and parts of
+	methods in XDRStreamMarshaller.
+
+	Added three protected accessors to Vector
+	These provide access to the underlying data held in a Vector/Array
+	and are accessible to descendant classes only.
+
+2015-08-14  Nathan Potter  <ndp at opendap.org>
+
+	Replaced template methods in Vector.cc with more pedantic
+	implmentations. Made the templted methods private and used them in
+	the implementations of the new pedantic methods.
+
+2015-08-10  James Gallagher  <jgallagher at opendap.org>
+
+	Bumped up the version number to 3.14.2
+
+	Bumped up the version (and SO numbers). This is 3.14.2
+
+	Merge branch 'serialize_n_release'
+
+	Added a serialize_no_release() method
+	This rounds out the serialize_n_release branch. The new behavior of
+	freeing the dynamic memory is very desireable, so it's the default,
+	but if some code wants to serialize, do something else and then delete
+	the storage, the new serialize_no_release provides that option. All
+	of our libdap and bes/module tests pass. This will be merged to the
+	master branch once the latter has been tagged.
+
+2015-08-07  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed overwriting commit for Vector::serialize()
+	We decided to make the serialize and release code real, but in the
+	process that collided with changes to BaseType::name() (making it
+	a virtual method). One line was broken, but since it was the call to
+	clear_local_data() in Vector::serialize(), it was an important line!
+
+2015-08-06  James Gallagher  <jgallagher at opendap.org>
+
+	distcheck works locally
+
+	Fix for distcheck and getdapTest
+
+2015-08-05  James Gallagher  <jgallagher at opendap.org>
+
+	make check now supports parallel execution
+	Modified test/Makefile.am so that autotest parallel tests work. Run
+	make check with TESTSUITEFLAGS=-jN
+
+2015-08-05  Nathan Potter  <ndp at opendap.org>
+
+	pulled from github and merged conflicts
+
+	Refactored use of the name() method in BaseType so that it is now overrideable
+
+2015-08-05  James Gallagher  <jgallagher at opendap.org>
+
+	Added BaseType::clear_local_data()
+	The clear_local_data() method is used to free just the parts of a
+	BaseType (child of, really) that hold large amounts of data. It applies
+	to only a handful of the variable types (Vector, Sequence, D4Opaque and
+	D4Sequence). It is used to free memory right after data values are
+	sent to the client using serailize(). This means that data are no longer
+	held by the variable objects once serialize() returns - at least for
+	Array, Sequence, ... Other types like Byte, Int16, ..., will retain
+	their values because those values are not held in dynamically allocated
+	storage.
+
+2015-08-04  James Gallagher  <jgallagher at opendap.org>
+
+	Hacked the marshT unit-test
+	I modified this so that it no longer relies on data being present after
+	serialize() has been called. It seems that none of the handlers use
+	this 'feature' and we can change the code so that memory is freed right
+	after the bits are sent fir each variable. This means that only one
+	variabe's data are in memory at any given time.
+
+2015-08-03  Nathan Potter  <ndp at opendap.org>
+
+	Checking in change to _always_ release array memory after serialization. This causes the Marshaller test for Structure to seg fault.
+
+2015-07-14  James Gallagher  <jgallagher at opendap.org>
+
+	Removed the bisong version print out
+	...I think this is working fine now
+	[ci skip]
+
+2015-07-13  James Gallagher  <jgallagher at opendap.org>
+
+	Added distcheck to travis
+
+	travis caching
+	Modified travis.yml and install_libdap4_source_deps.sh so that
+	the bison source build is cached.
+
+	Another fix: added '/bin' to $HOME/bison in $PATH
+
+	Removed odd ^S from install_libdap4_source_deps.sh
+
+	More travis hacks - addes sudo: false back in; remove tabs
+
+2015-07-12  James Gallagher  <jgallagher at opendap.org>
+
+	travis: The build was not triggered with the last push...
+	... so try removing 'sudo: false'
+
+	Switched travis to use docker/containers
+
+2015-07-09  James Gallagher  <jgallagher at opendap.org>
+
+	Added .NOTPARALLEL: back to the C++ parser Makefile.am files
+	We need this because stack.hh, ..., are built in one shot by
+	bison.
+
+	Updated the library version
+
+	Grammar fixes - for flex and its C++ scanner code.
+	There is a conflict between the defined return type of
+	FlexLexer::LexerInput. Some versions of flex define that
+	method as returning an int and some a returning a size_t.
+	Including generated code using one will break when a build
+	machine uses the other. I used dist-hook to just 'rm' those
+	generated lex.*.cc files  from d4_ce and d4_function - the
+	other generated scanners are OK. This is really a work-around
+	since we should be able to include the generated scanners
+	and then drop the build requirement for both bison and flex.
+
+2015-07-07  James Gallagher  <jgallagher at opendap.org>
+
+	Added absolute-header-m4 and removed .gitignore
+	I think the .gitignore is from the gnulib source
+	and is fine for their git repo, but not for clients
+	of the library.
+
+	Changed the tag for non-master travis builds to _travis
+	... from -travis. Minor, but it bugged me.
+
+	Modified travis.yml so that branches ending in -travis will be built.
+
+	Updated gnulib code - this may affect the coverity results
+
+2015-07-02  James Gallagher  <jgallagher at opendap.org>
+
+	Coverity fix in dds.yy
+	Fixed a potential leak where storage allocated is overwritten.
+	An unlikely bug, but not a big deal to fix.
+
+	Issues found using coverity fixed
+
+2015-06-29  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed cppunit package for travis.yml
+
+	Fixed a memory leak in dds.y
+
+2015-06-26  James Gallagher  <jgallagher at opendap.org>
+
+	Minor syntax error in TestArray; Travis now includes cppunit tests
+
+	Memory leak in TestArray.cc plugged
+
+	More changes WRT coverity and travis
+	...in the travis.yml. Removed the before_build_command
+	stuff from the coverity scan addon section since it seems
+	to be redundant.
+
+	Added coverity scan to travis CI
+
+2015-06-25  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4.git
+
+	Issues found in D4ParserSax2, DAS and DDS using Coverity.
+
+2015-06-20  James Gallagher  <jgallagher at opendap.org>
+
+	Finally fixed...?
+	Using autoconf 2.69 make dist is building a tar-gz that includes the
+	BUILT_SOURCES, which would be great for builders without bison 3. I'm
+	not sure if that will work with autoconf 2.63.
+
+2015-06-19  James Gallagher  <jgallagher at opendap.org>
+
+	Move the D4 Function parser to its own directory.
+	This is an attempt to really fix the stack, position and location.hh
+	problem for once and for all. The Travis build is working, but maybe
+	we're just lucky because a build from the tar.gz made using make dist
+	was still failing.
+
+2015-06-18  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4.git
+
+2015-06-18  Ubuntu  <ubuntu at ip-172-31-34-168.ec2.internal>
+
+	Modified build-deb-pkg.sh so that dap-config matches the installed
+	files.
+
+2015-06-18  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4.git
+
+	Try using NOTPARALLEL with the libdap build - another travis hack.
+
+2015-06-18  Ubuntu  <ubuntu at ip-172-31-34-168.ec2.internal>
+
+	Modified DEBIAN/control to use libcurl4-openssl-dev as a dependency.
+	Not sure why this was not working before.
+	[ci skip]
+
+	Merge branch 'master' of https://github.com/opendap/libdap4
+
+	Added hackery script to DEBIAN directory.
+	This will help with my simple deb file used for the bes build.
+
+2015-06-18  James Gallagher  <jgallagher at opendap.org>
+
+	Modified Makefile.am and d4_ce/... so bison is called only once
+	This should stop the semi-random build fails for libdap4 on Travis
+	and for other people.
+
+2015-06-17  James Gallagher  <jgallagher at opendap.org>
+
+	Added .NOTPARALLEL to d4_ce/Makefile.am for the grammar files
+	I hope this fixes the odd issue with the generated grammar files
+	breaking hte build in a random fashion. The error may be do to parallel
+	builds running bison several times for each of the generated files, all
+	at the same time.
+
+	Cleaned up the d4_ce code
+	The Makefile.am had leftover parts from the attempt to make the build
+	work when bison 3 was not present. That may have been the cause of the
+	seemingly random build errors I see on Travis CI
+
+	Added dpkg -l to travis.yml
+	This is part of debugging the bes travis build - I cannot seem to sort
+	out the libcurl dependency since my Ubuntu AMI is a 14.x but the build
+	is using 12.x
+
+	travis bison hack...
+
+2015-06-17  Ubuntu  <ubuntu at ip-172-31-34-168.ec2.internal>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4
+
+	Changed DEBIAN/control arch to amd64
+
+2015-06-17  James Gallagher  <jgallagher at opendap.org>
+
+	travis.yml edits
+	Now uses deploy section only for tagged pushes; removed unneeded
+	--force-yes with apt-get; and will build tags in addition to the
+	master branch.
+
+	Fixed build-deb-pkg.sh and added 'deploy' section to travis.
+	Not sure about the deploy bit...
+
+2015-06-16  James Gallagher  <jgallagher at opendap.org>
+
+	Use newly built bison 3
+	Added /usr/local/bin to PATH...
+
+	Build bison from source (circling back)
+	Travis-CI is currently using ubuntu 12 which using bison 2; Ubuntu 14
+	has bison 3 in its package system.
+
+	More tweaks to the simple deb package build
+	This is a deb package for use with travis-ci when we get a bes CI
+	build working
+
+	Added debian package build to travis.yml
+	...also tried using --force-yes to get bison to load with apt-get
+	[ci skip]
+
+2015-06-16  Ubuntu  <ubuntu at ip-172-31-34-168.ec2.internal>
+
+	Added the build-deb-pkg.sh script.
+
+	Added DEBIAN/control
+	Use this along with dpkg-deb --build libdap_<version> to make a
+	debian package.
+
+2015-06-16  James Gallagher  <jgallagher at opendap.org>
+
+	Another change to the travis.yml file
+	It now uses bison installed using apt-get
+
+2015-06-08  James Gallagher  <jgallagher at opendap.org>
+
+	travis-ci error fixed
+	I left --prefix=... on the configure of bison but $prefix's definition
+	was moved to a later step.
+
+	Reorganization of the travis.yml script.
+
+2015-06-07  James Gallagher  <jgallagher at opendap.org>
+
+	clang...
+
+	...another try at clang support
+
+	...another try at clang
+
+2015-06-06  James Gallagher  <jgallagher at opendap.org>
+
+	minor tweak to 'make install' with sudo -i
+
+	fix for clang
+
+	more travis ci changes - learning what this can do...
+
+	Added some package installs to travis ci
+
+	travis ci fix
+
+	travis ci: added install of libdap
+
+	travis ci change: install bison 3 using sudo
+
+2015-06-05  James Gallagher  <jgallagher at opendap.org>
+
+	Travis CI updates
+
+	Added an initial .travis.yml file
+
+2015-06-01  James Gallagher  <jgallagher at opendap.org>
+
+	Added DBG2N - no line number version of DBG2
+
+2015-05-24  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed comment
+
+2015-05-14  James Gallagher  <jgallagher at opendap.org>
+
+	Added a new function to make a temp file using mkstemps()
+	This new function returns the temp file's name and a C++ fstream
+	object that is opened to the temp file. This change adds to the
+	libdap API.
+
+2015-05-12  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed missing <string> include. Patch from O. Poplawski.
+
+	Fix getopt() use. Patch from O. Poplawski
+
+	Broke --enable-developer; now fixed.
+
+	Fixed issues in configure and Makefiles reported by O. Poplawski.
+	--enable-coverage and --enable-valgrind were broken.
+	Setting CXXFLAGS to nothing broke builds on fedroa 21
+
+	Added coverage file to gitignore
+
+2015-05-01  James Gallagher  <jgallagher at opendap.org>
+
+	Formatting, old code removeal, doxygen updates
+
+2015-04-05  James Gallagher  <jgallagher at opendap.org>
+
+	Bison 3 is required for the build.
+	This might change, but for the next release (April 2015) it is a
+	requirement for building the code. It will be possible to get the
+	devel rpm and, however, and develop code that uses libdap w/o
+	needing bison 3.
+
+2015-04-03  James Gallagher  <jgallagher at opendap.org>
+
+	Bumped up the library versions
+	Each of libdap, libdapclient and libdapsever likely have new interfaces
+	but the old interfaces are intact, so CURRENT and AGE are increased,
+	and REVISION is reset to 0.
+
+	Various changes as needed for the release.
+
+2015-03-31  James Gallagher  <jgallagher at opendap.org>
+
+	Added to gitignore
+
+	Hacked more for the FlexLexer.h kludge...
+
+	Resurrected the D4*Scanner.h files
+
+	Modified the FlexLexer.h scheme
+	Now it fits more with the way I'm handling the other generated
+	files. The header is in the generated files dir and is only
+	copied out when bison 3 is not found. It's still a kludge...
+
+	Added FlexLexer.h
+	This might be a mistake - remove if this fails on linux, etc.
+
+2015-03-30  James Gallagher  <jgallagher at opendap.org>
+
+	Rest of changes for template grammar files
+	Now if bison 3.0+ is not found, the build will use
+	template versions of the generated grammar files. This
+	removes the dependence on bison 3.0 for most source
+	builds. Of course, if you want to modify the D4 grammar
+	you need bison 3.
+
+	Added generated grammar sources
+	When a machine does not have bison 3, it's a pain to install it, esp.
+	at a site that doesn't let the builder do that! The work-around is to
+	provide a backup set of sources that can be copied by the Makefile in
+	lieu of the real thing.
+
+2015-03-25  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4
+
+	Dropped the autoconf required version to 2.63
+	This accommodates RH/CentOS 6. I also had to change the AT_ARG_OPTION_ARG
+	calls so that multi-word options used underscores and not dashes.
+
+	Change to libdap.spec
+	I've added the dist info to the RPM and fixed up some of the
+	description, too.
+
+2015-03-17  James Gallagher  <jgallagher at opendap.org>
+
+	Edited comments and reformatted.
+	Also added a new method to Sequence that I subsequently removed
+	from the code using the preprocessor. ...it might come in handy
+	some day.
+
+	Refactored TestCommon
+	Now TestCommon.cc is not used; the constructors, etc. are now
+	in TestCommon.h. In the future this class could be modified so
+	that the 'series_values' property was accessible from TestCommon
+	and not just the individual type classes.
+
+	Change a comment emmited by configure less convoluted.
+
+2015-03-16  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4
+
+	Changes to build and to the Test* classes.
+	Now configure tests for the uuid/uuid.h header (before it tested only
+	for the library which meant that installing the libuuid package and
+	not the needed libuuid-devel package would pass configure but fail
+	during the build). I also removed some unused code from the Test* classes.
+	The TestCommon.cc file was not needed.
+
+	rpm target fixes
+	Added getdap4 to the files list for RPM and fixed distclean/distcheck
+	where some DMR tests are marked xfail (expected fail). With autotest,
+	xfail leaves some cruft behind in the DMRTest.dir directory that
+	./DMRTest --clean should remove (see the clean-local makefile target).
+	However, because a space was added to the names in the Makefile.am,
+	those --clean calls were not being made. Fixed. Somewhat exasperating...
+
+2015-02-26  James Gallagher  <jgallagher at opendap.org>
+
+	Merge branch 'master' of https://github.com/opendap/libdap4
+
+	Added convenience function to util
+	The new function extracts doubles from numeric arrays using a vector
+	to cu down on memory management complexity (at the cost of an addition
+	to the interface).
+
+2015-02-21  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed GetOpt.cc includes
+	This code used old includes (string.h, etc.) and was missing
+	stdio. I added <cstdio> and changed stdlib.h and string.h to
+	cstdlib and cstring. Removed a duplicate header. Build now works
+	on AWS Centos 6.
+
+2015-02-19  James Gallagher  <jgallagher at opendap.org>
+
+	More Cleanup
+	I re-indented TestSequence and removed some old code
+	as part of my work on the aggregation server (which
+	may not make it into the BES, another story...)
+
+	Cleanup
+	I removed unused code from Sequence, DDS.cc and AttrTable.cc
+
+2015-02-09  James Gallagher  <jgallagher at opendap.org>
+
+	Tweaked D4Sequence for BES function's tabular()
+	The d_length field is now set when set_values()
+	is called.
+
+2015-02-02  James Gallagher  <jgallagher at opendap.org>
+
+	Removed incorrect comment in Vector.h
+
+2015-01-14  James Gallagher  <jgallagher at opendap.org>
+
+	Added a type_name() function to util.cc/h
+	In the merge with DAP4, type_name() split into D2type_name() and
+	D4type_name(). That removes the symbol 'type_name()' from the library.
+	I added a function with that name that first tries to apply D4... and
+	then D2. If both fail, an exception is thrown. This provides forward
+	looking backward compatibility.
+
+	Fixed an issue with String constant arguments to DAP4 functions.
+	The function parser for DAP4 was including the double quotes that
+	delimit string constants in the value itself. I modified the parser
+	to eliminate those.
+
+2015-01-07  James Gallagher  <jgallagher at opendap.org>
+
+	HTTPCacheTest was failing; fixed.
+	The test assumed that the number of headers for a cached response
+	would equal the headers in a response. This might not be the case.
+	For example, the received response might include a Keep-Alive header.
+
+	Error in D4Maps copy ctor fixed.
+	This addresses an error in the DMRTest.cc unit test for the DMR
+	class. DMR's copy ctor was failing to copy the maps from Arrays
+	in the src object to the dest object because of an error in the
+	D4Maps m_duplicate method.
+
+	Corrected some comment text in DMR.cc
+
+2015-01-05  James Gallagher  <jgallagher at opendap.org>
+
+	Minor changes to the Makefile.am files
+
+2014-12-31  James Gallagher  <jgallagher at opendap.org>
+
+	Merge remote-tracking branch 'origin/dap4'
+	Conflicts:
+		unit-tests/HTTPConnectTest.cc
+
+2014-12-12  James Gallagher  <jgallagher at opendap.org>
+
+	Added eclipse meta files to gitignore.
+
+	Merge branch 'master' of https://github.com/opendap/libdap
+
+	comment change in main_page.doxygen
+
+2014-12-03  James Gallagher  <jgallagher at opendap.org>
+
+	Added files  left over from a full build to gitignore
+
+2014-11-19  James Gallagher  <jgallagher at opendap.org>
+
+	Added .gitignore and hacked up Makefile.am so that it uses subdir-objects.
+
+2014-10-21  James Gallagher  <jgallagher at opendap.org>
+
+	Added a valgrind 'suppressions' file for OSX 10.9. Not sure where
+	this is going, but valgrind for unit tests and regression tests is
+	probably a good thing.
+
+	Fixed to the Makefile.am in d4_ce so that the grammar for DAP4 builds correctly.
+
+2014-10-20  James Gallagher  <jgallagher at opendap.org>
+
+	Changed HTTPConnect.cc on the release branch and then copied here. Minor fix in the test baseline to accommadate a change in the test host (etag changed with a change in the Apache server version).
+	M    unit-tests/HTTPConnectTest.cc
+
+2014-10-16  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed ticket 2260 - The issue where the DMR copy ctor built a DMR that would subsequently cause a segfault has been fixed. The problem was in Array::update_dimension_pointers(). The D4Dimension objects were not copied correctly between the old and new set of D4Dimensions in the Groups in the source and dest DMRs
+
+2014-10-14  James Gallagher  <jgallagher at opendap.org>
+
+	Leak fix in the D4CE code - both the CE and Functions parser leaked memory - fixed. Tests HTTPCacheTest and HTTPConnectTest fixed - there were two issue with the new test.o2 server. Array.h - removed the D4Dimensions.h include.
+
+	Bug fix in ServerFunction: The setFunction setters in ServerFunction were setting other function pointers to null so that the ServerFunction object could hold only one kind of function for any given name. If we want linear_scale, e.g., to work for both DAP2 and DAP4, the class has to be able to support a btp_func and D4Function. I fixed the ctors and setters so that works.
+
+2014-09-17  James Gallagher  <jgallagher at opendap.org>
+
+	Renamed the bison 'Driver' classes to be D4ConstraintEvaluator and D4FunctionEvaluator. Added an eval() method to the latter so that the BES can evaluation DAP4 Functions in a some sort of a sane way. I also moved the old and crufty D4ResponseBuilder code out of the libdap dir; there's a class with the same name in tests, but it does different (and more sane) things.
+
+	Comments and changed template type from 't' to 'T'.
+
+	Comments...
+
+2014-09-12  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed FQN() for Constructors that hold arrays.
+
+2014-09-11  James Gallagher  <jgallagher at opendap.org>
+
+	I removed the DMR& parameter to BaseType::intern_data(). This seems to be a relic from DAP2 (where it may not have actually been used either) and it makes employing delegation somewhat harder in the 'transmitter' handlers I'm working on porting over to DAP4.
+
+	Modified to use the new 'DMR-free' version of intern_data(). Also fixed the help message.
+
+	Added a DMR that holds a nested sequence so this can be tested - currently does not work and is not part of the tests.
+
+2014-09-08  James Gallagher  <jgallagher at opendap.org>
+
+	Marked four tests a xfail. See ticket #2244
+	M    tests/DMRTest.at
+
+	I added specializations for transform_to_dap4() to TestStructure and TestSequence so that, among other things, the dapreader code can build DAP4 data responses using DAP2 response files.
+
+2014-09-05  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed hiccup in Makefile.am that prevented the D4Connect.h header from being installed - it was not listed in pkginclude_HEADERS. Added subdir-objects to the options list in the Makefile.am too. Fixed an error message in getdap4 - text change only.
+
+2014-09-04  James Gallagher  <jgallagher at opendap.org>
+
+	Added a FQN() method that will return the FQN for any variable, including the group part. Also added a decent comment on the D4Group::find_var() method. Unit tests added to the D4GroupTest unit test.
+
+2014-09-03  James Gallagher  <jgallagher at opendap.org>
+
+	Removed duplicate code in Sequence and Structure for the transform_to_dap4() method; moved the common code to Constructor.
+
+2014-08-27  James Gallagher  <jgallagher at opendap.org>
+
+	Added an update of the weak pointers held by Array so that the DMR::m_duplicate() method can use D4Group::ptr_duplicate(). This was useful when porting the gdal_handler code to DAP4.
+
+2014-08-21  James Gallagher  <jgallagher at opendap.org>
+
+	Change to Constructor::serialize(). It now calls read(). This was removed because it broke the behavior of D4Sequence - at least in the test code (it still does). More work needs to be done on this, but the FreeForm handler, which builds sequences is working with D4Sequence (DMR/DAP4 Data via the DDS --> DMR hack). I will need to revisit this...
+
+2014-08-19  James Gallagher  <jgallagher at opendap.org>
+
+	Now has a separate method to 'blend in' variables from a DDS into the DMR. This is used by the DDS-ctor for DMR but it can also be called on an existing DMR like the ones built by the BES. This was done so that information set when the BES builds the DMR won't be lost.
+
+	Changes to the transform_to_dap4() method - both Sequence and Structure have implementations that work for tests and clients, but not most servers. Array should be pretty general and may work for most handlers.
+
+2014-08-18  James Gallagher  <jgallagher at opendap.org>
+
+	Removed unused code - part of an aborted attempt to add a factory class as a param to BaseType::transform_to_dap4(...). Instead, it's likely better to subclass that method in the types like FFSequence (in the handlers). In the process I found a fair amount of old code that was commented out and removed it.
+
+2014-08-15  James Gallagher  <jgallagher at opendap.org>
+
+	Fixed an issue in Array where D4Dimensions made using the 'transform dap2 to dap4 code' with the same name but different sizes could be made. This was bad; I changed the code so that when a name conflict is found, the D4Dimension  will have a different name (made using the orig dimension name and the variable name). In this case, the fist D4Dimension gets to use the name exactly as it appears in the Array while the second D4Dimension gets a more cumbersome, but unique, name.
+
+	Fixed the order of printing of attributes and variables for constructor types when working with DAP2 responses (i.e., the DDX). The order (attr; vars) is reversed in DAP4.
+
+2014-08-14  James Gallagher  <jgallagher at opendap.org>
+
+	Patch for getopt applied
+	_M   .
+	M    unit-tests/DDSTest.cc
+	M    unit-tests/DDXParserTest.cc
+	MM   unit-tests/SequenceTest.cc
+	M    unit-tests/ServerFunctionsListUnitTest.cc
+
+	Patch from Orion Poplawski to fix some of the getopt calls in the unit-tests
+	M    unit-tests/DDSTest.cc
+	M    unit-tests/DDXParserTest.cc
+	M    unit-tests/SequenceTest.cc
+	M    unit-tests/ServerFunctionsListUnitTest.cc
+
+2014-08-11  James Gallagher  <jgallagher at opendap.org>
+
+	Changes from H 1.9.9 on the trunk
+
+2014-08-09  James Gallagher  <jgallagher at opendap.org>
+
+	Merge from the trunk to include changes for Hyrax 1.9.9
+	_M   .
+	M    RValue.cc
+	M    XMLWriter.h
+	M    configure.ac
+	M    ChangeLog
+	M    main_page.doxygen
+	M    INSTALL
+	M    libdap.spec
+	M    README
+	M    Makefile.am
+	M    NEWS
+	M    ce_expr.yy
+	M    unit-tests/HTTPConnectTest.cc
+	M    doxy.conf
+
+2014-08-08  James Gallagher  <jgallagher at opendap.org>
+
+	Version 3.13.3
+	M    ChangeLog
+	M    INSTALL
+	M    NEWS
+	M    README
+	M    configure.ac
+	M    doxy.conf
+	M    libdap.spec
+	M    main_page.doxygen
+
+	Fixed a leak in RValue.cc using a patch from Aron (ADB)
+
 2014-08-08  James Gallagher <jgallagher at opendap.org>
 
 	Fixed a leak in RValue.cc using a patch from Aron (ADB)
diff --git a/Connect.cc b/Connect.cc
index c118067..84c726e 100644
--- a/Connect.cc
+++ b/Connect.cc
@@ -38,6 +38,8 @@
 #define FILE_UN_MARSHALLER 1
 
 #include <cstring>
+#include <cerrno>
+
 #include <fstream>
 #include <algorithm>
 
@@ -315,7 +317,7 @@ void Connect::parse_mime(Response *rs)
  @param uname Use this username for authentication. Null by default.
  @param password Password to use for authentication. Null by default.
  @brief Create an instance of Connect. */
-Connect::Connect(const string &n, string uname, string password) throw (Error, InternalErr) :
+Connect::Connect(const string &n, string uname, string password) :
         d_http(0), d_version("unknown"), d_protocol("2.0")
 {
     string name = prune_spaces(n);
@@ -743,7 +745,6 @@ void Connect::request_ddx(DDS &dds, string expr)
     }
     catch (Error &e) {
         delete rs;
-        rs = 0;
         throw;
     }
 
@@ -759,7 +760,6 @@ void Connect::request_ddx(DDS &dds, string expr)
                 throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
             }
             delete rs;
-            rs = 0;
             throw e;
         }
 
@@ -777,26 +777,17 @@ void Connect::request_ddx(DDS &dds, string expr)
             }
             catch (Error &e) {
                 delete rs;
-                rs = 0;
                 throw;
             }
             break;
 
         default:
+            ObjectType ot = rs->get_type();
             delete rs;
-            rs = 0;
-            throw Error(
-                    "The site did not return a valid response (it lacked the\n\
-expected content description header value of 'dap4-ddx' and\n\
-instead returned '"
-                            + long_to_string(rs->get_type())
-                            + "').\n\
-This may indicate that the server at the site is not correctly\n\
-configured, or that the URL has changed.");
+            throw Error("Invalid response type when requesting a DDX response. Response type: " + long_to_string(ot));
     }
 
     delete rs;
-    rs = 0;
 }
 
 /** @brief The 'url' version of request_ddx
@@ -811,7 +802,6 @@ void Connect::request_ddx_url(DDS &dds)
     }
     catch (Error &e) {
         delete rs;
-        rs = 0;
         throw;
     }
 
@@ -823,18 +813,17 @@ void Connect::request_ddx_url(DDS &dds)
             Error e;
             if (!e.parse(rs->get_stream())) {
                 delete rs;
-                rs = 0;
                 throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
             }
             delete rs;
-            rs = 0;
             throw e;
         }
 
         case web_error:
             // We should never get here; a web error should be picked up read_url
             // (called by fetch_url) and result in a thrown Error object.
-            break;
+            delete rs;
+            throw InternalErr(__FILE__, __LINE__, "Web error.");
 
         case dods_ddx:
             try {
@@ -845,26 +834,19 @@ void Connect::request_ddx_url(DDS &dds)
             }
             catch (Error &e) {
                 delete rs;
-                rs = 0;
                 throw;
             }
             break;
 
-        default:
+        default: {
+            ObjectType ot = rs->get_type();
             delete rs;
-            rs = 0;
-            throw Error(
-                    "The site did not return a valid response (it lacked the\n\
-expected content description header value of 'dap4-ddx' and\n\
-instead returned '"
-                            + long_to_string(rs->get_type())
-                            + "').\n\
-This may indicate that the server at the site is not correctly\n\
-configured, or that the URL has changed.");
+
+            throw Error("Invalid response type when requesting a DDX response. Response type: " + long_to_string(ot));
+        }
     }
 
     delete rs;
-    rs = 0;
 }
 
 /** Reads the DataDDS object corresponding to the dataset in the Connect
@@ -1054,11 +1036,16 @@ Connect::read_data(DDS &data, Response *rs)
 static void divine_type_information(Response *rs)
 {
     // Consume whitespace
-    char c = getc(rs->get_stream());
-    while (isspace(c)) {
+    int c = getc(rs->get_stream());
+    while (!feof(rs->get_stream()) && !ferror(rs->get_stream()) && isspace(c)) {
         c = getc(rs->get_stream());
     }
 
+    if (ferror(rs->get_stream()))
+        throw Error("Error reading response type information: " + string(strerror(errno)));
+    if (feof(rs->get_stream()))
+        throw Error("Error reading response type information: Found EOF");
+
     // The heuristic here is that a DataDDX is a multipart MIME document and
     // The first non space character found after the headers is the start of
     // the first part which looks like '--<boundary>' while a DataDDS starts
diff --git a/Connect.h b/Connect.h
index 58bbf7b..1ffce11 100644
--- a/Connect.h
+++ b/Connect.h
@@ -148,19 +148,13 @@ private:
 protected:
     /** @name Suppress the C++ defaults for these. */
     //@{
-    Connect() : d_http(0)
-    { }
-    Connect(const Connect &) : d_http(0)
-    { }
-    Connect &operator=(const Connect &)
-    {
-        throw InternalErr(__FILE__, __LINE__, "Unimplemented assignment");
-    }
+    Connect();
+    Connect(const Connect &);
+    Connect &operator=(const Connect &);
     //@}
 
 public:
-    Connect(const string &name, string uname = "", string password = "")
-    throw(Error, InternalErr);
+    Connect(const string &name, string uname = "", string password = "");
 
     virtual ~Connect();
 
diff --git a/D4Connect.cc b/D4Connect.cc
index 2837f48..ba3e0d4 100644
--- a/D4Connect.cc
+++ b/D4Connect.cc
@@ -156,6 +156,9 @@ void D4Connect::process_data(DMR &data, Response &rs)
 			// force chunk read
 			// get chunk size
 			int chunk_size = cis.read_next_chunk();
+			if (chunk_size < 0)
+                throw Error("Found an unexpected end of input (EOF) while reading a DAP4 data response. (1)");
+
 			// get chunk
 			char chunk[chunk_size];
 			cis.read(chunk, chunk_size);
@@ -362,6 +365,9 @@ void D4Connect::request_dap4_data(DMR &dmr, const string expr)
             // force chunk read
             // get chunk size
             int chunk_size = cis.read_next_chunk();
+            if (chunk_size < 0)
+                throw Error("Found an unexpected end of input (EOF) while reading a DAP4 data response. (2)");
+
             // get chunk
             char chunk[chunk_size];
             cis.read(chunk, chunk_size);
@@ -403,647 +409,6 @@ void D4Connect::request_dap4_data(DMR &dmr, const string expr)
     delete rs;
 }
 
-#if 0
-/** Get version information from the server. This is a new method which will
- ease the transition to DAP 4.
-
- @note Use request_protocol() to get the DAP protocol version.
-
- @return The DAP version string.
- @see request_protocol() */
-string D4D4Connect::request_version()
-{
-    string version_url = _URL + ".ver";
-    if (_proj.length() + _sel.length())
-        version_url = version_url + "?" + id2www_ce(_proj + _sel);
-
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(version_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        throw;
-    }
-
-    d_server = rs.get_server();
-    d_protocol = rs.get_protocol();
-
-    delete rs;
-
-    return d_version;
-}
-
-/** Get protocol version  information from the server. This is a new method
- which will ease the transition to DAP 4. Note that this method returns
- the version of the DAP protocol implemented by the server. The
- request_version() method returns the \e server's version number, not
- the DAP protocol version.
-
- @note This method actually asks the server for the protocol version - use
- get_protocol() to get the protocol information from the most recent
- response (e.g., from the last DDX response returned by the server).
-
- @return The DAP protocol version string. */
-string D4D4Connect::request_protocol()
-{
-    string version_url = _URL + ".ver";
-    if (_proj.length() + _sel.length())
-        version_url = version_url + "?" + id2www_ce(_proj + _sel);
-
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(version_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    delete rs;
-    rs = 0;
-
-    return d_protocol;
-}
-
-/** Reads the DAS corresponding to the dataset in the Connect
- object's URL. Although DAP does not support using CEs with DAS
- requests, if present in the Connect object's instance, they will be
- escaped and passed as the query string of the request.
-
- @brief Get the DAS from a server.
- @param das Result. */
-void D4Connect::request_das(DAS &das)
-{
-    string das_url = _URL + ".das";
-    if (_proj.length() + _sel.length())
-        das_url = das_url + "?" + id2www_ce(_proj + _sel);
-
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(das_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    switch (rs.get_type()) {
-        case dods_error: {
-            Error e;
-            if (!e.parse(rs.get_stream())) {
-                delete rs;
-                rs = 0;
-                throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
-            }
-            delete rs;
-            rs = 0;
-            throw e;
-        }
-
-        case web_error:
-            // We should never get here; a web error should be picked up read_url
-            // (called by fetch_url) and result in a thrown Error object.
-            break;
-
-        case dods_das:
-        default:
-            // DAS::parse throws an exception on error.
-            try {
-                das.parse(rs.get_stream()); // read and parse the das from a file
-            }
-            catch (Error &e) {
-                delete rs;
-                rs = 0;
-                throw;
-            }
-
-            break;
-    }
-
-    delete rs;
-    rs = 0;
-}
-
-/** Reads the DAS corresponding to the dataset in the Connect
- object's URL. Although DAP does not support using CEs with DAS
- requests, if present in the Connect object's instance, they will be
- escaped and passed as the query string of the request.
-
- Different from request_das method in that this method uses the URL as
- given without attaching .das or projections or selections.
-
- @brief Get the DAS from a server.
- @param das Result. */
-void D4Connect::request_das_url(DAS &das)
-{
-    string use_url = _URL + "?" + _proj + _sel;
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(use_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    switch (rs.get_type()) {
-        case dods_error: {
-            Error e;
-            if (!e.parse(rs.get_stream())) {
-                delete rs;
-                rs = 0;
-                throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
-            }
-            delete rs;
-            rs = 0;
-            throw e;
-        }
-
-        case web_error:
-            // We should never get here; a web error should be picked up read_url
-            // (called by fetch_url) and result in a thrown Error object.
-            break;
-
-        case dods_das:
-        default:
-            // DAS::parse throws an exception on error.
-            try {
-                das.parse(rs.get_stream()); // read and parse the das from a file
-            }
-            catch (Error &e) {
-                delete rs;
-                rs = 0;
-                throw;
-            }
-
-            break;
-    }
-
-    delete rs;
-    rs = 0;
-}
-
-/** Reads the DDS corresponding to the dataset in the Connect object's URL.
- If present in the Connect object's instance, a CE will be escaped,
- combined with \c expr and passed as the query string of the request.
-
- @note If you need the DDS to hold specializations of the type classes,
- be sure to include the factory class which will instantiate those
- specializations in the DDS. Either pass a pointer to the factory to
- DDS constructor or use the DDS::set_factory() method after the
- object is built.
-
- @brief Get the DDS from a server.
- @param dds Result.
- @param expr Send this constraint expression to the server. */
-void D4Connect::request_dds(DDS &dds, string expr)
-{
-    string proj, sel;
-    string::size_type dotpos = expr.find('&');
-    if (dotpos != expr.npos) {
-        proj = expr.substr(0, dotpos);
-        sel = expr.substr(dotpos);
-    }
-    else {
-        proj = expr;
-        sel = "";
-    }
-
-    string dds_url = _URL + ".dds" + "?" + id2www_ce(_proj + proj + _sel + sel);
-
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(dds_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    switch (rs.get_type()) {
-        case dods_error: {
-            Error e;
-            if (!e.parse(rs.get_stream())) {
-                delete rs;
-                rs = 0;
-                throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
-            }
-            delete rs;
-            rs = 0;
-            throw e;
-        }
-
-        case web_error:
-            // We should never get here; a web error should be picked up read_url
-            // (called by fetch_url) and result in a thrown Error object.
-            break;
-
-        case dods_dds:
-        default:
-            // DDS::prase throws an exception on error.
-            try {
-                dds.parse(rs.get_stream()); // read and parse the dds from a file
-            }
-            catch (Error &e) {
-                delete rs;
-                rs = 0;
-                throw;
-            }
-            break;
-    }
-
-    delete rs;
-    rs = 0;
-}
-
-/** Reads the DDS corresponding to the dataset in the Connect object's URL.
- If present in the Connect object's instance, a CE will be escaped,
- combined with \c expr and passed as the query string of the request.
-
- Different from request_dds method above in that this method assumes
- URL is complete and does not add anything to the command, such as .dds
- or projections or selections.
-
- @note If you need the DDS to hold specializations of the type classes,
- be sure to include the factory class which will instantiate those
- specializations in the DDS. Either pass a pointer to the factory to
- DDS constructor or use the DDS::set_factory() method after the
- object is built.
-
- @brief Get the DDS from a server.
- @param dds Result. */
-void D4Connect::request_dds_url(DDS &dds)
-{
-    string use_url = _URL + "?" + _proj + _sel;
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(use_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    switch (rs.get_type()) {
-        case dods_error: {
-            Error e;
-            if (!e.parse(rs.get_stream())) {
-                delete rs;
-                rs = 0;
-                throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
-            }
-            delete rs;
-            rs = 0;
-            throw e;
-        }
-
-        case web_error:
-            // We should never get here; a web error should be picked up read_url
-            // (called by fetch_url) and result in a thrown Error object.
-            break;
-
-        case dods_dds:
-        default:
-            // DDS::prase throws an exception on error.
-            try {
-                dds.parse(rs.get_stream()); // read and parse the dds from a file
-            }
-            catch (Error &e) {
-                delete rs;
-                rs = 0;
-                throw;
-            }
-            break;
-    }
-
-    delete rs;
-    rs = 0;
-}
-
-/** Reads the DDX corresponding to the dataset in the Connect object's URL.
- If present in the Connect object's instance, a CE will be escaped,
- combined with \c expr and passed as the query string of the request.
-
- @note A DDX is represented as XML on the wire but in memory libdap uses a
- DDS object with variables that hold their own attributes (the DDS itself holds
- the global attributes).
-
- @brief Get the DDX from a server.
- @param dds Result.
- @param expr Send this constraint expression to the server. */
-void D4Connect::request_ddx(DDS &dds, string expr)
-{
-    string proj, sel;
-    string::size_type dotpos = expr.find('&');
-    if (dotpos != expr.npos) {
-        proj = expr.substr(0, dotpos);
-        sel = expr.substr(dotpos);
-    }
-    else {
-        proj = expr;
-        sel = "";
-    }
-
-    string ddx_url = _URL + ".ddx" + "?" + id2www_ce(_proj + proj + _sel + sel);
-
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(ddx_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    switch (rs.get_type()) {
-        case dods_error: {
-            Error e;
-            if (!e.parse(rs.get_stream())) {
-                delete rs;
-                rs = 0;
-                throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
-            }
-            delete rs;
-            rs = 0;
-            throw e;
-        }
-
-        case web_error:
-            // We should never get here; a web error should be picked up read_url
-            // (called by fetch_url) and result in a thrown Error object.
-            break;
-
-        case dods_ddx:
-        case dods_ddx:
-            try {
-                string blob;
-
-                DDXParser ddxp(dds.get_factory());
-                ddxp.intern_stream(rs.get_stream(), &dds, blob);
-            }
-            catch (Error &e) {
-                delete rs;
-                rs = 0;
-                throw;
-            }
-            break;
-
-        default:
-            delete rs;
-            rs = 0;
-            throw Error(
-                    "The site did not return a valid response (it lacked the\n\
-expected content description header value of 'dap4-ddx' and\n\
-instead returned '"
-                            + long_to_string(rs.get_type())
-                            + "').\n\
-This may indicate that the server at the site is not correctly\n\
-configured, or that the URL has changed.");
-    }
-
-    delete rs;
-    rs = 0;
-}
-
-/** @brief The 'url' version of request_ddx
- @see D4Connect::request_ddx. */
-void D4Connect::request_ddx_url(DDS &dds)
-{
-    string use_url = _URL + "?" + _proj + _sel;
-
-    Response *rs = 0;
-    try {
-        rs = d_http->fetch_url(use_url);
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-
-    d_version = rs.get_version();
-    d_protocol = rs.get_protocol();
-
-    switch (rs.get_type()) {
-        case dods_error: {
-            Error e;
-            if (!e.parse(rs.get_stream())) {
-                delete rs;
-                rs = 0;
-                throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
-            }
-            delete rs;
-            rs = 0;
-            throw e;
-        }
-
-        case web_error:
-            // We should never get here; a web error should be picked up read_url
-            // (called by fetch_url) and result in a thrown Error object.
-            break;
-
-        case dods_ddx:
-        case dods_ddx:
-            try {
-                string blob;
-
-                DDXParser ddxp(dds.get_factory());
-                ddxp.intern_stream(rs.get_stream(), &dds, blob);
-            }
-            catch (Error &e) {
-                delete rs;
-                rs = 0;
-                throw;
-            }
-            break;
-
-        default:
-            delete rs;
-            rs = 0;
-            throw Error(
-                    "The site did not return a valid response (it lacked the\n\
-expected content description header value of 'dap4-ddx' and\n\
-instead returned '"
-                            + long_to_string(rs.get_type())
-                            + "').\n\
-This may indicate that the server at the site is not correctly\n\
-configured, or that the URL has changed.");
-    }
-
-    delete rs;
-    rs = 0;
-}
-
-/** Reads the DataDDS object corresponding to the dataset in the Connect
- object's URL. If present in the Connect object's instance, a CE will be
- escaped, combined with \c expr and passed as the query string of the
- request. The result is a DataDDS which contains the data values bound to
- variables.
-
- @note If you need the DataDDS to hold specializations of the type classes,
- be sure to include the factory class which will instantiate those
- specializations in the DataDDS. Either pass a pointer to the factory to
- DataDDS constructor or use the DDS::set_factory() method after the
- object is built.
-
- @brief Get the DAS from a server.
- @param data Result.
- @param expr Send this constraint expression to the server. */
-void D4Connect::request_data(DataDDS &data, string expr)
-{
-    string proj, sel;
-    string::size_type dotpos = expr.find('&');
-    if (dotpos != expr.npos) {
-        proj = expr.substr(0, dotpos);
-        sel = expr.substr(dotpos);
-    }
-    else {
-        proj = expr;
-        sel = "";
-    }
-
-    string data_url = _URL + ".dods?" + id2www_ce(_proj + proj + _sel + sel);
-
-    Response *rs = 0;
-    // We need to catch Error exceptions to ensure calling close_output.
-    try {
-        rs = d_http->fetch_url(data_url);
-
-        d_version = rs.get_version();
-        d_protocol = rs.get_protocol();
-
-        process_data(data, rs);
-        delete rs;
-        rs = 0;
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-}
-
-/** Reads the DataDDS object corresponding to the dataset in the Connect
- object's URL. If present in the Connect object's instance, a CE will be
- escaped, combined with \c expr and passed as the query string of the
- request. The result is a DataDDS which contains the data values bound to
- variables.
-
- Different from request_data in that this method uses the syntax of the
- new OPeNDAP server commands using dispatch
-
- @note If you need the DataDDS to hold specializations of the type classes,
- be sure to include the factory class which will instantiate those
- specializations in the DataDDS. Either pass a pointer to the factory to
- DataDDS constructor or use the DDS::set_factory() method after the
- object is built.
-
- @brief Get the DAS from a server.
- @param data Result. */
-void D4Connect::request_data_url(DataDDS &data)
-{
-    string use_url = _URL + "?" + _proj + _sel;
-    Response *rs = 0;
-    // We need to catch Error exceptions to ensure calling close_output.
-    try {
-        rs = d_http->fetch_url(use_url);
-
-        d_version = rs.get_version();
-        d_protocol = rs.get_protocol();
-
-        process_data(data, rs);
-        delete rs;
-        rs = 0;
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-}
-
-void D4Connect::request_data_ddx(DataDDS &data, string expr)
-{
-    string proj, sel;
-    string::size_type dotpos = expr.find('&');
-    if (dotpos != expr.npos) {
-        proj = expr.substr(0, dotpos);
-        sel = expr.substr(dotpos);
-    }
-    else {
-        proj = expr;
-        sel = "";
-    }
-
-    string data_url = _URL + ".dap?" + id2www_ce(_proj + proj + _sel + sel);
-
-    Response *rs = 0;
-    // We need to catch Error exceptions to ensure calling close_output.
-    try {
-        rs = d_http->fetch_url(data_url);
-
-        d_version = rs.get_version();
-        d_protocol = rs.get_protocol();
-
-        process_data(data, rs);
-        delete rs;
-        rs = 0;
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-}
-
-void D4Connect::request_data_ddx_url(DataDDS &data)
-{
-    string use_url = _URL + "?" + _proj + _sel;
-    Response *rs = 0;
-    // We need to catch Error exceptions to ensure calling close_output.
-    try {
-        rs = d_http->fetch_url(use_url);
-
-        d_version = rs.get_version();
-        d_protocol = rs.get_protocol();
-
-        process_data(data, rs);
-        delete rs;
-        rs = 0;
-    }
-    catch (Error &e) {
-        delete rs;
-        rs = 0;
-        throw;
-    }
-}
-#endif
-
 void
 D4Connect::read_dmr(DMR &dmr, Response &rs)
 {
diff --git a/D4Enum.cc b/D4Enum.cc
index efc476f..b6df872 100644
--- a/D4Enum.cc
+++ b/D4Enum.cc
@@ -56,6 +56,15 @@ using std::endl;
 
 namespace libdap {
 
+// Private
+void D4Enum::m_duplicate(const D4Enum &src)
+{
+    d_buf = src.d_buf;
+    d_element_type = src.d_element_type;
+    d_enum_def = src.d_enum_def == 0 ? 0 : new D4EnumDef(*(src.d_enum_def));
+    d_is_signed = src.d_is_signed;
+}
+
 // Explicit instantiation of the template member function 'value(T *)'.
 // This is required in order to have the library contain these member
 // function when its own code does not use them. Normally, C++ instantiates
@@ -400,12 +409,11 @@ D4Enum::ops(BaseType *b, int op)
 void
 D4Enum::dump(ostream &strm) const
 {
-    strm << DapIndent::LMarg << "D4Enum::dump - ("
-    << (void *)this << ")" << endl ;
-    DapIndent::Indent() ;
-    BaseType::dump(strm) ;
-    strm << DapIndent::LMarg << "value: " << d_buf.ui64 << endl ;
-    DapIndent::UnIndent() ;
+    strm << DapIndent::LMarg << "D4Enum::dump - (" << (void *) this << ")" << endl;
+    DapIndent::Indent();
+    BaseType::dump(strm);
+    strm << DapIndent::LMarg << "value: " << d_buf.ui64 << endl;
+    DapIndent::UnIndent();
 }
 
 } // namespace libdap
diff --git a/D4Enum.h b/D4Enum.h
index a09b214..f95e713 100644
--- a/D4Enum.h
+++ b/D4Enum.h
@@ -96,10 +96,15 @@ private:
     D4EnumDef *d_enum_def;	// The enumeration defined in the DMR, not an integer type
     bool d_is_signed;
 
-    void m_duplicate(const D4Enum &src) {
+    void m_duplicate(const D4Enum &src);
+#if 0
+    {
         d_buf = src.d_buf;
         d_element_type = src.d_element_type;
+        d_enum_def = new D4EnumDef(src.d_enum_def);
+        d_is_signed = src.d_is_signed;
     }
+#endif
 
     unsigned int m_type_width() const {
         switch(d_element_type) {
@@ -123,30 +128,31 @@ private:
         }
     }
 
-	D4Enum();	// No empty constructor
+    D4Enum();	// No empty constructor
 
 public:
 	// TODO add a way to set the EnumDef to these
-    D4Enum(const string &name, const string &enum_type) : BaseType(name, dods_enum_c, true /*is_dap4*/),
-			d_buf((uint64_t)0), d_element_type(dods_null_c) {
-    	d_element_type = get_type(enum_type.c_str());
-    	// assert(is_integer_type(d_element_type));
-    	if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
-    	set_is_signed(d_element_type);
+    D4Enum(const string &name, const string &enum_type) :
+        BaseType(name, dods_enum_c, true /*is_dap4*/), d_buf((uint64_t) 0), d_element_type(dods_null_c), d_enum_def(0)
+    {
+        d_element_type = get_type(enum_type.c_str());
+
+        if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
+        set_is_signed(d_element_type);
     }
 
-    D4Enum(const string &name, Type type) : BaseType(name, dods_enum_c, true /*is_dap4*/),
-    		d_buf((uint64_t)0), d_element_type(type) {
-    	//assert(is_integer_type(d_element_type));
-    	if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
-    	set_is_signed(d_element_type);
+    D4Enum(const string &name, Type type) :
+        BaseType(name, dods_enum_c, true /*is_dap4*/), d_buf((uint64_t) 0), d_element_type(type), d_enum_def(0)
+    {
+        if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
+        set_is_signed(d_element_type);
     }
 
-    D4Enum(const string &name, const string &dataset, Type type) : BaseType(name, dataset, dods_enum_c, true /*is_dap4*/),
-    		d_buf((uint64_t)0), d_element_type(type) {
-    	//assert(is_integer_type(d_element_type));
-    	if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
-    	set_is_signed(d_element_type);
+    D4Enum(const string &name, const string &dataset, Type type) :
+        BaseType(name, dataset, dods_enum_c, true /*is_dap4*/), d_buf((uint64_t) 0), d_element_type(type), d_enum_def(0)
+    {
+        if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
+        set_is_signed(d_element_type);
     }
 
     D4Enum(const D4Enum &src) : BaseType(src) { m_duplicate(src); }
diff --git a/D4EnumDefs.cc b/D4EnumDefs.cc
index 737623f..61b152b 100644
--- a/D4EnumDefs.cc
+++ b/D4EnumDefs.cc
@@ -57,9 +57,9 @@ D4EnumDef::is_valid_enum_value(long long value)
         case dods_uint32_c:
             return (value >= 0 && static_cast<unsigned long long>(value) <= DODS_UINT_MAX);
         case dods_int64_c:
-            return (value >= DODS_LLONG_MIN && value <= DODS_LLONG_MAX);
+            return true; // This is always true: (value >= DODS_LLONG_MIN && value <= DODS_LLONG_MAX);
         case dods_uint64_c:
-            return (value >= 0 && static_cast<unsigned long long>(value) <= DODS_ULLONG_MAX);
+            return (value >= 0 /*Always true: && static_cast<unsigned long long>(value) <= DODS_ULLONG_MAX*/);
         default:
             return false;
     }
diff --git a/D4EnumDefs.h b/D4EnumDefs.h
index e5a7c5b..98a340d 100644
--- a/D4EnumDefs.h
+++ b/D4EnumDefs.h
@@ -53,6 +53,14 @@ class D4EnumDef {
 
     vector<tuple> d_tuples;
 
+    void m_duplicate(const D4EnumDef &rhs)
+    {
+        d_name = rhs.d_name;
+        d_type = rhs.d_type;
+        d_parent = rhs.d_parent;
+        d_tuples = rhs.d_tuples;
+    }
+
     void print_value(XMLWriter &xml, const D4EnumDef::tuple &tuple) const;
 
 public:
@@ -60,6 +68,9 @@ public:
 
     D4EnumDef() : d_name(""), d_type(dods_null_c), d_parent(0) {}
     D4EnumDef(const string &n, const Type &t, D4EnumDefs *e = 0) : d_name(n), d_type(t), d_parent(e) {}
+    D4EnumDef(const D4EnumDef &rhs) {
+        m_duplicate(rhs);
+    }
 
     string name() const { return d_name; }
     void set_name(const string &n) { d_name = n; }
diff --git a/D4Group.cc b/D4Group.cc
index 29b8b22..0b45e1f 100644
--- a/D4Group.cc
+++ b/D4Group.cc
@@ -58,20 +58,30 @@ void D4Group::m_duplicate(const D4Group &g)
 	if (g.d_dims) {
 		d_dims = new D4Dimensions(*(g.d_dims));
 		d_dims->set_parent(this);
+
+	    // Update all of the D4Dimension weak pointers in the Array objects.
+	    // This is a hack - we know that Constructor::m_duplicate() has been
+	    // called at this point and any Array instances have dimension pointers
+	    // that reference the 'old' dimensions (g.d_dims) and not the 'new'
+	    // dimensions made above. Scan every array and re-wire the weak pointers.
+	    // jhrg 8/15/14
+	    Vars_citer vi = d_vars.begin();
+	    while (vi != d_vars.end()) {
+	        if ((*vi)->type() == dods_array_c)
+	            static_cast<Array*>(*vi)->update_dimension_pointers(g.d_dims, d_dims);
+	        ++vi;
+	    }
 	}
 
-	// Update all of the D4Dimension weak pointers in the Array objects.
-	// This is a hack - we know that Constructor::m_duplicate() has been
-	// called at this point and any Array instances have dimension pointers
-	// that reference the 'old' dimensions (g.d_dims) and not the 'new'
-	// dimensions made above. Scan every array and re-wire the weak pointers.
-	// jhrg 8/15/14
+#if 0
+	// Moved this block up inside the if because g.d_dims might be false. jhrg 9/14/15
 	Vars_citer vi = d_vars.begin();
 	while (vi != d_vars.end()) {
 		if ((*vi)->type() == dods_array_c)
 			static_cast<Array*>(*vi)->update_dimension_pointers(g.d_dims, d_dims);
 		++vi;
 	}
+#endif
 
 	// enums; deep copy
 	if (g.d_enum_defs) d_enum_defs = new D4EnumDefs(*g.d_enum_defs);
diff --git a/D4Opaque.cc b/D4Opaque.cc
index 5a1d5d5..22d80dd 100644
--- a/D4Opaque.cc
+++ b/D4Opaque.cc
@@ -39,6 +39,8 @@
 
 #include "debug.h"
 
+#undef CLEAR_LOCAL_DATA
+
 using namespace std;
 
 namespace libdap {
@@ -58,18 +60,34 @@ D4Opaque::operator=(const D4Opaque &rhs)
 }
 
 void
+D4Opaque::clear_local_data()
+{
+    if (!d_buf.empty()) {
+        d_buf.erase(d_buf.begin(), d_buf.end());
+        d_buf.resize(0);
+    }
+
+    set_read_p(false);
+}
+
+void
 D4Opaque::compute_checksum(Crc32 &checksum)
 {
 	checksum.AddData(&d_buf[0], d_buf.size());
 }
 
 void
-D4Opaque::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
+D4Opaque::serialize(D4StreamMarshaller &m, DMR &, bool)
 {
     if (!read_p())
         read();          // read() throws Error
 
     m.put_opaque_dap4( reinterpret_cast<char*>(&d_buf[0]), d_buf.size() ) ;
+
+#ifdef CLEAR_LOCAL_DATA
+    clear_local_data();
+#endif
+
 }
 
 void
diff --git a/D4Opaque.h b/D4Opaque.h
index b0f9893..e8dd220 100644
--- a/D4Opaque.h
+++ b/D4Opaque.h
@@ -57,6 +57,8 @@ public:
 
     virtual BaseType *ptr_duplicate() {  return new D4Opaque(*this); }
 
+    virtual void clear_local_data();
+
     virtual unsigned int width(bool = false) const { return sizeof(vector<uint8_t>); }
 
     // Return the length of the stored data or zero if no string has been
@@ -74,6 +76,9 @@ public:
     // DAP4
     virtual void compute_checksum(Crc32 &checksum);
     virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
+#if 0
+    virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
+#endif
     virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
 
     virtual unsigned int val2buf(void *val, bool reuse = false);
diff --git a/D4ParserSax2.cc b/D4ParserSax2.cc
index f3d5ff9..7c2903e 100644
--- a/D4ParserSax2.cc
+++ b/D4ParserSax2.cc
@@ -406,6 +406,7 @@ inline bool D4ParserSax2::process_attribute(const char *name, const xmlChar **at
         D4Attributes *tos = top_attributes();
         // add return
         if (!tos) {
+            delete child;
             dmr_fatal_error(this, "Expected an Attribute container on the top of the attribute stack.");
             return false;
         }
@@ -821,57 +822,78 @@ void D4ParserSax2::dmr_end_element(void *p, const xmlChar *l, const xmlChar *pre
     D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
     const char *localname = (const char *) l;
 
-    if (parser->debug()) cerr << "End element " << localname << " (state " << states[parser->get_state()] << ")" << endl;
+    if (parser->debug())
+        cerr << "End element " << localname << " (state " << states[parser->get_state()] << ")" << endl;
 
     switch (parser->get_state()) {
-        case parser_start:
-            dmr_fatal_error(parser, "Unexpected state, inside start state while processing element '%s'.", localname);
-            break;
+    case parser_start:
+        dmr_fatal_error(parser, "Unexpected state, inside start state while processing element '%s'.", localname);
+        break;
 
-        case inside_dataset:
-            if (is_not(localname, "Dataset"))
-                D4ParserSax2::dmr_error(parser, "Expected an end Dataset tag; found '%s' instead.", localname);
+    case inside_dataset:
+        if (is_not(localname, "Dataset"))
+            D4ParserSax2::dmr_error(parser, "Expected an end Dataset tag; found '%s' instead.", localname);
 
+        parser->pop_state();
+        if (parser->get_state() != parser_start)
+            dmr_fatal_error(parser, "Unexpected state, expected start state.");
+        else {
             parser->pop_state();
-            if (parser->get_state() != parser_start)
-                dmr_fatal_error(parser, "Unexpected state, expected start state.");
-            else {
-                parser->pop_state();
-                parser->push_state(parser_end);
-            }
-            break;
+            parser->push_state(parser_end);
+        }
+        break;
 
-        case inside_group: {
-            if (is_not(localname, "Group"))
-                D4ParserSax2::dmr_error(parser, "Expected an end tag for a Group; found '%s' instead.", localname);
+    case inside_group: {
+        if (is_not(localname, "Group"))
+            D4ParserSax2::dmr_error(parser, "Expected an end tag for a Group; found '%s' instead.", localname);
 
-            if (!parser->empty_basetype() || parser->empty_group())
-            	D4ParserSax2::dmr_error(parser, "The document did not contain a valid root Group or contained unbalanced tags.");
+        if (!parser->empty_basetype() || parser->empty_group())
+            D4ParserSax2::dmr_error(parser,
+                    "The document did not contain a valid root Group or contained unbalanced tags.");
 
-            parser->pop_group();
-            parser->pop_state();
-            break;
-        }
+        parser->pop_group();
+        parser->pop_state();
+        break;
+    }
 
-        case inside_attribute_container:
-            if (is_not(localname, "Attribute"))
-                D4ParserSax2::dmr_error(parser, "Expected an end Attribute tag; found '%s' instead.", localname);
+    case inside_attribute_container:
+        if (is_not(localname, "Attribute"))
+            D4ParserSax2::dmr_error(parser, "Expected an end Attribute tag; found '%s' instead.", localname);
 
-            parser->pop_state();
-            parser->pop_attributes();
-            break;
+        parser->pop_state();
+        parser->pop_attributes();
+        break;
 
-        case inside_attribute:
-            if (is_not(localname, "Attribute"))
-                D4ParserSax2::dmr_error(parser, "Expected an end Attribute tag; found '%s' instead.", localname);
+    case inside_attribute:
+        if (is_not(localname, "Attribute"))
+            D4ParserSax2::dmr_error(parser, "Expected an end Attribute tag; found '%s' instead.", localname);
 
-            parser->pop_state();
-            break;
+        parser->pop_state();
+        break;
+
+    case inside_attribute_value: {
+        if (is_not(localname, "Value"))
+            D4ParserSax2::dmr_error(parser, "Expected an end value tag; found '%s' instead.", localname);
+
+        parser->pop_state();
+
+        // The old code added more values using the name and type as
+        // indexes to find the correct attribute. Use get() for that
+        // now. Or fix this code to keep a pointer to the to attribute...
+        D4Attributes *attrs = parser->top_attributes();
+        D4Attribute *attr = attrs->get(parser->dods_attr_name);
+        if (!attr) {
+            attr = new D4Attribute(parser->dods_attr_name, StringToD4AttributeType(parser->dods_attr_type));
+            attrs->add_attribute_nocopy(attr);
+        }
+        attr->add_value(parser->char_data);
 
-        case inside_attribute_value: {
-            if (is_not(localname, "Value"))
-                D4ParserSax2::dmr_error(parser, "Expected an end value tag; found '%s' instead.", localname);
+        parser->char_data = ""; // Null this after use.
+        break;
+    }
 
+    case inside_other_xml_attribute: {
+        if (strcmp(localname, "Attribute") == 0 && parser->root_ns == (const char *) URI) {
             parser->pop_state();
 
             // The old code added more values using the name and type as
@@ -883,132 +905,103 @@ void D4ParserSax2::dmr_end_element(void *p, const xmlChar *l, const xmlChar *pre
                 attr = new D4Attribute(parser->dods_attr_name, StringToD4AttributeType(parser->dods_attr_type));
                 attrs->add_attribute_nocopy(attr);
             }
-            attr->add_value(parser->char_data);
+            attr->add_value(parser->other_xml);
 
-            parser->char_data = ""; // Null this after use.
-            break;
+            parser->other_xml = ""; // Null this after use.
         }
-
-        case inside_other_xml_attribute: {
-            if (strcmp(localname, "Attribute") == 0 && parser->root_ns == (const char *) URI) {
-                parser->pop_state();
-
-                // The old code added more values using the name and type as
-                // indexes to find the correct attribute. Use get() for that
-                // now. Or fix this code to keep a pointer to the to attribute...
-                D4Attributes *attrs = parser->top_attributes();
-                D4Attribute *attr = attrs->get(parser->dods_attr_name);
-                if (!attr) {
-                    attr = new D4Attribute(parser->dods_attr_name, StringToD4AttributeType(parser->dods_attr_type));
-                    attrs->add_attribute_nocopy(attr);
-                }
-                attr->add_value(parser->other_xml);
-
-                parser->other_xml = ""; // Null this after use.
+        else {
+            if (parser->other_xml_depth == 0) {
+                D4ParserSax2::dmr_error(parser, "Expected an OtherXML attribute to end! Instead I found '%s'",
+                        localname);
+                break;
             }
-            else {
-                if (parser->other_xml_depth == 0) {
-                    D4ParserSax2::dmr_error(parser, "Expected an OtherXML attribute to end! Instead I found '%s'", localname);
-                    break;
-                }
-                parser->other_xml_depth--;
+            parser->other_xml_depth--;
 
-                parser->other_xml.append("</");
-                if (prefix) {
-                    parser->other_xml.append((const char *) prefix);
-                    parser->other_xml.append(":");
-                }
-                parser->other_xml.append(localname);
-                parser->other_xml.append(">");
+            parser->other_xml.append("</");
+            if (prefix) {
+                parser->other_xml.append((const char *) prefix);
+                parser->other_xml.append(":");
             }
-            break;
+            parser->other_xml.append(localname);
+            parser->other_xml.append(">");
         }
+        break;
+    }
 
-        case inside_enum_def:
-            if (is_not(localname, "Enumeration"))
-                D4ParserSax2::dmr_error(parser, "Expected an end Enumeration tag; found '%s' instead.", localname);
-            if (!parser->top_group())
-                D4ParserSax2::dmr_fatal_error(parser, "Expected a Group to be the current item, while finishing up an Enumeration.");
-            else {
-                // copy the pointer; not a deep copy
-                parser->top_group()->enum_defs()->add_enum_nocopy(parser->enum_def());
-                // Set the enum_def to null; next call to enum_def() will
-                // allocate a new object
-                parser->clear_enum_def();
-                parser->pop_state();
-            }
-            break;
-
-        case inside_enum_const:
-            if (is_not(localname, "EnumConst"))
-                D4ParserSax2::dmr_error(parser, "Expected an end EnumConst tag; found '%s' instead.", localname);
-
+    case inside_enum_def:
+        if (is_not(localname, "Enumeration"))
+            D4ParserSax2::dmr_error(parser, "Expected an end Enumeration tag; found '%s' instead.", localname);
+        if (!parser->top_group())
+            D4ParserSax2::dmr_fatal_error(parser,
+                    "Expected a Group to be the current item, while finishing up an Enumeration.");
+        else {
+            // copy the pointer; not a deep copy
+            parser->top_group()->enum_defs()->add_enum_nocopy(parser->enum_def());
+            // Set the enum_def to null; next call to enum_def() will
+            // allocate a new object
+            parser->clear_enum_def();
             parser->pop_state();
-            break;
+        }
+        break;
 
-        case inside_dim_def: {
-            if (is_not(localname, "Dimension"))
-                D4ParserSax2::dmr_error(parser, "Expected an end Dimension tag; found '%s' instead.",  localname);
+    case inside_enum_const:
+        if (is_not(localname, "EnumConst"))
+            D4ParserSax2::dmr_error(parser, "Expected an end EnumConst tag; found '%s' instead.", localname);
 
-            if (!parser->top_group())
-                D4ParserSax2::dmr_error(parser, "Expected a Group to be the current item, while finishing up an Dimension.");
+        parser->pop_state();
+        break;
 
-            // FIXME Use the Group on the top of the group stack
-            // copy the pointer; not a deep copy
-            parser->top_group()->dims()->add_dim_nocopy(parser->dim_def());
-            //parser->dmr()->root()->dims()->add_dim_nocopy(parser->dim_def());
-            // Set the dim_def to null; next call to dim_def() will
-            // allocate a new object. Calling 'clear' is important because
-            // the cleanup method will free dim_def if it's not null and
-            // we just copied the pointer in the add_dim_nocopy() call
-            // above.
-            parser->clear_dim_def();
-            parser->pop_state();
-            break;
-        }
+    case inside_dim_def: {
+        if (is_not(localname, "Dimension"))
+            D4ParserSax2::dmr_error(parser, "Expected an end Dimension tag; found '%s' instead.", localname);
+
+        if (!parser->top_group())
+            D4ParserSax2::dmr_error(parser,
+                    "Expected a Group to be the current item, while finishing up an Dimension.");
+
+        // FIXME Use the Group on the top of the group stack
+        // copy the pointer; not a deep copy
+        parser->top_group()->dims()->add_dim_nocopy(parser->dim_def());
+        //parser->dmr()->root()->dims()->add_dim_nocopy(parser->dim_def());
+        // Set the dim_def to null; next call to dim_def() will
+        // allocate a new object. Calling 'clear' is important because
+        // the cleanup method will free dim_def if it's not null and
+        // we just copied the pointer in the add_dim_nocopy() call
+        // above.
+        parser->clear_dim_def();
+        parser->pop_state();
+        break;
+    }
 
-        case inside_simple_type:
-            if (is_simple_type(get_type(localname))) {
-                BaseType *btp = parser->top_basetype();
-                parser->pop_basetype();
-                parser->pop_attributes();
-
-                BaseType *parent = 0;
-                if (!parser->empty_basetype())
-                	parent = parser->top_basetype();
-                else if (!parser->empty_group())
-                	parent = parser->top_group();
-                else {
-                	dmr_fatal_error(parser, "Both the Variable and Groups stacks are empty while closing a %s element.", localname);
-                	delete btp;
-                }
+    case inside_simple_type:
+        if (is_simple_type(get_type(localname))) {
+            BaseType *btp = parser->top_basetype();
+            parser->pop_basetype();
+            parser->pop_attributes();
 
-                if (parent->type() == dods_array_c)
-                    static_cast<Array*>(parent)->prototype()->add_var_nocopy(btp);
-                else
-                    parent->add_var_nocopy(btp);
+            BaseType *parent = 0;
+            if (!parser->empty_basetype())
+                parent = parser->top_basetype();
+            else if (!parser->empty_group())
+                parent = parser->top_group();
+            else {
+                dmr_fatal_error(parser, "Both the Variable and Groups stacks are empty while closing a %s element.",
+                        localname);
+                delete btp;
+                parser->pop_state();
+                break;
             }
-            else
-                D4ParserSax2::dmr_error(parser, "Expected an end tag for a simple type; found '%s' instead.", localname);
 
-            parser->pop_state();
-#if 0
-                // Check that we have a constructor BaseType (Structure, Sequence, or Group)
-               if (parent && parent->is_constructor_type())
-
-                else {
-                    D4ParserSax2::dmr_error(parser,
-                            "Tried to add the simple-type variable '%s' to a non-constructor type (%s %s).", localname,
-                            parser->top_basetype()->type_name().c_str(), parser->top_basetype()->name().c_str());
-                    // since the BaseType* was popped and not copied anywhere,
-                    // it must be deleted.
-                    delete btp;
-                }
-            }
+            if (parent->type() == dods_array_c)
+                static_cast<Array*>(parent)->prototype()->add_var_nocopy(btp);
             else
-                D4ParserSax2::dmr_error(parser, "Expected an end tag for a simple type; found '%s' instead.", localname);
-#endif
-            break;
+                parent->add_var_nocopy(btp);
+        }
+        else
+            D4ParserSax2::dmr_error(parser, "Expected an end tag for a simple type; found '%s' instead.", localname);
+
+        parser->pop_state();
+        break;
 
     case inside_dim:
         if (is_not(localname, "Dim"))
@@ -1023,53 +1016,48 @@ void D4ParserSax2::dmr_end_element(void *p, const xmlChar *l, const xmlChar *pre
 
         parser->pop_state();
         break;
-#if 0
-            // a nicer name, but not what we chose
-        case inside_dimension:
-            if (is_not(localname, "dimension"))
-                D4ParserSax2::dmr_fatal_error(parser, "Expected an end Dimension tag; found '%s' instead.", localname);
 
-            parser->pop_state();
-            break;
-#endif
-        case inside_constructor: {
-            if (strcmp(localname, "Structure") != 0 && strcmp(localname, "Sequence") != 0) {
-                D4ParserSax2::dmr_error(parser, "Expected an end tag for a constructor; found '%s' instead.", localname);
-                return;
-            }
-
-            BaseType *btp = parser->top_basetype();
-            parser->pop_basetype();
-            parser->pop_attributes();
-
-            BaseType *parent = 0;
-            if (!parser->empty_basetype())
-            	parent = parser->top_basetype();
-            else if (!parser->empty_group())
-            	parent = parser->top_group();
-            else {
-            	dmr_fatal_error(parser, "Both the Variable and Groups stacks are empty while closing a %s element.", localname);
-            	delete btp;
-            }
+    case inside_constructor: {
+        if (strcmp(localname, "Structure") != 0 && strcmp(localname, "Sequence") != 0) {
+            D4ParserSax2::dmr_error(parser, "Expected an end tag for a constructor; found '%s' instead.", localname);
+            return;
+        }
 
-            // TODO Why doesn't this code mirror the simple_var case and test
-            // for the parent being an array? jhrg 10/13/13
-            parent->add_var_nocopy(btp);
+        BaseType *btp = parser->top_basetype();
+        parser->pop_basetype();
+        parser->pop_attributes();
+
+        BaseType *parent = 0;
+        if (!parser->empty_basetype())
+            parent = parser->top_basetype();
+        else if (!parser->empty_group())
+            parent = parser->top_group();
+        else {
+            dmr_fatal_error(parser, "Both the Variable and Groups stacks are empty while closing a %s element.",
+                    localname);
+            delete btp;
             parser->pop_state();
             break;
         }
 
-        case parser_unknown:
-            parser->pop_state();
-            break;
+        // TODO Why doesn't this code mirror the simple_var case and test
+        // for the parent being an array? jhrg 10/13/13
+        parent->add_var_nocopy(btp);
+        parser->pop_state();
+        break;
+    }
 
-        case parser_error:
-        case parser_fatal_error:
-            break;
+    case parser_unknown:
+        parser->pop_state();
+        break;
 
-        case parser_end:
-            // FIXME Error?
-            break;
+    case parser_error:
+    case parser_fatal_error:
+        break;
+
+    case parser_end:
+        // FIXME Error?
+        break;
     }
 
     if (parser->debug()) cerr << "End element exit state: " << states[parser->get_state()] << endl;
diff --git a/D4Sequence.cc b/D4Sequence.cc
index c18174c..4df1b92 100644
--- a/D4Sequence.cc
+++ b/D4Sequence.cc
@@ -53,6 +53,8 @@
 #include "util.h"
 #include "escaping.h"
 
+#undef CLEAR_LOCAL_DATA
+
 using namespace std;
 
 namespace libdap {
@@ -183,7 +185,17 @@ static inline void delete_rows(D4SeqRow *bt_row_ptr)
 
 D4Sequence::~D4Sequence()
 {
-    for_each(d_values.begin(), d_values.end(), delete_rows);
+    clear_local_data();
+}
+
+void D4Sequence::clear_local_data()
+{
+    if (!d_values.empty()) {
+        for_each(d_values.begin(), d_values.end(), delete_rows);
+        d_values.resize(0);
+    }
+
+    set_read_p(false);
 }
 
 D4Sequence &
@@ -340,7 +352,46 @@ void D4Sequence::serialize(D4StreamMarshaller &m, DMR &dmr, bool filter)
             (*j)->serialize(m, dmr, /*eval,*/false);
         }
     }
+
+#ifdef CLEAR_LOCAL_DATA
+    clear_local_data();
+#endif
+
+}
+
+#if 0
+void D4Sequence::serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter)
+{
+    // Read the data values, then serialize. NB: read_next_instance sets d_length.
+    while (read_next_instance(filter)) {
+        D4SeqRow *row = new D4SeqRow;
+        for (Vars_iter i = d_vars.begin(), e = d_vars.end(); i != e; i++) {
+            if ((*i)->send_p()) {
+                // store the variable's value.
+                row->push_back((*i)->ptr_duplicate());
+                // the copy should have read_p true to prevent the serialize() call
+                // below in the nested for loops from triggering a second call to
+                // read().
+                row->back()->set_read_p(true);
+            }
+        }
+        d_values.push_back(row);
+        DBG(cerr << "D4Sequence::serialize Added row" << endl);
+    }
+
+    // write D4Sequecne::length(); don't include the length in the checksum
+    m.put_count(d_length);
+    DBG(cerr << "D4Sequence::serialize count: " << d_length << endl);
+
+    // By this point the d_values object holds all and only the values to be sent;
+    // use the serialize methods to send them (but no need to test send_p).
+    for (D4SeqValues::iterator i = d_values.begin(), e = d_values.end(); i != e; ++i) {
+        for (D4SeqRow::iterator j = (*i)->begin(), f = (*i)->end(); j != f; ++j) {
+            (*j)->serialize(m, dmr, /*eval,*/false);
+        }
+    }
 }
+#endif
 
 void D4Sequence::deserialize(D4StreamUnMarshaller &um, DMR &dmr)
 {
diff --git a/D4Sequence.h b/D4Sequence.h
index e86efca..26006c0 100644
--- a/D4Sequence.h
+++ b/D4Sequence.h
@@ -157,6 +157,8 @@ public:
 
     virtual BaseType *ptr_duplicate();
 
+    virtual void clear_local_data();
+
     /**
      * @brief The number of elements in a Sequence object.
      * @note This is not the number of items in a row, but the number
@@ -188,6 +190,9 @@ public:
     // DAP4
     virtual void intern_data(Crc32 &checksum/*, DMR &dmr, ConstraintEvaluator &eval*/);
     virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
+#if 0
+    virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
+#endif
     virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
 
 #if INDEX_SUBSETTING
diff --git a/D4StreamMarshaller.cc b/D4StreamMarshaller.cc
index ce90315..076bfc6 100644
--- a/D4StreamMarshaller.cc
+++ b/D4StreamMarshaller.cc
@@ -594,6 +594,61 @@ void D4StreamMarshaller::put_vector_float64(char *val, int64_t num_elem)
 
 }
 
+void D4StreamMarshaller::put_vector_part(char *val, unsigned int num, int width, Type type)
+{
+    switch(type) {
+    case dods_byte_c:
+    case dods_char_c:
+    case dods_int8_c:
+    case dods_uint8_c:
+        put_vector(val, num);
+        break;
+
+    case dods_int16_c:
+    case dods_uint16_c:
+    case dods_int32_c:
+    case dods_uint32_c:
+    case dods_int64_c:
+    case dods_uint64_c:
+        put_vector(val, num, width);
+        break;
+
+    case dods_enum_c:
+        if (width == 1)
+            put_vector(val, num);
+        else
+            put_vector(val, num, width);
+        break;
+
+    case dods_float32_c:
+        put_vector_float32(val, num);
+        break;
+
+    case dods_float64_c:
+        put_vector_float32(val, num);
+        break;
+
+    case dods_str_c:
+    case dods_url_c:
+        throw InternalErr(__FILE__, __LINE__, "Array of String should not be passed to put_vector.");
+
+    case dods_array_c:
+        throw InternalErr(__FILE__, __LINE__, "Array of Array not allowed.");
+
+    case dods_opaque_c:
+    case dods_structure_c:
+    case dods_sequence_c:
+        throw InternalErr(__FILE__, __LINE__, "Array of String should not be passed to put_vector.");
+
+    case dods_grid_c:
+        throw InternalErr(__FILE__, __LINE__, "Grid is not part of DAP4.");
+
+    default:
+        throw InternalErr(__FILE__, __LINE__, "Unknown datatype.");
+        break;
+    }
+}
+
 void D4StreamMarshaller::dump(ostream &strm) const
 {
     strm << DapIndent::LMarg << "D4StreamMarshaller::dump - (" << (void *) this << ")" << endl;
diff --git a/D4StreamMarshaller.h b/D4StreamMarshaller.h
index 10f8de0..3fc0701 100644
--- a/D4StreamMarshaller.h
+++ b/D4StreamMarshaller.h
@@ -80,6 +80,7 @@ private:
 
     Crc32 d_checksum;
 
+
     // These are private so they won't ever get used.
     D4StreamMarshaller();
     D4StreamMarshaller(const D4StreamMarshaller &);
@@ -136,10 +137,35 @@ public:
     virtual void put_vector_float64(char *val, int64_t num_elem);
 
     virtual void put_vector(char *, int , Vector &) {
-        throw InternalErr(__FILE__, __LINE__, "Not Implemented; use put_length_prefix.");
+        throw InternalErr(__FILE__, __LINE__, "Not Implemented; use other put_vector() versions.");
     }
     virtual void put_vector(char *, int , int , Vector &) {
-        throw InternalErr(__FILE__, __LINE__, "Not Implemented; use put_length_prefix.");
+        throw InternalErr(__FILE__, __LINE__, "Not Implemented; use other put_vector() versions.");
+    }
+
+    /**
+     * Prepare to send a single array/vector using a series of 'put' calls.
+     * In DAP4 this does nothing because arrays are serialized using the server's
+     * binary representation (i.e., using 'reader make right').
+     *
+     * @param num Ignored
+     * @see put_vector_part()
+     * @see put_vector_end()
+     */
+    virtual void put_vector_start(int /*num*/) {
+    }
+
+    virtual void put_vector_part(char */*val*/, unsigned int /*num*/, int /*width*/, Type /*type*/);
+
+    /**
+     * Close a vector when its values are written using put_vector_part().
+     * In DAP4 this does nothing because arrays are serialized using the server's
+     * binary representation (i.e., using 'reader make right').
+     *
+     * @see put_vector_start()
+     * @see put_vector_part()
+     */
+    virtual void put_vector_end() {
     }
 
     virtual void dump(std::ostream &strm) const;
diff --git a/DAS.cc b/DAS.cc
index aa76948..896766a 100644
--- a/DAS.cc
+++ b/DAS.cc
@@ -276,11 +276,15 @@ void
 DAS::parse(int fd)
 {
 #ifdef WIN32
-    FILE *in = fdopen(_dup(fd), "r");
+    int new_fd = _dup(fd);
 #else
-    FILE *in = fdopen(dup(fd), "r");
+    int new_fd = dup(fd);
 #endif
 
+    if (new_fd < 0)
+        throw InternalErr(__FILE__, __LINE__, "Could not access file.");
+    FILE *in = fdopen(new_fd, "r");
+
     if (!in) {
         throw InternalErr(__FILE__, __LINE__, "Could not access file.");
     }
diff --git a/DDS.cc b/DDS.cc
index b7f3cf3..97d3e51 100644
--- a/DDS.cc
+++ b/DDS.cc
@@ -950,11 +950,15 @@ void
 DDS::parse(int fd)
 {
 #ifdef WIN32
-    FILE *in = fdopen(_dup(fd), "r");
+    int new_fd = _dup(fd);
 #else
-    FILE *in = fdopen(dup(fd), "r");
+    int new_fd = dup(fd);
 #endif
 
+    if (new_fd < 0)
+        throw InternalErr(__FILE__, __LINE__, "Could not access file.");
+    FILE *in = fdopen(new_fd, "r");
+
     if (!in) {
         throw InternalErr(__FILE__, __LINE__, "Could not access file.");
     }
diff --git a/DDXParserSAX2.cc b/DDXParserSAX2.cc
index d2d88e3..a299ef4 100644
--- a/DDXParserSAX2.cc
+++ b/DDXParserSAX2.cc
@@ -367,18 +367,19 @@ void DDXParser::process_variable(Type t, ParseState s, const xmlChar **attrs,
     if (bt_stack.top()->type() == dods_array_c
             || check_required_attribute("name")) { // throws on error/false
         BaseType *btp = factory(t, attribute_table["name"].value);
-        if (!btp)
-            ddx_fatal_error(
-                    this,
-                    "Internal parser error; could not instantiate the variable '%s'.",
-                    attribute_table["name"].value.c_str());
-
-        // Once we make the new variable, we not only load it on to the
-        // BaseType stack, we also load its AttrTable on the AttrTable stack.
-        // The attribute processing software always operates on the AttrTable
-        // at the top of the AttrTable stack (at_stack).
-        bt_stack.push(btp);
-        at_stack.push(&btp->get_attr_table());
+        if (!btp) {
+            ddx_fatal_error(this, "Internal parser error; could not instantiate the variable '%s'.",
+                attribute_table["name"].value.c_str());
+        }
+        else {
+            // Only run this code if btp is not null! jhrg 9/14/15
+            // Once we make the new variable, we not only load it on to the
+            // BaseType stack, we also load its AttrTable on the AttrTable stack.
+            // The attribute processing software always operates on the AttrTable
+            // at the top of the AttrTable stack (at_stack).
+            bt_stack.push(btp);
+            at_stack.push(&btp->get_attr_table());
+        }
     }
 }
 
diff --git a/DDXParserSAX2.h b/DDXParserSAX2.h
index 29e8199..933bebf 100644
--- a/DDXParserSAX2.h
+++ b/DDXParserSAX2.h
@@ -224,9 +224,8 @@ private:
     void finish_variable(const char *tag, Type t, const char *expected);
     //@}
 
-    /// Define the default ctor here to prevent its use.
-    DDXParser() {}
-    //{throw InternalErr(__FILE__, __LINE__, "DDXParser internal ctor called!");}
+    /// Declare the default ctor here to prevent its use.
+    DDXParser();
 
     friend class DDXParserTest;
 
diff --git a/DODSFilter.cc b/DODSFilter.cc
index 7b41468..3d5f5d5 100644
--- a/DODSFilter.cc
+++ b/DODSFilter.cc
@@ -54,7 +54,13 @@
 #include <cstdlib>
 #include <cstring>
 
+#ifdef HAVE_UUID_UUID_H
 #include <uuid/uuid.h>	// used to build CID header value for data ddx
+#elif defined(HAVE_UUID_H)
+#include <uuid.h>
+#else
+#error "Could not find UUID library header"
+#endif
 
 #include <GetOpt.h>
 
@@ -262,7 +268,7 @@ DODSFilter::process_options(int argc, char *argv[])
     int option_char;
     GetOpt getopt (argc, argv, "ce: v: d: f: r: l: o: u: t: ");
 
-    while ((option_char = getopt()) != EOF) {
+    while ((option_char = getopt()) != -1) {
         switch (option_char) {
         case 'c': d_comp = true; break;
         case 'e': set_ce(getopt.optarg); break;
diff --git a/Float64.cc b/Float64.cc
index f05bca8..18e3f72 100644
--- a/Float64.cc
+++ b/Float64.cc
@@ -240,15 +240,18 @@ Float64::print_val(FILE *out, string space, bool print_decl_p)
 void
 Float64::print_val(ostream &out, string space, bool print_decl_p)
 {
-    // FIX: need to set precision in the printing somehow.
-    // os.precision(DODS_DBL_DIG);
+    // Set the precision to 15 digits
+    std::streamsize prec = out.precision(15);
 
     if (print_decl_p) {
         print_decl(out, space, false);
-	out << " = " << std::setprecision( 15 ) << d_buf << ";\n" ;
+        out << " = " << d_buf << ";\n";
     }
     else
-	out << std::setprecision( 15 ) << d_buf ;
+        out << d_buf;
+
+    // reset the precision
+    out.precision(prec);
 }
 
 bool
diff --git a/HTTPCache.cc b/HTTPCache.cc
index c4279ad..52a7423 100644
--- a/HTTPCache.cc
+++ b/HTTPCache.cc
@@ -36,6 +36,8 @@
 #include <sys/stat.h>
 
 #include <cstring>
+#include <cerrno>
+
 #include <iostream>
 #include <sstream>
 #include <algorithm>
@@ -52,6 +54,7 @@
 #include "HTTPCacheTable.h"
 #include "HTTPCache.h"
 #include "HTTPCacheMacros.h"
+#include "SignalHandlerRegisteredErr.h"
 
 #include "util_mit.h"
 #include "debug.h"
@@ -227,6 +230,9 @@ HTTPCache::HTTPCache(string cache_root, bool force) :
         d_locked_open_file(0),
         d_cache_enabled(false),
         d_cache_protected(false),
+
+        d_cache_disconnected(DISCONNECT_NONE),
+
         d_expire_ignored(false),
         d_always_validate(false),
         d_total_size(CACHE_TOTAL_SIZE * MEGA),
@@ -525,17 +531,13 @@ HTTPCache::get_cache_root() const
 void
 HTTPCache::create_cache_root(const string &cache_root)
 {
-    struct stat stat_info;
-    string::size_type cur = 0;
-
 #ifdef WIN32
-    cur = cache_root[1] == ':' ? 3 : 1;
+    string::size_type cur = cache_root[1] == ':' ? 3 : 1;
     typedef int mode_t;
-#else
-    cur = 1;
-#endif
+
     while ((cur = cache_root.find(DIR_SEPARATOR_CHAR, cur)) != string::npos) {
         string dir = cache_root.substr(0, cur);
+        struct stat stat_info;
         if (stat(dir.c_str(), &stat_info) == -1) {
             DBG2(cerr << "Cache....... Creating " << dir << endl);
             mode_t mask = UMASK(0);
@@ -551,6 +553,23 @@ HTTPCache::create_cache_root(const string &cache_root)
         }
         cur++;
     }
+#else
+    // OSX and Linux
+
+    // Save the mask
+    mode_t mask = umask(0);
+
+    // Ignore the error if the directory exists
+    errno = 0;
+    if (mkdir(cache_root.c_str(), 0777) < 0 && errno != EEXIST) {
+        umask(mask);
+        throw Error("Could not create the directory for the cache at '" + cache_root + "' (" + strerror(errno) + ").");
+    }
+
+    // Restore themask
+    umask(mask);
+
+#endif
 }
 
 /** Set the cache's root directory to the given path. If no path is given,
@@ -642,7 +661,6 @@ HTTPCache::is_cache_enabled() const
     @param mode One of DISCONNECT_NONE, DISCONNECT_NORMAL or
     DISCONNECT_EXTERNAL.
     @see CacheDIsconnectedMode */
-
 void
 HTTPCache::set_cache_disconnected(CacheDisconnectedMode mode)
 {
@@ -710,8 +728,7 @@ HTTPCache::set_max_size(unsigned long size)
 
     try {
         unsigned long new_size = size < MIN_CACHE_TOTAL_SIZE ?
-                                 MIN_CACHE_TOTAL_SIZE * MEGA :
-                                 (size > ULONG_MAX ? ULONG_MAX : size * MEGA);
+                                 MIN_CACHE_TOTAL_SIZE * MEGA : size * MEGA;
         unsigned long old_size = d_total_size;
         d_total_size = new_size;
         d_folder_size = d_total_size / CACHE_FOLDER_PCT;
diff --git a/HTTPCache.h b/HTTPCache.h
index 4a0861d..6c9b323 100644
--- a/HTTPCache.h
+++ b/HTTPCache.h
@@ -36,45 +36,16 @@
 #include <vector>
 #include <map>
 
-#ifndef _http_cache_table_h
-#include "HTTPCacheTable.h"
-#endif
-
-#ifndef _error_h
-#include "Error.h"
-#endif
-
-#ifndef _internalerr_h
-#include "InternalErr.h"
-#endif
-
-#ifndef _debug_h
-#include "debug.h"
-#endif
-
-// The private method HTTPCache::write_body() could, at one time, throw
-// ResponseTooBig to signal that while writing a response body it was found
-// to be bigger than the max_entry_size property. But I bagged that; the
-// garbage collection methods remove entries larger than max_entry_size. It
-// might be that a really big entry belongs in the cache so long as it
-// doesn't push other entries out. 10/07/02 jhrg
-#ifndef _response_too_big_err_h
-#include "ResponseTooBigErr.h"
-#endif
+#include "HTTPCacheTable.h" // included for macros
 
-#ifndef _http_cache_disconnected_mode_h
 #include "HTTPCacheDisconnectedMode.h"
-#endif
-
-#ifndef _signal_handler_registered_err_h
-#include "SignalHandlerRegisteredErr.h"
-#endif
-
-using namespace std;
+//using namespace std;
 
 namespace libdap
 {
 
+class HTTPCacheTabe;
+
 // This function is exported so the test code can use it too.
 bool is_hop_by_hop_header(const string &header);
 
@@ -172,15 +143,9 @@ private:
     friend class HTTPCacheInterruptHandler;
 
     // Private methods
-    HTTPCache(const HTTPCache &) {
-    	throw InternalErr(__FILE__, __LINE__, "Unimplemented");
-    }
-    HTTPCache() {
-    	throw InternalErr(__FILE__, __LINE__, "Unimplemented");
-    }
-    HTTPCache &operator=(const HTTPCache &) {
-    	throw InternalErr(__FILE__, __LINE__, "Unimplemented");
-    }
+    HTTPCache(const HTTPCache &);
+    HTTPCache();
+    HTTPCache &operator=(const HTTPCache &);
 
     HTTPCache(string cache_root, bool force);
 
diff --git a/HTTPCacheTable.cc b/HTTPCacheTable.cc
index 38066fe..0a77366 100644
--- a/HTTPCacheTable.cc
+++ b/HTTPCacheTable.cc
@@ -36,6 +36,8 @@
 #include <sys/stat.h>
 
 #include <cstring>
+#include <cerrno>
+
 #include <iostream>
 #include <sstream>
 #include <algorithm>
@@ -444,6 +446,7 @@ HTTPCacheTable::cache_index_write()
 string
 HTTPCacheTable::create_hash_directory(int hash)
 {
+#if 0
     struct stat stat_info;
     ostringstream path;
 
@@ -463,6 +466,25 @@ HTTPCacheTable::create_hash_directory(int hash)
     }
 
     return p;
+#endif
+
+    ostringstream path;
+    path << d_cache_root << hash;
+
+    // Save the mask
+    mode_t mask = umask(0);
+
+    // Ignore the error if the directory exists
+    errno = 0;
+    if (mkdir(path.str().c_str(), 0777) < 0 && errno != EEXIST) {
+        umask(mask);
+        throw Error("Could not create the directory for the cache at '" + path.str() + "' (" + strerror(errno) + ").");
+    }
+
+    // Restore themask
+    umask(mask);
+
+    return path.str();
 }
 
 /** Create the directory for this url (using the hash value from get_hash())
@@ -505,7 +527,7 @@ HTTPCacheTable::create_location(HTTPCacheTable::CacheEntry *entry)
     int fd = MKSTEMP(&templat[0]); // fd mode is 666 or 600 (Unix)
     if (fd < 0) {
         // delete[] templat; templat = 0;
-        close(fd);
+        // close(fd); Calling close() when fd is < 0 is a bad idea! jhrg 7/2/15
         throw Error("The HTTP Cache could not create a file to hold the response; it will not be cached.");
     }
 
diff --git a/HTTPCacheTable.h b/HTTPCacheTable.h
index 82cd219..e8ec655 100644
--- a/HTTPCacheTable.h
+++ b/HTTPCacheTable.h
@@ -1,4 +1,3 @@
-
 // -*- mode: c++; c-basic-offset:4 -*-
 
 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
@@ -34,6 +33,8 @@
 #include <io.h>   // stat for win32? 09/05/02 jhrg
 #endif
 
+#include <cstring>
+
 #include <string>
 #include <vector>
 #include <map>
@@ -61,42 +62,40 @@
 #define LOCK(m) do { \
 	int code = pthread_mutex_lock((m)); \
 	if (code != 0) \
-		throw InternalErr(__FILE__, __LINE__, "Mutex lock: " + long_to_string(code)); \
+		throw InternalErr(__FILE__, __LINE__, string("Mutex lock: ") + strerror(code)); \
     } while(0);
 
 #define UNLOCK(m) do { \
 	int code = pthread_mutex_unlock((m)); \
 	if (code != 0) \
-		throw InternalErr(__FILE__, __LINE__, "Mutex unlock: " + long_to_string(code)); \
+		throw InternalErr(__FILE__, __LINE__, string("Mutex unlock: ") + strerror(code)); \
     } while(0);
 
 #define TRYLOCK(m) pthread_mutex_trylock((m))
 #define INIT(m) pthread_mutex_init((m), 0)
 #define DESTROY(m) pthread_mutex_destroy((m))
 
+//using namespace std;
 
-using namespace std;
-
-namespace libdap
-{
+namespace libdap {
 
 int get_hash(const string &url);
 
 /** The table of entries in the client-side cache. This class maintains a table
-    of CacheEntries, where one instance of CacheEntry is made for
-    each item in the cache. When an item is accessed it is either
-    locked for reading or writing. When locked for reading the entry is 
-    recorded on a list of read-locked entries. The caller must explicitly 
-    free the entry for it to be removed from this list (which is the only
-    way it can be opened for writing). An entry can be accessed by multiple
-    readers but only one writer.
-    
-    @note The CacheEntry class used to contain a lock that was used to ensure
-    that the entry was locked during any changes to any of its fields. That
-    has been removed - its now the responsibility of the caller. This change
-    was made because it's likely the caller will need to lock all of the methods
-    that operate on a CacheEntry anyway, so the CacheEntry-specific lock was
-    redundant. */
+ of CacheEntries, where one instance of CacheEntry is made for
+ each item in the cache. When an item is accessed it is either
+ locked for reading or writing. When locked for reading the entry is
+ recorded on a list of read-locked entries. The caller must explicitly
+ free the entry for it to be removed from this list (which is the only
+ way it can be opened for writing). An entry can be accessed by multiple
+ readers but only one writer.
+
+ @note The CacheEntry class used to contain a lock that was used to ensure
+ that the entry was locked during any changes to any of its fields. That
+ has been removed - its now the responsibility of the caller. This change
+ was made because it's likely the caller will need to lock all of the methods
+ that operate on a CacheEntry anyway, so the CacheEntry-specific lock was
+ redundant. */
 class HTTPCacheTable {
 public:
     /** A struct used to store information about responses in the
@@ -112,149 +111,149 @@ public:
      the lock counter and mutex. */
     struct CacheEntry {
     private:
-	string url; // Location
-	int hash;
-	int hits; // Hit counts
-	string cachename;
-
-	string etag;
-	time_t lm; // Last modified
-	time_t expires;
-	time_t date; // From the response header.
-	time_t age;
-	time_t max_age; // From Cache-Control
-
-	unsigned long size; // Size of cached entity body
-	bool range; // Range is not currently supported. 10/02/02 jhrg
-
-	time_t freshness_lifetime;
-	time_t response_time;
-	time_t corrected_initial_age;
-
-	bool must_revalidate;
-	bool no_cache; // This field is not saved in the index.
-
-	int readers;
-	pthread_mutex_t d_response_lock; // set if being read
-	pthread_mutex_t d_response_write_lock; // set if being written
-
-	// Allow HTTPCacheTable methods access and the test class, too
-	friend class HTTPCacheTable;
-	friend class HTTPCacheTest;
-
-	// Allow access by the functors used in HTTPCacheTable
-	friend class DeleteCacheEntry;
-	friend class WriteOneCacheEntry;
-	friend class DeleteExpired;
-	friend class DeleteByHits;
-	friend class DeleteBySize;
+        string url; // Location
+        int hash;
+        int hits; // Hit counts
+        string cachename;
+
+        string etag;
+        time_t lm; // Last modified
+        time_t expires;
+        time_t date; // From the response header.
+        time_t age;
+        time_t max_age; // From Cache-Control
+
+        unsigned long size; // Size of cached entity body
+        bool range; // Range is not currently supported. 10/02/02 jhrg
+
+        time_t freshness_lifetime;
+        time_t response_time;
+        time_t corrected_initial_age;
+
+        bool must_revalidate;
+        bool no_cache; // This field is not saved in the index.
+
+        int readers;
+        pthread_mutex_t d_response_lock; // set if being read
+        pthread_mutex_t d_response_write_lock; // set if being written
+
+        // Allow HTTPCacheTable methods access and the test class, too
+        friend class HTTPCacheTable;
+        friend class HTTPCacheTest;
+
+        // Allow access by the functors used in HTTPCacheTable
+        friend class DeleteCacheEntry;
+        friend class WriteOneCacheEntry;
+        friend class DeleteExpired;
+        friend class DeleteByHits;
+        friend class DeleteBySize;
 
     public:
-	string get_cachename()
-	{
-	    return cachename;
-	}
-	string get_etag()
-	{
-	    return etag;
-	}
-	time_t get_lm()
-	{
-	    return lm;
-	}
-	time_t get_expires()
-	{
-	    return expires;
-	}
-	time_t get_max_age()
-	{
-	    return max_age;
-	}
-	void set_size(unsigned long sz)
-	{
-	    size = sz;
-	}
-	time_t get_freshness_lifetime()
-	{
-	    return freshness_lifetime;
-	}
-	time_t get_response_time()
-	{
-	    return response_time;
-	}
-	time_t get_corrected_initial_age()
-	{
-	    return corrected_initial_age;
-	}
-	bool get_must_revalidate()
-	{
-	    return must_revalidate;
-	}
-	void set_no_cache(bool state)
-	{
-	    no_cache = state;
-	}
-	bool is_no_cache()
-	{
-	    return no_cache;
-	}
-
-	void lock_read_response()
-	{
-	    DBG(cerr << "Try locking read response... (" << hex << &d_response_lock << dec << ") ");
-	    int status = TRYLOCK(&d_response_lock);
-	    if (status != 0 /*&& status == EBUSY*/) {
-		// If locked, wait for any writers
-		LOCK(&d_response_write_lock);
-		UNLOCK(&d_response_write_lock);
-	    };
-	    DBGN(cerr << "Done" << endl);
-	    readers++; // REcord number of readers
-	}
-
-	void unlock_read_response()
-	{
-	    readers--;
-	    if (readers == 0) {
-		DBG(cerr << "Unlocking read response... (" << hex << &d_response_lock << dec << ") ");
-		UNLOCK(&d_response_lock);
-		DBGN(cerr << "Done" << endl);
-	    }
-	}
-
-	void lock_write_response()
-	{
-	    DBG(cerr << "locking write response... (" << hex << &d_response_lock << dec << ") ");
-	    LOCK(&d_response_lock);
-	    LOCK(&d_response_write_lock);
-	    DBGN(cerr << "Done" << endl);
-	}
-
-	void unlock_write_response()
-	{
-	    DBG(cerr << "Unlocking write response... (" << hex << &d_response_lock << dec << ") ");
-	    UNLOCK(&d_response_write_lock);
-	    UNLOCK(&d_response_lock);
-	    DBGN(cerr << "Done" << endl);
-	}
-
-	CacheEntry() :
-	    url(""), hash(-1), hits(0), cachename(""), etag(""), lm(-1), expires(-1), date(-1), age(-1), max_age(-1),
-		    size(0), range(false), freshness_lifetime(0), response_time(0), corrected_initial_age(0),
-		    must_revalidate(false), no_cache(false), readers(0)
-	{
-	    INIT(&d_response_lock);
-	    INIT(&d_response_write_lock);
-	}
-	CacheEntry(const string &u) :
-	    url(u), hash(-1), hits(0), cachename(""), etag(""), lm(-1), expires(-1), date(-1), age(-1), max_age(-1),
-		    size(0), range(false), freshness_lifetime(0), response_time(0), corrected_initial_age(0),
-		    must_revalidate(false), no_cache(false), readers(0)
-	{
-	    INIT(&d_response_lock);
-	    INIT(&d_response_write_lock);
-	    hash = get_hash(url);
-	}
+        string get_cachename()
+        {
+            return cachename;
+        }
+        string get_etag()
+        {
+            return etag;
+        }
+        time_t get_lm()
+        {
+            return lm;
+        }
+        time_t get_expires()
+        {
+            return expires;
+        }
+        time_t get_max_age()
+        {
+            return max_age;
+        }
+        void set_size(unsigned long sz)
+        {
+            size = sz;
+        }
+        time_t get_freshness_lifetime()
+        {
+            return freshness_lifetime;
+        }
+        time_t get_response_time()
+        {
+            return response_time;
+        }
+        time_t get_corrected_initial_age()
+        {
+            return corrected_initial_age;
+        }
+        bool get_must_revalidate()
+        {
+            return must_revalidate;
+        }
+        void set_no_cache(bool state)
+        {
+            no_cache = state;
+        }
+        bool is_no_cache()
+        {
+            return no_cache;
+        }
+
+        void lock_read_response()
+        {
+            DBG(cerr << "Try locking read response... (" << hex << &d_response_lock << dec << ") ");
+            int status = TRYLOCK(&d_response_lock);
+            if (status != 0 /*&& status == EBUSY*/) {
+                // If locked, wait for any writers
+                LOCK(&d_response_write_lock);
+                UNLOCK(&d_response_write_lock);
+            }
+
+            readers++; // Record number of readers
+
+            DBGN(cerr << "Done" << endl);
+
+        }
+
+        void unlock_read_response()
+        {
+            readers--;
+            if (readers == 0) {
+                DBG(cerr << "Unlocking read response... (" << hex << &d_response_lock << dec << ") ");
+                UNLOCK(&d_response_lock); DBGN(cerr << "Done" << endl);
+            }
+        }
+
+        void lock_write_response()
+        {
+            DBG(cerr << "locking write response... (" << hex << &d_response_lock << dec << ") ");
+            LOCK(&d_response_lock);
+            LOCK(&d_response_write_lock); DBGN(cerr << "Done" << endl);
+        }
+
+        void unlock_write_response()
+        {
+            DBG(cerr << "Unlocking write response... (" << hex << &d_response_lock << dec << ") ");
+            UNLOCK(&d_response_write_lock);
+            UNLOCK(&d_response_lock); DBGN(cerr << "Done" << endl);
+        }
+
+        CacheEntry() :
+            url(""), hash(-1), hits(0), cachename(""), etag(""), lm(-1), expires(-1), date(-1), age(-1), max_age(-1), size(
+                0), range(false), freshness_lifetime(0), response_time(0), corrected_initial_age(0), must_revalidate(
+                false), no_cache(false), readers(0)
+        {
+            INIT(&d_response_lock);
+            INIT(&d_response_write_lock);
+        }
+        CacheEntry(const string &u) :
+            url(u), hash(-1), hits(0), cachename(""), etag(""), lm(-1), expires(-1), date(-1), age(-1), max_age(-1), size(
+                0), range(false), freshness_lifetime(0), response_time(0), corrected_initial_age(0), must_revalidate(
+                false), no_cache(false), readers(0)
+        {
+            INIT(&d_response_lock);
+            INIT(&d_response_write_lock);
+            hash = get_hash(url);
+        }
     };
 
     // Typedefs for CacheTable. A CacheTable is a vector of vectors of
@@ -265,7 +264,7 @@ public:
     typedef vector<CacheEntry *> CacheEntries;
     typedef CacheEntries::iterator CacheEntriesIter;
 
-    typedef CacheEntries **CacheTable;// Array of pointers to CacheEntries
+    typedef CacheEntries **CacheTable;    // Array of pointers to CacheEntries
 
     friend class HTTPCacheTest;
 
@@ -278,29 +277,19 @@ private:
 
     string d_cache_index;
     int d_new_entries;
-    
-    map<FILE *, HTTPCacheTable::CacheEntry *> d_locked_entries;
-    
-	// Make these private to prevent use
-    HTTPCacheTable(const HTTPCacheTable &)
-    {
-	throw InternalErr(__FILE__, __LINE__, "unimplemented");
-    }
 
-    HTTPCacheTable &operator=(const HTTPCacheTable &)
-    {
-	throw InternalErr(__FILE__, __LINE__, "unimplemented");
-    }
+    map<FILE *, HTTPCacheTable::CacheEntry *> d_locked_entries;
 
-    HTTPCacheTable()
-    {
-	throw InternalErr(__FILE__, __LINE__, "unimplemented");
-    }
+    // Make these private to prevent use
+    HTTPCacheTable(const HTTPCacheTable &);
+    HTTPCacheTable &operator=(const HTTPCacheTable &);
+    HTTPCacheTable();
 
     CacheTable &get_cache_table()
     {
-	return d_cache_table;
+        return d_cache_table;
     }
+
     CacheEntry *get_locked_entry_from_cache_table(int hash, const string &url); /*const*/
 
 public:
@@ -310,38 +299,38 @@ public:
     //@{ @name Accessors/Mutators
     unsigned long get_current_size() const
     {
-	return d_current_size;
+        return d_current_size;
     }
     void set_current_size(unsigned long sz)
     {
-	d_current_size = sz;
+        d_current_size = sz;
     }
 
     unsigned int get_block_size() const
     {
-	return d_block_size;
+        return d_block_size;
     }
     void set_block_size(unsigned int sz)
     {
-	d_block_size = sz;
+        d_block_size = sz;
     }
 
     int get_new_entries() const
     {
-	return d_new_entries;
+        return d_new_entries;
     }
     void increment_new_entries()
     {
-	++d_new_entries;
+        ++d_new_entries;
     }
 
     string get_cache_root()
     {
-	return d_cache_root;
+        return d_cache_root;
     }
     void set_cache_root(const string &cr)
     {
-	d_cache_root = cr;
+        d_cache_root = cr;
     }
     //@}
 
diff --git a/HTTPConnect.cc b/HTTPConnect.cc
index 68663ff..7e168cd 100644
--- a/HTTPConnect.cc
+++ b/HTTPConnect.cc
@@ -45,6 +45,7 @@
 #include <iterator>
 #include <cstdlib>
 #include <cstring>
+#include <cerrno>
 
 //#define DODS_DEBUG2
 //#define HTTP_TRACE
@@ -512,7 +513,7 @@ HTTPConnect::read_url(const string &url, FILE *stream, vector<string> *resp_hdrs
     current URL matches the regular expression. */
 
 bool
-HTTPConnect::url_uses_proxy_for(const string &url) throw()
+HTTPConnect::url_uses_proxy_for(const string &url)
 {
     if (d_rcr->is_proxy_for_used()) {
         Regex host_regex(d_rcr->get_proxy_for_regexp().c_str());
@@ -778,8 +779,15 @@ get_temp_file(FILE *&stream) throw(Error)
     stream = fopen(_mktemp(&pathname[0]), "w+b");
 #else
     // Make sure that temp files are accessible only by the owner.
-    umask(077);
-    stream = fdopen(mkstemp(&pathname[0]), "w+");
+    int mask = umask(077);
+    if (mask < 0)
+        throw Error("Could not set the file creation mask: " + string(strerror(errno)));
+    int fd = mkstemp(&pathname[0]);
+    if (fd < 0)
+        throw Error("Could not create a temporary file to store the response: " + string(strerror(errno)));
+
+    stream = fdopen(fd, "w+");
+    umask(mask);
 #endif
 
     if (!stream)
diff --git a/HTTPConnect.h b/HTTPConnect.h
index e3b6f99..73b4833 100644
--- a/HTTPConnect.h
+++ b/HTTPConnect.h
@@ -101,7 +101,7 @@ private:
     HTTPResponse *plain_fetch_url(const string &url);
     HTTPResponse *caching_fetch_url(const string &url);
 
-    bool url_uses_proxy_for(const string &url) throw();
+    bool url_uses_proxy_for(const string &url);
     bool url_uses_no_proxy_for(const string &url) throw();
 
     void extract_auth_info(string &url);
diff --git a/INSTALL b/INSTALL
index e8f3ad3..cb645b7 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
 
-Updated for version 3.13.3 of the OPeNDAP DAP 3.5 library software.
+Updated for version 3.15.0 of the OPeNDAP DAP2/4 library software.
 
-Installing the DAP2/3.x library
+Installing the DAP2/4 library
 
 ---------------------------------------------------------------------------
 
@@ -13,7 +13,7 @@ NOTES
 
 BUILDING THE SOFTWARE
 
-  To build the OPeNDAP DAP2/3.x library and the getdap client program, follow
+  To build the OPeNDAP DAP2/4 library and the getdap client program, follow
   these steps:
 
   0. Please skim REQUIREMENTS and NOTES sections of this file
@@ -35,17 +35,17 @@ BUILDING THE SOFTWARE
      example, './configure --prefix=/opt/opendap' would set the build
      so that the library was installed in /opt/opendap/lib, ...
 
-Building from Our SVN Repository
+Building from Our GIT Repository
 
-  If you are building from a SVN checkout, run 'autoreconf --install'
-  before './configure; make'. Using --verbose might be useful if there
-  are errors running configure. If you try to run autoconf, et c., by
-  hand and wind up with build files that don't work, use 'autoreconf
-  --force --verbose --install' and then './configure; make'. Also
-  included in SVN is a script which runs the auto* tools one by one
-  called autogen.sh. At one time this seemed to be a better way to do
-  things, but now autoreconf seems the most reliable tool for
-  bootstrapping the auto tools.
+  A git clone of https://github.com/opendap/libdap4 will get you the
+  newest code. You'll need the autotools toolchain. First, run
+      autoreconf --force --install --verbose
+  Then run ./configure, make and make check. Use --prefix with configure
+  to set the installation to a location other than /usr/local. Use
+  --enable-developer to trun on the library's asserts and build with
+  debuggin symbols. Use --jobs=N with make and make check to run those
+  in parallel on multi core machines and add TESTSUITEFLAGS=-j9 to make
+  check to run the regression tests in parallel.
 
   Make certain that you have recent versions of autoconf, automake and
   libtool.
@@ -70,12 +70,12 @@ AFTER INSTALLING
 
 REQUIREMENTS
 
-  o To build from a fresh SVN checkout, you'll need automake 1.11,
-    autoconf 2.61 and libtool 2.2.6. Earlier versions may work, but
+  o To build from a fresh git clone, you'll need automake 1.11,
+    autoconf 2.63 and libtool 2.2.6. Earlier versions may work, but
     may cause problems, particularly with the 'distcheck' target for
     make. Given those requirements, use 'autoreconf --force --install
-    --verbose' and then build as described above. You also need bison 2.4
-    and flex as of version 3.7.9.
+    --verbose' and then build as described above. You also need bison 3
+    and flex 2.5.35 or greater.
 
   o The library uses libcurl and libxml2. You will need these libraries
     installed on your system to successfully run configure and build the
@@ -91,25 +91,7 @@ REQUIREMENTS
     
 	'PATH="$PATH:/opt/opendap/bin';./configure --prefix=/opt/opendap'
 
-  o You should have gcc/g++ 2.95.x or greater (really, you should
-    probably be using gcc/++ 4.x, but you _can_ use 2.95 on our code).
-    You'll also need to get the stdc++ library that matches the
-    compiler (whatever version). NB: gcc 2.8.x and earlier *won't*
-    build the software. We're working on modifying the software so
-    that it will build with a variety of compilers. As of 01/22/03 we
-    have built the code using Microsoft's Visual C++ 6.0 and GNU
-    gcc/++ 3.2.1, 3.3, 3.4, 4.0, ..., 4.4 and OSX's compiler bundled
-    with OSX 10.9 (Apple LLVM version 5.1 (clang-503.0.40) (based on
-    LLVM 3.4svn). The library has also been built using the native AIX
-    compiler; see INSTALL.AIX.
-
-  o We ship the C++ source files generated using bison and flex so
-    these programs are no longer required to build the source code.
-    However, to build the C++ sources from the grammar files, you'll
-    need bison 2.4 and flex 3.7.9. Note, howver, that older versions
-    of bison and flex have some issues with the code they generate -
-    you should uses the newest versions of these tools if the software
-    you build is going to run on a production server.
+  o We build this using gcc 4.2.1 and clang 602.0.53
 
 NOTES
 
diff --git a/Makefile.am b/Makefile.am
index ffc4d48..6827f3d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -8,7 +8,6 @@ pkgconfigdir=$(libdir)/pkgconfig
 
 AM_CPPFLAGS = -I$(top_builddir)/gl -I$(top_srcdir)/gl -I$(top_srcdir)/GNU $(XML2_CFLAGS)
 AM_CXXFLAGS = 
-CXXFLAGS = 
 
 if COMPILER_IS_GCC
 AM_CXXFLAGS += -Wall -W -Wcast-align
@@ -26,8 +25,8 @@ if BUILD_DEVELOPER
 AM_CXXFLAGS += $(CXXFLAGS_DEBUG)
 endif
 
-SUBDIRS = gl d4_ce .  tests unit-tests
-DIST_SUBDIRS = gl d4_ce tests unit-tests
+SUBDIRS = gl d4_ce d4_function .  tests unit-tests
+DIST_SUBDIRS = gl d4_ce d4_function tests unit-tests
 
 noinst_LTLIBRARIES = libparsers.la
 
@@ -37,18 +36,18 @@ bin_SCRIPTS = dap-config dap-config-pkgconfig
 
 bin_PROGRAMS = getdap getdap4
 
-BUILT_SOURCES = $(GRAM_SRC) dods-datatypes.h xdr-datatypes.h getdap.1 dap-config.1 getdap4.1
+# Including the generated grammar sources in BUILT_SOURCES ensures
+# they are built first. jhrg 6/18/15
+BUILT_SOURCES = $(BISON_SRC) $(FLEX_SRC) dods-datatypes.h xdr-datatypes.h \
+	getdap.1 dap-config.1 getdap4.1
 
 man_MANS = getdap.1 dap-config.1 getdap4.1
 
 %.1: %.man1
 	groff -t -e -mandoc -Tascii $< | col -bx > $@
 
-libparsers_la_SOURCES = $(GRAM_SRC) 
+libparsers_la_SOURCES = $(FLEX_SRC) $(BISON_SRC)  
 libparsers_la_CPPFLAGS = $(XML2_CFLAGS)
-# Removed this because on CentOS 5 using gl/unistd.h with flex-generated
-# sources is broken - assume that flex is suitably portable on its own,
-# so the gl code is not needed anyway. jhrg 5/2/14 $(AM_CPPFLAGS)
 libparsers_la_LIBADD = $(XML2_LIBS)
 
 libdap_la_SOURCES = $(DAP_SRC) $(GNU_SRC)
@@ -58,7 +57,9 @@ endif
 
 libdap_la_LDFLAGS = -version-info $(LIBDAP_VERSION)
 libdap_la_CPPFLAGS = $(AM_CPPFLAGS)
-libdap_la_LIBADD = $(XML2_LIBS) $(PTHREAD_LIBS) gl/libgnu.la d4_ce/libd4_ce_parser.la libparsers.la
+libdap_la_LIBADD = $(XML2_LIBS) $(PTHREAD_LIBS) gl/libgnu.la d4_ce/libd4_ce_parser.la \
+d4_function/libd4_function_parser.la libparsers.la
+
 if DAP4_DEFINED
     libdap_la_LIBADD += -lcrypto 
 endif
@@ -97,18 +98,13 @@ EXTRA_DIST = ChangeLog COPYING README.dodsrc COPYRIGHT_URI		\
 	COPYRIGHT_W3C GNU/README doxy.conf doxy_private.conf		\
 	libdap.spec VCPP dods-datatypes-static.h			\
 	xdr-datatypes-static.h dap-config-pkgconfig $(LEX_YACC_EXTRA)	\
-	$(GRAM_SRC) OSX_Resources getdap.man1 dap-config.man1 getdap4.man1
+	OSX_Resources getdap.man1 dap-config.man1 getdap4.man1
 
 dist_aclocal_DATA = conf/libdap.m4
 pkgconfig_DATA = libdap.pc libdapclient.pc libdapserver.pc
 
-CLEANFILES = *.log *.output *.gcda *.gcno $(GRAM_SRC) dods-datatypes.h \
-    xdr-datatypes.h getdap.1 dap-config.1 getdap4.1
-
-# Copy the generated grammar files to the 'grammarfiles' directory.
-.PHONY: grammarfiles
-grammarfiles: $(GRAM_SRC)
-	for f in $(GRAM_SRC); do cp $$f grammarfiles; done
+CLEANFILES = *.log *.output *.gcda *.gcno $(BISON_SRC) $(FLEX_SRC) \
+	dods-datatypes.h xdr-datatypes.h getdap.1 dap-config.1 getdap4.1
 
 .PHONY: docs
 docs:
@@ -230,9 +226,10 @@ GNU_SRC = GNU/GetOpt.cc GNU/GNURegex.cc
 
 GNU_HDR = GNU/GetOpt.h GNU/GNURegex.h
 
-GRAM_SRC = lex.das.cc das.tab.cc das.tab.hh lex.dds.cc dds.tab.cc	\
-	dds.tab.hh lex.ce_expr.cc ce_expr.tab.cc ce_expr.tab.hh		\
-	lex.Error.cc Error.tab.cc Error.tab.hh 
+BISON_SRC = das.tab.cc das.tab.hh dds.tab.cc	dds.tab.hh \
+	ce_expr.tab.cc ce_expr.tab.hh Error.tab.cc Error.tab.hh 
+
+FLEX_SRC = lex.das.cc lex.dds.cc lex.ce_expr.cc lex.Error.cc
 
 DAP_SRC = AttrTable.cc DAS.cc DDS.cc DataDDS.cc DDXParserSAX2.cc	\
 	BaseType.cc Byte.cc Int32.cc Float64.cc Str.cc Url.cc		\
@@ -245,7 +242,8 @@ DAP_SRC = AttrTable.cc DAS.cc DDS.cc DataDDS.cc DDXParserSAX2.cc	\
 	Operators.h XDRUtils.cc XDRFileMarshaller.cc			\
 	XDRStreamMarshaller.cc XDRFileUnMarshaller.cc			\
 	XDRStreamUnMarshaller.cc mime_util.cc Keywords2.cc XMLWriter.cc \
-	ServerFunctionsList.cc ServerFunction.cc DapXmlNamespaces.cc
+	ServerFunctionsList.cc ServerFunction.cc DapXmlNamespaces.cc \
+	MarshallerThread.cc
 
 DAP4_ONLY_SRC = D4StreamMarshaller.cc D4StreamUnMarshaller.cc Int64.cc \
         UInt64.cc Int8.cc D4ParserSax2.cc D4BaseTypeFactory.cc \
@@ -279,7 +277,7 @@ DAP_HDR = AttrTable.h DAS.h DDS.h DataDDS.h DDXParserSAX2.h		\
 	XDRStreamMarshaller.h XDRUtils.h xdr-datatypes.h mime_util.h	\
 	cgi_util.h XDRStreamUnMarshaller.h Keywords2.h XMLWriter.h \
 	ServerFunctionsList.h ServerFunction.h media_types.h \
-	DapXmlNamespaces.h parser-util.h
+	DapXmlNamespaces.h parser-util.h MarshallerThread.h
 
 DAP4_ONLY_HDR = D4StreamMarshaller.h D4StreamUnMarshaller.h Int64.h \
         UInt64.h Int8.h D4ParserSax2.h D4BaseTypeFactory.h \
@@ -319,32 +317,39 @@ SERVER_HDR = DODSFilter.h AlarmHandler.h EventHandler.h Ancillary.h
 #
 # Build the DAS scanner and parser
 
+# Using this pattern rule is a way to get gnu make to run bison only once.
+# The targets that explicitly name the two sources to be built will run it
+# twice with a parallel build. jhrg 6/18/15
+
+%.tab.cc %.tab.hh: %.yy
+	$(YACC) $(YFLAGS) $<
+
 lex.das.cc: das.lex das.tab.cc das.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-das.tab.cc das.tab.hh: das.yy DAS.h
-	$(YACC) $(YFLAGS) $<
+#das.tab.cc das.tab.hh: das.yy DAS.h
+#	$(YACC) $(YFLAGS) $<
 
 # DDS
 
 lex.dds.cc: dds.lex dds.tab.cc dds.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-dds.tab.cc dds.tab.hh: dds.yy
-	$(YACC) $(YFLAGS) $<
+#dds.tab.cc dds.tab.hh: dds.yy
+#	$(YACC) $(YFLAGS) $<
 
 # CE
 
 lex.ce_expr.cc: ce_expr.lex ce_expr.tab.cc ce_expr.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-ce_expr.tab.cc ce_expr.tab.hh: ce_expr.yy
-	$(YACC) $(YFLAGS) $<
+#ce_expr.tab.cc ce_expr.tab.hh: ce_expr.yy
+#	$(YACC) $(YFLAGS) $<
 
 # Errors
 
 lex.Error.cc: Error.lex Error.tab.cc Error.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-Error.tab.cc Error.tab.hh: Error.yy
-	$(YACC) $(YFLAGS) $<
+#Error.tab.cc Error.tab.hh: Error.yy
+#	$(YACC) $(YFLAGS) $<
diff --git a/Makefile.in b/Makefile.in
index 25eace8..54a118c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -22,23 +21,51 @@
 
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -64,25 +91,25 @@ bin_PROGRAMS = getdap$(EXEEXT) getdap4$(EXEEXT)
 @DAP4_DEFINED_TRUE at am__append_5 = $(DAP4_CLIENT_HDR) $(DAP4_CLIENT_SRC)
 @DAP4_DEFINED_TRUE at am__append_6 = $(DAP4_ONLY_HDR) $(DAP4_CLIENT_HDR)
 subdir = .
-DIST_COMMON = README $(am__configure_deps) \
-	$(am__pkginclude_HEADERS_DIST) $(dist_aclocal_DATA) \
-	$(noinst_HEADERS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/abi_checker.xml.in $(srcdir)/config.h.in \
-	$(srcdir)/dap-config.in $(srcdir)/dods-datatypes-config.h.in \
-	$(srcdir)/doxy.conf.in $(srcdir)/libdap.pc.in \
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/configure $(am__configure_deps) \
+	$(srcdir)/config.h.in $(srcdir)/dods-datatypes-config.h.in \
+	$(srcdir)/xdr-datatypes-config.h.in $(srcdir)/libdap.pc.in \
 	$(srcdir)/libdapclient.pc.in $(srcdir)/libdapserver.pc.in \
-	$(srcdir)/main_page.doxygen.in \
-	$(srcdir)/xdr-datatypes-config.h.in $(top_srcdir)/conf/compile \
+	$(srcdir)/main_page.doxygen.in $(srcdir)/doxy.conf.in \
+	$(srcdir)/abi_checker.xml.in $(srcdir)/dap-config.in \
+	$(top_srcdir)/conf/depcomp $(dist_aclocal_DATA) \
+	$(noinst_HEADERS) $(am__pkginclude_HEADERS_DIST) COPYING \
+	ChangeLog INSTALL NEWS README conf/compile conf/config.guess \
+	conf/config.rpath conf/config.sub conf/depcomp conf/install-sh \
+	conf/missing conf/ltmain.sh $(top_srcdir)/conf/compile \
 	$(top_srcdir)/conf/config.guess \
 	$(top_srcdir)/conf/config.rpath $(top_srcdir)/conf/config.sub \
-	$(top_srcdir)/conf/depcomp $(top_srcdir)/conf/install-sh \
-	$(top_srcdir)/conf/ltmain.sh $(top_srcdir)/conf/missing \
-	$(top_srcdir)/configure COPYING ChangeLog INSTALL NEWS \
-	conf/compile conf/config.guess conf/config.rpath \
-	conf/config.sub conf/depcomp conf/install-sh conf/ltmain.sh \
-	conf/missing
+	$(top_srcdir)/conf/install-sh $(top_srcdir)/conf/ltmain.sh \
+	$(top_srcdir)/conf/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -103,8 +130,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -169,7 +196,8 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
 LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libdap_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	gl/libgnu.la d4_ce/libd4_ce_parser.la libparsers.la \
+	gl/libgnu.la d4_ce/libd4_ce_parser.la \
+	d4_function/libd4_function_parser.la libparsers.la \
 	$(am__DEPENDENCIES_1)
 am__libdap_la_SOURCES_DIST = AttrTable.cc DAS.cc DDS.cc DataDDS.cc \
 	DDXParserSAX2.cc BaseType.cc Byte.cc Int32.cc Float64.cc \
@@ -181,13 +209,13 @@ am__libdap_la_SOURCES_DIST = AttrTable.cc DAS.cc DDS.cc DataDDS.cc \
 	XDRUtils.cc XDRFileMarshaller.cc XDRStreamMarshaller.cc \
 	XDRFileUnMarshaller.cc XDRStreamUnMarshaller.cc mime_util.cc \
 	Keywords2.cc XMLWriter.cc ServerFunctionsList.cc \
-	ServerFunction.cc DapXmlNamespaces.cc GNU/GetOpt.cc \
-	GNU/GNURegex.cc D4StreamMarshaller.cc D4StreamUnMarshaller.cc \
-	Int64.cc UInt64.cc Int8.cc D4ParserSax2.cc \
-	D4BaseTypeFactory.cc D4Dimensions.cc D4EnumDefs.cc D4Group.cc \
-	DMR.cc D4Attributes.cc D4Enum.cc chunked_ostream.cc \
-	chunked_istream.cc D4Sequence.cc D4Maps.cc D4Opaque.cc \
-	D4AsyncUtil.cc D4RValue.cc
+	ServerFunction.cc DapXmlNamespaces.cc MarshallerThread.cc \
+	GNU/GetOpt.cc GNU/GNURegex.cc D4StreamMarshaller.cc \
+	D4StreamUnMarshaller.cc Int64.cc UInt64.cc Int8.cc \
+	D4ParserSax2.cc D4BaseTypeFactory.cc D4Dimensions.cc \
+	D4EnumDefs.cc D4Group.cc DMR.cc D4Attributes.cc D4Enum.cc \
+	chunked_ostream.cc chunked_istream.cc D4Sequence.cc D4Maps.cc \
+	D4Opaque.cc D4AsyncUtil.cc D4RValue.cc
 am__objects_1 = libdap_la-AttrTable.lo libdap_la-DAS.lo \
 	libdap_la-DDS.lo libdap_la-DataDDS.lo \
 	libdap_la-DDXParserSAX2.lo libdap_la-BaseType.lo \
@@ -208,7 +236,7 @@ am__objects_1 = libdap_la-AttrTable.lo libdap_la-DAS.lo \
 	libdap_la-XDRStreamUnMarshaller.lo libdap_la-mime_util.lo \
 	libdap_la-Keywords2.lo libdap_la-XMLWriter.lo \
 	libdap_la-ServerFunctionsList.lo libdap_la-ServerFunction.lo \
-	libdap_la-DapXmlNamespaces.lo
+	libdap_la-DapXmlNamespaces.lo libdap_la-MarshallerThread.lo
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_2 = GNU/libdap_la-GetOpt.lo GNU/libdap_la-GNURegex.lo
 am__objects_3 = libdap_la-D4StreamMarshaller.lo \
@@ -226,7 +254,11 @@ am__objects_3 = libdap_la-D4StreamMarshaller.lo \
 am_libdap_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
 	$(am__objects_4)
 libdap_la_OBJECTS = $(am_libdap_la_OBJECTS)
-libdap_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libdap_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
 	$(CXXFLAGS) $(libdap_la_LDFLAGS) $(LDFLAGS) -o $@
 libdapclient_la_DEPENDENCIES = $(am__DEPENDENCIES_1) libdap.la \
@@ -244,22 +276,24 @@ am__objects_7 = libdapclient_la-D4Connect.lo
 @DAP4_DEFINED_TRUE at am__objects_8 = $(am__objects_6) $(am__objects_7)
 am_libdapclient_la_OBJECTS = $(am__objects_5) $(am__objects_8)
 libdapclient_la_OBJECTS = $(am_libdapclient_la_OBJECTS)
-libdapclient_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-	$(CXXFLAGS) $(libdapclient_la_LDFLAGS) $(LDFLAGS) -o $@
+libdapclient_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(libdapclient_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 libdapserver_la_DEPENDENCIES = libdap.la $(am__DEPENDENCIES_1)
 am__objects_9 = DODSFilter.lo Ancillary.lo
 am_libdapserver_la_OBJECTS = $(am__objects_9)
 libdapserver_la_OBJECTS = $(am_libdapserver_la_OBJECTS)
-libdapserver_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-	$(CXXFLAGS) $(libdapserver_la_LDFLAGS) $(LDFLAGS) -o $@
+libdapserver_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(libdapserver_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 libparsers_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_10 = libparsers_la-lex.das.lo libparsers_la-das.tab.lo \
-	libparsers_la-lex.dds.lo libparsers_la-dds.tab.lo \
-	libparsers_la-lex.ce_expr.lo libparsers_la-ce_expr.tab.lo \
-	libparsers_la-lex.Error.lo libparsers_la-Error.tab.lo
-am_libparsers_la_OBJECTS = $(am__objects_10)
+am__objects_10 = libparsers_la-lex.das.lo libparsers_la-lex.dds.lo \
+	libparsers_la-lex.ce_expr.lo libparsers_la-lex.Error.lo
+am__objects_11 = libparsers_la-das.tab.lo libparsers_la-dds.tab.lo \
+	libparsers_la-ce_expr.tab.lo libparsers_la-Error.tab.lo
+am_libparsers_la_OBJECTS = $(am__objects_10) $(am__objects_11)
 libparsers_la_OBJECTS = $(am_libparsers_la_OBJECTS)
 PROGRAMS = $(bin_PROGRAMS)
 am_getdap_OBJECTS = getdap-getdap.$(OBJEXT)
@@ -269,41 +303,72 @@ am_getdap4_OBJECTS = getdap4-getdap4.$(OBJEXT)
 getdap4_OBJECTS = $(am_getdap4_OBJECTS)
 getdap4_DEPENDENCIES = libdapclient.la libdap.la
 SCRIPTS = $(bin_SCRIPTS)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/conf/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 SOURCES = $(libdap_la_SOURCES) $(libdapclient_la_SOURCES) \
 	$(libdapserver_la_SOURCES) $(libparsers_la_SOURCES) \
 	$(getdap_SOURCES) $(getdap4_SOURCES)
 DIST_SOURCES = $(am__libdap_la_SOURCES_DIST) \
 	$(am__libdapclient_la_SOURCES_DIST) $(libdapserver_la_SOURCES) \
 	$(libparsers_la_SOURCES) $(getdap_SOURCES) $(getdap4_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -326,25 +391,48 @@ am__pkginclude_HEADERS_DIST = AttrTable.h DAS.h DDS.h DataDDS.h \
 	XDRStreamMarshaller.h XDRUtils.h xdr-datatypes.h mime_util.h \
 	cgi_util.h XDRStreamUnMarshaller.h Keywords2.h XMLWriter.h \
 	ServerFunctionsList.h ServerFunction.h media_types.h \
-	DapXmlNamespaces.h parser-util.h GNU/GetOpt.h GNU/GNURegex.h \
-	RCReader.h Connect.h HTTPConnect.h HTTPCache.h \
-	HTTPCacheDisconnectedMode.h HTTPCacheInterruptHandler.h \
-	Response.h HTTPResponse.h HTTPCacheResponse.h PipeResponse.h \
-	StdinResponse.h SignalHandlerRegisteredErr.h \
-	ResponseTooBigErr.h Resource.h HTTPCacheTable.h \
-	HTTPCacheMacros.h DODSFilter.h AlarmHandler.h EventHandler.h \
-	Ancillary.h D4StreamMarshaller.h D4StreamUnMarshaller.h \
-	Int64.h UInt64.h Int8.h D4ParserSax2.h D4BaseTypeFactory.h \
-	D4Maps.h D4Dimensions.h D4EnumDefs.h D4Group.h DMR.h \
-	D4Attributes.h D4AttributeType.h D4Enum.h chunked_stream.h \
-	chunked_ostream.h chunked_istream.h D4Sequence.h crc.h \
-	D4Opaque.h D4AsyncUtil.h D4Function.h D4RValue.h D4Connect.h
+	DapXmlNamespaces.h parser-util.h MarshallerThread.h \
+	GNU/GetOpt.h GNU/GNURegex.h RCReader.h Connect.h HTTPConnect.h \
+	HTTPCache.h HTTPCacheDisconnectedMode.h \
+	HTTPCacheInterruptHandler.h Response.h HTTPResponse.h \
+	HTTPCacheResponse.h PipeResponse.h StdinResponse.h \
+	SignalHandlerRegisteredErr.h ResponseTooBigErr.h Resource.h \
+	HTTPCacheTable.h HTTPCacheMacros.h DODSFilter.h AlarmHandler.h \
+	EventHandler.h Ancillary.h D4StreamMarshaller.h \
+	D4StreamUnMarshaller.h Int64.h UInt64.h Int8.h D4ParserSax2.h \
+	D4BaseTypeFactory.h D4Maps.h D4Dimensions.h D4EnumDefs.h \
+	D4Group.h DMR.h D4Attributes.h D4AttributeType.h D4Enum.h \
+	chunked_stream.h chunked_ostream.h chunked_istream.h \
+	D4Sequence.h crc.h D4Opaque.h D4AsyncUtil.h D4Function.h \
+	D4RValue.h D4Connect.h
 HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
 	cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+	$(LISP)config.h.in dods-datatypes-config.h.in \
+	xdr-datatypes-config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
@@ -395,6 +483,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -426,7 +515,7 @@ CURL_STATIC_LIBS = @CURL_STATIC_LIBS@
 CXX = @CXX@
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = 
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DAPLIB_AGE = @DAPLIB_AGE@
 DAPLIB_CURRENT = @DAPLIB_CURRENT@
@@ -506,6 +595,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -623,6 +713,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -831,9 +922,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -843,6 +936,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -958,24 +1052,27 @@ AM_CXXFLAGS = $(am__append_1) $(am__append_2)
 # the --disable-shared is not required, but it seems to help with debuggers.
 CXXFLAGS_DEBUG = -g3 -O0  -Wall -W -Wcast-align 
 TEST_COV_FLAGS = -ftest-coverage -fprofile-arcs
-SUBDIRS = gl d4_ce .  tests unit-tests
-DIST_SUBDIRS = gl d4_ce tests unit-tests
+SUBDIRS = gl d4_ce d4_function .  tests unit-tests
+DIST_SUBDIRS = gl d4_ce d4_function tests unit-tests
 noinst_LTLIBRARIES = libparsers.la
 lib_LTLIBRARIES = libdap.la libdapclient.la libdapserver.la
 bin_SCRIPTS = dap-config dap-config-pkgconfig
-BUILT_SOURCES = $(GRAM_SRC) dods-datatypes.h xdr-datatypes.h getdap.1 dap-config.1 getdap4.1
+
+# Including the generated grammar sources in BUILT_SOURCES ensures
+# they are built first. jhrg 6/18/15
+BUILT_SOURCES = $(BISON_SRC) $(FLEX_SRC) dods-datatypes.h xdr-datatypes.h \
+	getdap.1 dap-config.1 getdap4.1
+
 man_MANS = getdap.1 dap-config.1 getdap4.1
-libparsers_la_SOURCES = $(GRAM_SRC) 
+libparsers_la_SOURCES = $(FLEX_SRC) $(BISON_SRC)  
 libparsers_la_CPPFLAGS = $(XML2_CFLAGS)
-# Removed this because on CentOS 5 using gl/unistd.h with flex-generated
-# sources is broken - assume that flex is suitably portable on its own,
-# so the gl code is not needed anyway. jhrg 5/2/14 $(AM_CPPFLAGS)
 libparsers_la_LIBADD = $(XML2_LIBS)
 libdap_la_SOURCES = $(DAP_SRC) $(GNU_SRC) $(am__append_3)
 libdap_la_LDFLAGS = -version-info $(LIBDAP_VERSION)
 libdap_la_CPPFLAGS = $(AM_CPPFLAGS)
 libdap_la_LIBADD = $(XML2_LIBS) $(PTHREAD_LIBS) gl/libgnu.la \
-	d4_ce/libd4_ce_parser.la libparsers.la $(am__append_4)
+	d4_ce/libd4_ce_parser.la d4_function/libd4_function_parser.la \
+	libparsers.la $(am__append_4)
 libdapclient_la_SOURCES = $(CLIENT_SRC) $(am__append_5)
 libdapclient_la_LDFLAGS = -version-info $(CLIENTLIB_VERSION)
 libdapclient_la_CPPFLAGS = $(AM_CPPFLAGS) $(CURL_CFLAGS)
@@ -999,12 +1096,12 @@ EXTRA_DIST = ChangeLog COPYING README.dodsrc COPYRIGHT_URI		\
 	COPYRIGHT_W3C GNU/README doxy.conf doxy_private.conf		\
 	libdap.spec VCPP dods-datatypes-static.h			\
 	xdr-datatypes-static.h dap-config-pkgconfig $(LEX_YACC_EXTRA)	\
-	$(GRAM_SRC) OSX_Resources getdap.man1 dap-config.man1 getdap4.man1
+	OSX_Resources getdap.man1 dap-config.man1 getdap4.man1
 
 dist_aclocal_DATA = conf/libdap.m4
 pkgconfig_DATA = libdap.pc libdapclient.pc libdapserver.pc
-CLEANFILES = *.log *.output *.gcda *.gcno $(GRAM_SRC) dods-datatypes.h \
-    xdr-datatypes.h getdap.1 dap-config.1 getdap4.1
+CLEANFILES = *.log *.output *.gcda *.gcno $(BISON_SRC) $(FLEX_SRC) \
+	dods-datatypes.h xdr-datatypes.h getdap.1 dap-config.1 getdap4.1
 
 
 ###########################################################################
@@ -1020,10 +1117,10 @@ PKG_CONF_FLAGS =
 # 
 GNU_SRC = GNU/GetOpt.cc GNU/GNURegex.cc
 GNU_HDR = GNU/GetOpt.h GNU/GNURegex.h
-GRAM_SRC = lex.das.cc das.tab.cc das.tab.hh lex.dds.cc dds.tab.cc	\
-	dds.tab.hh lex.ce_expr.cc ce_expr.tab.cc ce_expr.tab.hh		\
-	lex.Error.cc Error.tab.cc Error.tab.hh 
+BISON_SRC = das.tab.cc das.tab.hh dds.tab.cc	dds.tab.hh \
+	ce_expr.tab.cc ce_expr.tab.hh Error.tab.cc Error.tab.hh 
 
+FLEX_SRC = lex.das.cc lex.dds.cc lex.ce_expr.cc lex.Error.cc
 DAP_SRC = AttrTable.cc DAS.cc DDS.cc DataDDS.cc DDXParserSAX2.cc	\
 	BaseType.cc Byte.cc Int32.cc Float64.cc Str.cc Url.cc		\
 	Vector.cc Array.cc Structure.cc Sequence.cc Grid.cc UInt32.cc	\
@@ -1035,7 +1132,8 @@ DAP_SRC = AttrTable.cc DAS.cc DDS.cc DataDDS.cc DDXParserSAX2.cc	\
 	Operators.h XDRUtils.cc XDRFileMarshaller.cc			\
 	XDRStreamMarshaller.cc XDRFileUnMarshaller.cc			\
 	XDRStreamUnMarshaller.cc mime_util.cc Keywords2.cc XMLWriter.cc \
-	ServerFunctionsList.cc ServerFunction.cc DapXmlNamespaces.cc
+	ServerFunctionsList.cc ServerFunction.cc DapXmlNamespaces.cc \
+	MarshallerThread.cc
 
 DAP4_ONLY_SRC = D4StreamMarshaller.cc D4StreamUnMarshaller.cc Int64.cc \
         UInt64.cc Int8.cc D4ParserSax2.cc D4BaseTypeFactory.cc \
@@ -1065,7 +1163,7 @@ DAP_HDR = AttrTable.h DAS.h DDS.h DataDDS.h DDXParserSAX2.h		\
 	XDRStreamMarshaller.h XDRUtils.h xdr-datatypes.h mime_util.h	\
 	cgi_util.h XDRStreamUnMarshaller.h Keywords2.h XMLWriter.h \
 	ServerFunctionsList.h ServerFunction.h media_types.h \
-	DapXmlNamespaces.h parser-util.h
+	DapXmlNamespaces.h parser-util.h MarshallerThread.h
 
 DAP4_ONLY_HDR = D4StreamMarshaller.h D4StreamUnMarshaller.h Int64.h \
         UInt64.h Int8.h D4ParserSax2.h D4BaseTypeFactory.h \
@@ -1123,8 +1221,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then rm -f stamp-h1; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -1135,16 +1233,16 @@ $(srcdir)/config.h.in:  $(am__configure_deps)
 	touch $@
 
 dods-datatypes-config.h: stamp-h2
-	@if test ! -f $@; then rm -f stamp-h2; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h2; else :; fi
+	@test -f $@ || rm -f stamp-h2
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h2
 
 stamp-h2: $(srcdir)/dods-datatypes-config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h2
 	cd $(top_builddir) && $(SHELL) ./config.status dods-datatypes-config.h
 
 xdr-datatypes-config.h: stamp-h3
-	@if test ! -f $@; then rm -f stamp-h3; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h3; else :; fi
+	@test -f $@ || rm -f stamp-h3
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h3
 
 stamp-h3: $(srcdir)/xdr-datatypes-config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h3
@@ -1166,6 +1264,7 @@ abi_checker.xml: $(top_builddir)/config.status $(srcdir)/abi_checker.xml.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 dap-config: $(top_builddir)/config.status $(srcdir)/dap-config.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
+
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
 	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
@@ -1221,14 +1320,18 @@ GNU/libdap_la-GetOpt.lo: GNU/$(am__dirstamp) \
 	GNU/$(DEPDIR)/$(am__dirstamp)
 GNU/libdap_la-GNURegex.lo: GNU/$(am__dirstamp) \
 	GNU/$(DEPDIR)/$(am__dirstamp)
+
 libdap.la: $(libdap_la_OBJECTS) $(libdap_la_DEPENDENCIES) $(EXTRA_libdap_la_DEPENDENCIES) 
-	$(libdap_la_LINK) -rpath $(libdir) $(libdap_la_OBJECTS) $(libdap_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(libdap_la_LINK) -rpath $(libdir) $(libdap_la_OBJECTS) $(libdap_la_LIBADD) $(LIBS)
+
 libdapclient.la: $(libdapclient_la_OBJECTS) $(libdapclient_la_DEPENDENCIES) $(EXTRA_libdapclient_la_DEPENDENCIES) 
-	$(libdapclient_la_LINK) -rpath $(libdir) $(libdapclient_la_OBJECTS) $(libdapclient_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(libdapclient_la_LINK) -rpath $(libdir) $(libdapclient_la_OBJECTS) $(libdapclient_la_LIBADD) $(LIBS)
+
 libdapserver.la: $(libdapserver_la_OBJECTS) $(libdapserver_la_DEPENDENCIES) $(EXTRA_libdapserver_la_DEPENDENCIES) 
-	$(libdapserver_la_LINK) -rpath $(libdir) $(libdapserver_la_OBJECTS) $(libdapserver_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(libdapserver_la_LINK) -rpath $(libdir) $(libdapserver_la_OBJECTS) $(libdapserver_la_LIBADD) $(LIBS)
+
 libparsers.la: $(libparsers_la_OBJECTS) $(libparsers_la_DEPENDENCIES) $(EXTRA_libparsers_la_DEPENDENCIES) 
-	$(CXXLINK)  $(libparsers_la_OBJECTS) $(libparsers_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK)  $(libparsers_la_OBJECTS) $(libparsers_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
@@ -1238,10 +1341,12 @@ install-binPROGRAMS: $(bin_PROGRAMS)
 	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p || test -f $$p1; \
-	  then echo "$$p"; echo "$$p"; else :; fi; \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
 	done | \
-	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
 	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
 	sed 'N;N;N;s,\n, ,g' | \
 	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@@ -1262,7 +1367,8 @@ uninstall-binPROGRAMS:
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-	      -e 's/$$/$(EXEEXT)/' `; \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
 	test -n "$$list" || exit 0; \
 	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
 	cd "$(DESTDIR)$(bindir)" && rm -f $$files
@@ -1275,12 +1381,14 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
+
 getdap$(EXEEXT): $(getdap_OBJECTS) $(getdap_DEPENDENCIES) $(EXTRA_getdap_DEPENDENCIES) 
 	@rm -f getdap$(EXEEXT)
-	$(CXXLINK) $(getdap_OBJECTS) $(getdap_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(getdap_OBJECTS) $(getdap_LDADD) $(LIBS)
+
 getdap4$(EXEEXT): $(getdap4_OBJECTS) $(getdap4_DEPENDENCIES) $(EXTRA_getdap4_DEPENDENCIES) 
 	@rm -f getdap4$(EXEEXT)
-	$(CXXLINK) $(getdap4_OBJECTS) $(getdap4_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(getdap4_OBJECTS) $(getdap4_LDADD) $(LIBS)
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
@@ -1319,10 +1427,8 @@ uninstall-binSCRIPTS:
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
-	-rm -f GNU/libdap_la-GNURegex.$(OBJEXT)
-	-rm -f GNU/libdap_la-GNURegex.lo
-	-rm -f GNU/libdap_la-GetOpt.$(OBJEXT)
-	-rm -f GNU/libdap_la-GetOpt.lo
+	-rm -f GNU/*.$(OBJEXT)
+	-rm -f GNU/*.lo
 
 distclean-compile:
 	-rm -f *.tab.c
@@ -1370,6 +1476,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-Int8.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-InternalErr.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-Keywords2.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-MarshallerThread.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-RValue.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-Sequence.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libdap_la-ServerFunction.Plo at am__quote@
@@ -1415,654 +1522,661 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at GNU/$(DEPDIR)/libdap_la-GetOpt.Plo at am__quote@
 
 .c.o:
- at am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
- at am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
 @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .c.lo:
- at am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 libdap_la-xdrutil_ppc.lo: xdrutil_ppc.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdap_la-xdrutil_ppc.lo -MD -MP -MF $(DEPDIR)/libdap_la-xdrutil_ppc.Tpo -c -o libdap_la-xdrutil_ppc.lo `test -f 'xdrutil_ppc.c' || echo '$(srcdir)/'`xdrutil_ppc.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-xdrutil_ppc.Tpo $(DEPDIR)/libdap_la-xdrutil_ppc.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xdrutil_ppc.c' object='libdap_la-xdrutil_ppc.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdap_la-xdrutil_ppc.lo -MD -MP -MF $(DEPDIR)/libdap_la-xdrutil_ppc.Tpo -c -o libdap_la-xdrutil_ppc.lo `test -f 'xdrutil_ppc.c' || echo '$(srcdir)/'`xdrutil_ppc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-xdrutil_ppc.Tpo $(DEPDIR)/libdap_la-xdrutil_ppc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='xdrutil_ppc.c' object='libdap_la-xdrutil_ppc.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdap_la-xdrutil_ppc.lo `test -f 'xdrutil_ppc.c' || echo '$(srcdir)/'`xdrutil_ppc.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdap_la-xdrutil_ppc.lo `test -f 'xdrutil_ppc.c' || echo '$(srcdir)/'`xdrutil_ppc.c
 
 .cc.o:
- at am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
- at am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
 @am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
- at am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
 @am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 libdap_la-AttrTable.lo: AttrTable.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-AttrTable.lo -MD -MP -MF $(DEPDIR)/libdap_la-AttrTable.Tpo -c -o libdap_la-AttrTable.lo `test -f 'AttrTable.cc' || echo '$(srcdir)/'`AttrTable.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-AttrTable.Tpo $(DEPDIR)/libdap_la-AttrTable.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='AttrTable.cc' object='libdap_la-AttrTable.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-AttrTable.lo -MD -MP -MF $(DEPDIR)/libdap_la-AttrTable.Tpo -c -o libdap_la-AttrTable.lo `test -f 'AttrTable.cc' || echo '$(srcdir)/'`AttrTable.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-AttrTable.Tpo $(DEPDIR)/libdap_la-AttrTable.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='AttrTable.cc' object='libdap_la-AttrTable.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-AttrTable.lo `test -f 'AttrTable.cc' || echo '$(srcdir)/'`AttrTable.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-AttrTable.lo `test -f 'AttrTable.cc' || echo '$(srcdir)/'`AttrTable.cc
 
 libdap_la-DAS.lo: DAS.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DAS.lo -MD -MP -MF $(DEPDIR)/libdap_la-DAS.Tpo -c -o libdap_la-DAS.lo `test -f 'DAS.cc' || echo '$(srcdir)/'`DAS.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DAS.Tpo $(DEPDIR)/libdap_la-DAS.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DAS.cc' object='libdap_la-DAS.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DAS.lo -MD -MP -MF $(DEPDIR)/libdap_la-DAS.Tpo -c -o libdap_la-DAS.lo `test -f 'DAS.cc' || echo '$(srcdir)/'`DAS.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DAS.Tpo $(DEPDIR)/libdap_la-DAS.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DAS.cc' object='libdap_la-DAS.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DAS.lo `test -f 'DAS.cc' || echo '$(srcdir)/'`DAS.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DAS.lo `test -f 'DAS.cc' || echo '$(srcdir)/'`DAS.cc
 
 libdap_la-DDS.lo: DDS.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DDS.lo -MD -MP -MF $(DEPDIR)/libdap_la-DDS.Tpo -c -o libdap_la-DDS.lo `test -f 'DDS.cc' || echo '$(srcdir)/'`DDS.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DDS.Tpo $(DEPDIR)/libdap_la-DDS.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DDS.cc' object='libdap_la-DDS.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DDS.lo -MD -MP -MF $(DEPDIR)/libdap_la-DDS.Tpo -c -o libdap_la-DDS.lo `test -f 'DDS.cc' || echo '$(srcdir)/'`DDS.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DDS.Tpo $(DEPDIR)/libdap_la-DDS.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DDS.cc' object='libdap_la-DDS.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DDS.lo `test -f 'DDS.cc' || echo '$(srcdir)/'`DDS.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DDS.lo `test -f 'DDS.cc' || echo '$(srcdir)/'`DDS.cc
 
 libdap_la-DataDDS.lo: DataDDS.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DataDDS.lo -MD -MP -MF $(DEPDIR)/libdap_la-DataDDS.Tpo -c -o libdap_la-DataDDS.lo `test -f 'DataDDS.cc' || echo '$(srcdir)/'`DataDDS.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DataDDS.Tpo $(DEPDIR)/libdap_la-DataDDS.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DataDDS.cc' object='libdap_la-DataDDS.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DataDDS.lo -MD -MP -MF $(DEPDIR)/libdap_la-DataDDS.Tpo -c -o libdap_la-DataDDS.lo `test -f 'DataDDS.cc' || echo '$(srcdir)/'`DataDDS.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DataDDS.Tpo $(DEPDIR)/libdap_la-DataDDS.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DataDDS.cc' object='libdap_la-DataDDS.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DataDDS.lo `test -f 'DataDDS.cc' || echo '$(srcdir)/'`DataDDS.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DataDDS.lo `test -f 'DataDDS.cc' || echo '$(srcdir)/'`DataDDS.cc
 
 libdap_la-DDXParserSAX2.lo: DDXParserSAX2.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DDXParserSAX2.lo -MD -MP -MF $(DEPDIR)/libdap_la-DDXParserSAX2.Tpo -c -o libdap_la-DDXParserSAX2.lo `test -f 'DDXParserSAX2.cc' || echo '$(srcdir)/'`DDXParserSAX2.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DDXParserSAX2.Tpo $(DEPDIR)/libdap_la-DDXParserSAX2.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DDXParserSAX2.cc' object='libdap_la-DDXParserSAX2.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DDXParserSAX2.lo -MD -MP -MF $(DEPDIR)/libdap_la-DDXParserSAX2.Tpo -c -o libdap_la-DDXParserSAX2.lo `test -f 'DDXParserSAX2.cc' || echo '$(srcdir)/'`DDXParserSAX2.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DDXParserSAX2.Tpo $(DEPDIR)/libdap_la-DDXParserSAX2.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DDXParserSAX2.cc' object='libdap_la-DDXParserSAX2.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DDXParserSAX2.lo `test -f 'DDXParserSAX2.cc' || echo '$(srcdir)/'`DDXParserSAX2.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DDXParserSAX2.lo `test -f 'DDXParserSAX2.cc' || echo '$(srcdir)/'`DDXParserSAX2.cc
 
 libdap_la-BaseType.lo: BaseType.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-BaseType.lo -MD -MP -MF $(DEPDIR)/libdap_la-BaseType.Tpo -c -o libdap_la-BaseType.lo `test -f 'BaseType.cc' || echo '$(srcdir)/'`BaseType.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-BaseType.Tpo $(DEPDIR)/libdap_la-BaseType.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='BaseType.cc' object='libdap_la-BaseType.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-BaseType.lo -MD -MP -MF $(DEPDIR)/libdap_la-BaseType.Tpo -c -o libdap_la-BaseType.lo `test -f 'BaseType.cc' || echo '$(srcdir)/'`BaseType.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-BaseType.Tpo $(DEPDIR)/libdap_la-BaseType.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='BaseType.cc' object='libdap_la-BaseType.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-BaseType.lo `test -f 'BaseType.cc' || echo '$(srcdir)/'`BaseType.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-BaseType.lo `test -f 'BaseType.cc' || echo '$(srcdir)/'`BaseType.cc
 
 libdap_la-Byte.lo: Byte.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Byte.lo -MD -MP -MF $(DEPDIR)/libdap_la-Byte.Tpo -c -o libdap_la-Byte.lo `test -f 'Byte.cc' || echo '$(srcdir)/'`Byte.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Byte.Tpo $(DEPDIR)/libdap_la-Byte.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Byte.cc' object='libdap_la-Byte.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Byte.lo -MD -MP -MF $(DEPDIR)/libdap_la-Byte.Tpo -c -o libdap_la-Byte.lo `test -f 'Byte.cc' || echo '$(srcdir)/'`Byte.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Byte.Tpo $(DEPDIR)/libdap_la-Byte.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Byte.cc' object='libdap_la-Byte.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Byte.lo `test -f 'Byte.cc' || echo '$(srcdir)/'`Byte.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Byte.lo `test -f 'Byte.cc' || echo '$(srcdir)/'`Byte.cc
 
 libdap_la-Int32.lo: Int32.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int32.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int32.Tpo -c -o libdap_la-Int32.lo `test -f 'Int32.cc' || echo '$(srcdir)/'`Int32.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Int32.Tpo $(DEPDIR)/libdap_la-Int32.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Int32.cc' object='libdap_la-Int32.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int32.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int32.Tpo -c -o libdap_la-Int32.lo `test -f 'Int32.cc' || echo '$(srcdir)/'`Int32.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Int32.Tpo $(DEPDIR)/libdap_la-Int32.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Int32.cc' object='libdap_la-Int32.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int32.lo `test -f 'Int32.cc' || echo '$(srcdir)/'`Int32.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int32.lo `test -f 'Int32.cc' || echo '$(srcdir)/'`Int32.cc
 
 libdap_la-Float64.lo: Float64.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Float64.lo -MD -MP -MF $(DEPDIR)/libdap_la-Float64.Tpo -c -o libdap_la-Float64.lo `test -f 'Float64.cc' || echo '$(srcdir)/'`Float64.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Float64.Tpo $(DEPDIR)/libdap_la-Float64.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Float64.cc' object='libdap_la-Float64.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Float64.lo -MD -MP -MF $(DEPDIR)/libdap_la-Float64.Tpo -c -o libdap_la-Float64.lo `test -f 'Float64.cc' || echo '$(srcdir)/'`Float64.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Float64.Tpo $(DEPDIR)/libdap_la-Float64.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Float64.cc' object='libdap_la-Float64.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Float64.lo `test -f 'Float64.cc' || echo '$(srcdir)/'`Float64.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Float64.lo `test -f 'Float64.cc' || echo '$(srcdir)/'`Float64.cc
 
 libdap_la-Str.lo: Str.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Str.lo -MD -MP -MF $(DEPDIR)/libdap_la-Str.Tpo -c -o libdap_la-Str.lo `test -f 'Str.cc' || echo '$(srcdir)/'`Str.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Str.Tpo $(DEPDIR)/libdap_la-Str.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Str.cc' object='libdap_la-Str.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Str.lo -MD -MP -MF $(DEPDIR)/libdap_la-Str.Tpo -c -o libdap_la-Str.lo `test -f 'Str.cc' || echo '$(srcdir)/'`Str.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Str.Tpo $(DEPDIR)/libdap_la-Str.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Str.cc' object='libdap_la-Str.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Str.lo `test -f 'Str.cc' || echo '$(srcdir)/'`Str.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Str.lo `test -f 'Str.cc' || echo '$(srcdir)/'`Str.cc
 
 libdap_la-Url.lo: Url.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Url.lo -MD -MP -MF $(DEPDIR)/libdap_la-Url.Tpo -c -o libdap_la-Url.lo `test -f 'Url.cc' || echo '$(srcdir)/'`Url.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Url.Tpo $(DEPDIR)/libdap_la-Url.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Url.cc' object='libdap_la-Url.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Url.lo -MD -MP -MF $(DEPDIR)/libdap_la-Url.Tpo -c -o libdap_la-Url.lo `test -f 'Url.cc' || echo '$(srcdir)/'`Url.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Url.Tpo $(DEPDIR)/libdap_la-Url.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Url.cc' object='libdap_la-Url.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Url.lo `test -f 'Url.cc' || echo '$(srcdir)/'`Url.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Url.lo `test -f 'Url.cc' || echo '$(srcdir)/'`Url.cc
 
 libdap_la-Vector.lo: Vector.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Vector.lo -MD -MP -MF $(DEPDIR)/libdap_la-Vector.Tpo -c -o libdap_la-Vector.lo `test -f 'Vector.cc' || echo '$(srcdir)/'`Vector.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Vector.Tpo $(DEPDIR)/libdap_la-Vector.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Vector.cc' object='libdap_la-Vector.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Vector.lo -MD -MP -MF $(DEPDIR)/libdap_la-Vector.Tpo -c -o libdap_la-Vector.lo `test -f 'Vector.cc' || echo '$(srcdir)/'`Vector.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Vector.Tpo $(DEPDIR)/libdap_la-Vector.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Vector.cc' object='libdap_la-Vector.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Vector.lo `test -f 'Vector.cc' || echo '$(srcdir)/'`Vector.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Vector.lo `test -f 'Vector.cc' || echo '$(srcdir)/'`Vector.cc
 
 libdap_la-Array.lo: Array.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Array.lo -MD -MP -MF $(DEPDIR)/libdap_la-Array.Tpo -c -o libdap_la-Array.lo `test -f 'Array.cc' || echo '$(srcdir)/'`Array.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Array.Tpo $(DEPDIR)/libdap_la-Array.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Array.cc' object='libdap_la-Array.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Array.lo -MD -MP -MF $(DEPDIR)/libdap_la-Array.Tpo -c -o libdap_la-Array.lo `test -f 'Array.cc' || echo '$(srcdir)/'`Array.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Array.Tpo $(DEPDIR)/libdap_la-Array.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Array.cc' object='libdap_la-Array.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Array.lo `test -f 'Array.cc' || echo '$(srcdir)/'`Array.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Array.lo `test -f 'Array.cc' || echo '$(srcdir)/'`Array.cc
 
 libdap_la-Structure.lo: Structure.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Structure.lo -MD -MP -MF $(DEPDIR)/libdap_la-Structure.Tpo -c -o libdap_la-Structure.lo `test -f 'Structure.cc' || echo '$(srcdir)/'`Structure.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Structure.Tpo $(DEPDIR)/libdap_la-Structure.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Structure.cc' object='libdap_la-Structure.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Structure.lo -MD -MP -MF $(DEPDIR)/libdap_la-Structure.Tpo -c -o libdap_la-Structure.lo `test -f 'Structure.cc' || echo '$(srcdir)/'`Structure.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Structure.Tpo $(DEPDIR)/libdap_la-Structure.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Structure.cc' object='libdap_la-Structure.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Structure.lo `test -f 'Structure.cc' || echo '$(srcdir)/'`Structure.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Structure.lo `test -f 'Structure.cc' || echo '$(srcdir)/'`Structure.cc
 
 libdap_la-Sequence.lo: Sequence.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Sequence.lo -MD -MP -MF $(DEPDIR)/libdap_la-Sequence.Tpo -c -o libdap_la-Sequence.lo `test -f 'Sequence.cc' || echo '$(srcdir)/'`Sequence.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Sequence.Tpo $(DEPDIR)/libdap_la-Sequence.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Sequence.cc' object='libdap_la-Sequence.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Sequence.lo -MD -MP -MF $(DEPDIR)/libdap_la-Sequence.Tpo -c -o libdap_la-Sequence.lo `test -f 'Sequence.cc' || echo '$(srcdir)/'`Sequence.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Sequence.Tpo $(DEPDIR)/libdap_la-Sequence.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Sequence.cc' object='libdap_la-Sequence.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Sequence.lo `test -f 'Sequence.cc' || echo '$(srcdir)/'`Sequence.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Sequence.lo `test -f 'Sequence.cc' || echo '$(srcdir)/'`Sequence.cc
 
 libdap_la-Grid.lo: Grid.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Grid.lo -MD -MP -MF $(DEPDIR)/libdap_la-Grid.Tpo -c -o libdap_la-Grid.lo `test -f 'Grid.cc' || echo '$(srcdir)/'`Grid.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Grid.Tpo $(DEPDIR)/libdap_la-Grid.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Grid.cc' object='libdap_la-Grid.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Grid.lo -MD -MP -MF $(DEPDIR)/libdap_la-Grid.Tpo -c -o libdap_la-Grid.lo `test -f 'Grid.cc' || echo '$(srcdir)/'`Grid.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Grid.Tpo $(DEPDIR)/libdap_la-Grid.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Grid.cc' object='libdap_la-Grid.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Grid.lo `test -f 'Grid.cc' || echo '$(srcdir)/'`Grid.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Grid.lo `test -f 'Grid.cc' || echo '$(srcdir)/'`Grid.cc
 
 libdap_la-UInt32.lo: UInt32.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-UInt32.lo -MD -MP -MF $(DEPDIR)/libdap_la-UInt32.Tpo -c -o libdap_la-UInt32.lo `test -f 'UInt32.cc' || echo '$(srcdir)/'`UInt32.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-UInt32.Tpo $(DEPDIR)/libdap_la-UInt32.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='UInt32.cc' object='libdap_la-UInt32.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-UInt32.lo -MD -MP -MF $(DEPDIR)/libdap_la-UInt32.Tpo -c -o libdap_la-UInt32.lo `test -f 'UInt32.cc' || echo '$(srcdir)/'`UInt32.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-UInt32.Tpo $(DEPDIR)/libdap_la-UInt32.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='UInt32.cc' object='libdap_la-UInt32.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-UInt32.lo `test -f 'UInt32.cc' || echo '$(srcdir)/'`UInt32.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-UInt32.lo `test -f 'UInt32.cc' || echo '$(srcdir)/'`UInt32.cc
 
 libdap_la-Int16.lo: Int16.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int16.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int16.Tpo -c -o libdap_la-Int16.lo `test -f 'Int16.cc' || echo '$(srcdir)/'`Int16.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Int16.Tpo $(DEPDIR)/libdap_la-Int16.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Int16.cc' object='libdap_la-Int16.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int16.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int16.Tpo -c -o libdap_la-Int16.lo `test -f 'Int16.cc' || echo '$(srcdir)/'`Int16.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Int16.Tpo $(DEPDIR)/libdap_la-Int16.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Int16.cc' object='libdap_la-Int16.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int16.lo `test -f 'Int16.cc' || echo '$(srcdir)/'`Int16.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int16.lo `test -f 'Int16.cc' || echo '$(srcdir)/'`Int16.cc
 
 libdap_la-UInt16.lo: UInt16.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-UInt16.lo -MD -MP -MF $(DEPDIR)/libdap_la-UInt16.Tpo -c -o libdap_la-UInt16.lo `test -f 'UInt16.cc' || echo '$(srcdir)/'`UInt16.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-UInt16.Tpo $(DEPDIR)/libdap_la-UInt16.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='UInt16.cc' object='libdap_la-UInt16.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-UInt16.lo -MD -MP -MF $(DEPDIR)/libdap_la-UInt16.Tpo -c -o libdap_la-UInt16.lo `test -f 'UInt16.cc' || echo '$(srcdir)/'`UInt16.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-UInt16.Tpo $(DEPDIR)/libdap_la-UInt16.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='UInt16.cc' object='libdap_la-UInt16.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-UInt16.lo `test -f 'UInt16.cc' || echo '$(srcdir)/'`UInt16.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-UInt16.lo `test -f 'UInt16.cc' || echo '$(srcdir)/'`UInt16.cc
 
 libdap_la-Float32.lo: Float32.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Float32.lo -MD -MP -MF $(DEPDIR)/libdap_la-Float32.Tpo -c -o libdap_la-Float32.lo `test -f 'Float32.cc' || echo '$(srcdir)/'`Float32.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Float32.Tpo $(DEPDIR)/libdap_la-Float32.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Float32.cc' object='libdap_la-Float32.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Float32.lo -MD -MP -MF $(DEPDIR)/libdap_la-Float32.Tpo -c -o libdap_la-Float32.lo `test -f 'Float32.cc' || echo '$(srcdir)/'`Float32.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Float32.Tpo $(DEPDIR)/libdap_la-Float32.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Float32.cc' object='libdap_la-Float32.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Float32.lo `test -f 'Float32.cc' || echo '$(srcdir)/'`Float32.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Float32.lo `test -f 'Float32.cc' || echo '$(srcdir)/'`Float32.cc
 
 libdap_la-Constructor.lo: Constructor.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Constructor.lo -MD -MP -MF $(DEPDIR)/libdap_la-Constructor.Tpo -c -o libdap_la-Constructor.lo `test -f 'Constructor.cc' || echo '$(srcdir)/'`Constructor.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Constructor.Tpo $(DEPDIR)/libdap_la-Constructor.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Constructor.cc' object='libdap_la-Constructor.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Constructor.lo -MD -MP -MF $(DEPDIR)/libdap_la-Constructor.Tpo -c -o libdap_la-Constructor.lo `test -f 'Constructor.cc' || echo '$(srcdir)/'`Constructor.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Constructor.Tpo $(DEPDIR)/libdap_la-Constructor.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Constructor.cc' object='libdap_la-Constructor.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Constructor.lo `test -f 'Constructor.cc' || echo '$(srcdir)/'`Constructor.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Constructor.lo `test -f 'Constructor.cc' || echo '$(srcdir)/'`Constructor.cc
 
 libdap_la-BaseTypeFactory.lo: BaseTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-BaseTypeFactory.lo -MD -MP -MF $(DEPDIR)/libdap_la-BaseTypeFactory.Tpo -c -o libdap_la-BaseTypeFactory.lo `test -f 'BaseTypeFactory.cc' || echo '$(srcdir)/'`BaseTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-BaseTypeFactory.Tpo $(DEPDIR)/libdap_la-BaseTypeFactory.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='BaseTypeFactory.cc' object='libdap_la-BaseTypeFactory.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-BaseTypeFactory.lo -MD -MP -MF $(DEPDIR)/libdap_la-BaseTypeFactory.Tpo -c -o libdap_la-BaseTypeFactory.lo `test -f 'BaseTypeFactory.cc' || echo '$(srcdir)/'`BaseTypeFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-BaseTypeFactory.Tpo $(DEPDIR)/libdap_la-BaseTypeFactory.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='BaseTypeFactory.cc' object='libdap_la-BaseTypeFactory.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-BaseTypeFactory.lo `test -f 'BaseTypeFactory.cc' || echo '$(srcdir)/'`BaseTypeFactory.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-BaseTypeFactory.lo `test -f 'BaseTypeFactory.cc' || echo '$(srcdir)/'`BaseTypeFactory.cc
 
 libdap_la-SignalHandler.lo: SignalHandler.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-SignalHandler.lo -MD -MP -MF $(DEPDIR)/libdap_la-SignalHandler.Tpo -c -o libdap_la-SignalHandler.lo `test -f 'SignalHandler.cc' || echo '$(srcdir)/'`SignalHandler.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-SignalHandler.Tpo $(DEPDIR)/libdap_la-SignalHandler.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SignalHandler.cc' object='libdap_la-SignalHandler.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-SignalHandler.lo -MD -MP -MF $(DEPDIR)/libdap_la-SignalHandler.Tpo -c -o libdap_la-SignalHandler.lo `test -f 'SignalHandler.cc' || echo '$(srcdir)/'`SignalHandler.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-SignalHandler.Tpo $(DEPDIR)/libdap_la-SignalHandler.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SignalHandler.cc' object='libdap_la-SignalHandler.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-SignalHandler.lo `test -f 'SignalHandler.cc' || echo '$(srcdir)/'`SignalHandler.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-SignalHandler.lo `test -f 'SignalHandler.cc' || echo '$(srcdir)/'`SignalHandler.cc
 
 libdap_la-Error.lo: Error.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Error.lo -MD -MP -MF $(DEPDIR)/libdap_la-Error.Tpo -c -o libdap_la-Error.lo `test -f 'Error.cc' || echo '$(srcdir)/'`Error.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Error.Tpo $(DEPDIR)/libdap_la-Error.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Error.cc' object='libdap_la-Error.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Error.lo -MD -MP -MF $(DEPDIR)/libdap_la-Error.Tpo -c -o libdap_la-Error.lo `test -f 'Error.cc' || echo '$(srcdir)/'`Error.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Error.Tpo $(DEPDIR)/libdap_la-Error.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Error.cc' object='libdap_la-Error.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Error.lo `test -f 'Error.cc' || echo '$(srcdir)/'`Error.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Error.lo `test -f 'Error.cc' || echo '$(srcdir)/'`Error.cc
 
 libdap_la-InternalErr.lo: InternalErr.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-InternalErr.lo -MD -MP -MF $(DEPDIR)/libdap_la-InternalErr.Tpo -c -o libdap_la-InternalErr.lo `test -f 'InternalErr.cc' || echo '$(srcdir)/'`InternalErr.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-InternalErr.Tpo $(DEPDIR)/libdap_la-InternalErr.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='InternalErr.cc' object='libdap_la-InternalErr.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-InternalErr.lo -MD -MP -MF $(DEPDIR)/libdap_la-InternalErr.Tpo -c -o libdap_la-InternalErr.lo `test -f 'InternalErr.cc' || echo '$(srcdir)/'`InternalErr.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-InternalErr.Tpo $(DEPDIR)/libdap_la-InternalErr.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='InternalErr.cc' object='libdap_la-InternalErr.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-InternalErr.lo `test -f 'InternalErr.cc' || echo '$(srcdir)/'`InternalErr.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-InternalErr.lo `test -f 'InternalErr.cc' || echo '$(srcdir)/'`InternalErr.cc
 
 libdap_la-util.lo: util.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-util.lo -MD -MP -MF $(DEPDIR)/libdap_la-util.Tpo -c -o libdap_la-util.lo `test -f 'util.cc' || echo '$(srcdir)/'`util.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-util.Tpo $(DEPDIR)/libdap_la-util.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util.cc' object='libdap_la-util.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-util.lo -MD -MP -MF $(DEPDIR)/libdap_la-util.Tpo -c -o libdap_la-util.lo `test -f 'util.cc' || echo '$(srcdir)/'`util.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-util.Tpo $(DEPDIR)/libdap_la-util.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='util.cc' object='libdap_la-util.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-util.lo `test -f 'util.cc' || echo '$(srcdir)/'`util.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-util.lo `test -f 'util.cc' || echo '$(srcdir)/'`util.cc
 
 libdap_la-parser-util.lo: parser-util.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-parser-util.lo -MD -MP -MF $(DEPDIR)/libdap_la-parser-util.Tpo -c -o libdap_la-parser-util.lo `test -f 'parser-util.cc' || echo '$(srcdir)/'`parser-util.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-parser-util.Tpo $(DEPDIR)/libdap_la-parser-util.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='parser-util.cc' object='libdap_la-parser-util.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-parser-util.lo -MD -MP -MF $(DEPDIR)/libdap_la-parser-util.Tpo -c -o libdap_la-parser-util.lo `test -f 'parser-util.cc' || echo '$(srcdir)/'`parser-util.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-parser-util.Tpo $(DEPDIR)/libdap_la-parser-util.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='parser-util.cc' object='libdap_la-parser-util.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-parser-util.lo `test -f 'parser-util.cc' || echo '$(srcdir)/'`parser-util.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-parser-util.lo `test -f 'parser-util.cc' || echo '$(srcdir)/'`parser-util.cc
 
 libdap_la-escaping.lo: escaping.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-escaping.lo -MD -MP -MF $(DEPDIR)/libdap_la-escaping.Tpo -c -o libdap_la-escaping.lo `test -f 'escaping.cc' || echo '$(srcdir)/'`escaping.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-escaping.Tpo $(DEPDIR)/libdap_la-escaping.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='escaping.cc' object='libdap_la-escaping.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-escaping.lo -MD -MP -MF $(DEPDIR)/libdap_la-escaping.Tpo -c -o libdap_la-escaping.lo `test -f 'escaping.cc' || echo '$(srcdir)/'`escaping.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-escaping.Tpo $(DEPDIR)/libdap_la-escaping.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='escaping.cc' object='libdap_la-escaping.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-escaping.lo `test -f 'escaping.cc' || echo '$(srcdir)/'`escaping.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-escaping.lo `test -f 'escaping.cc' || echo '$(srcdir)/'`escaping.cc
 
 libdap_la-Clause.lo: Clause.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Clause.lo -MD -MP -MF $(DEPDIR)/libdap_la-Clause.Tpo -c -o libdap_la-Clause.lo `test -f 'Clause.cc' || echo '$(srcdir)/'`Clause.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Clause.Tpo $(DEPDIR)/libdap_la-Clause.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Clause.cc' object='libdap_la-Clause.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Clause.lo -MD -MP -MF $(DEPDIR)/libdap_la-Clause.Tpo -c -o libdap_la-Clause.lo `test -f 'Clause.cc' || echo '$(srcdir)/'`Clause.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Clause.Tpo $(DEPDIR)/libdap_la-Clause.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Clause.cc' object='libdap_la-Clause.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Clause.lo `test -f 'Clause.cc' || echo '$(srcdir)/'`Clause.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Clause.lo `test -f 'Clause.cc' || echo '$(srcdir)/'`Clause.cc
 
 libdap_la-RValue.lo: RValue.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-RValue.lo -MD -MP -MF $(DEPDIR)/libdap_la-RValue.Tpo -c -o libdap_la-RValue.lo `test -f 'RValue.cc' || echo '$(srcdir)/'`RValue.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-RValue.Tpo $(DEPDIR)/libdap_la-RValue.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RValue.cc' object='libdap_la-RValue.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-RValue.lo -MD -MP -MF $(DEPDIR)/libdap_la-RValue.Tpo -c -o libdap_la-RValue.lo `test -f 'RValue.cc' || echo '$(srcdir)/'`RValue.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-RValue.Tpo $(DEPDIR)/libdap_la-RValue.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='RValue.cc' object='libdap_la-RValue.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-RValue.lo `test -f 'RValue.cc' || echo '$(srcdir)/'`RValue.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-RValue.lo `test -f 'RValue.cc' || echo '$(srcdir)/'`RValue.cc
 
 libdap_la-ConstraintEvaluator.lo: ConstraintEvaluator.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-ConstraintEvaluator.lo -MD -MP -MF $(DEPDIR)/libdap_la-ConstraintEvaluator.Tpo -c -o libdap_la-ConstraintEvaluator.lo `test -f 'ConstraintEvaluator.cc' || echo '$(srcdir)/'`ConstraintEvaluator.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-ConstraintEvaluator.Tpo $(DEPDIR)/libdap_la-ConstraintEvaluator.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ConstraintEvaluator.cc' object='libdap_la-ConstraintEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-ConstraintEvaluator.lo -MD -MP -MF $(DEPDIR)/libdap_la-ConstraintEvaluator.Tpo -c -o libdap_la-ConstraintEvaluator.lo `test -f 'ConstraintEvaluator.cc' || echo '$(srcdir)/'`ConstraintEvaluator.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-ConstraintEvaluator.Tpo $(DEPDIR)/libdap_la-ConstraintEvaluator.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ConstraintEvaluator.cc' object='libdap_la-ConstraintEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-ConstraintEvaluator.lo `test -f 'ConstraintEvaluator.cc' || echo '$(srcdir)/'`ConstraintEvaluator.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-ConstraintEvaluator.lo `test -f 'ConstraintEvaluator.cc' || echo '$(srcdir)/'`ConstraintEvaluator.cc
 
 libdap_la-DapIndent.lo: DapIndent.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DapIndent.lo -MD -MP -MF $(DEPDIR)/libdap_la-DapIndent.Tpo -c -o libdap_la-DapIndent.lo `test -f 'DapIndent.cc' || echo '$(srcdir)/'`DapIndent.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DapIndent.Tpo $(DEPDIR)/libdap_la-DapIndent.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DapIndent.cc' object='libdap_la-DapIndent.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DapIndent.lo -MD -MP -MF $(DEPDIR)/libdap_la-DapIndent.Tpo -c -o libdap_la-DapIndent.lo `test -f 'DapIndent.cc' || echo '$(srcdir)/'`DapIndent.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DapIndent.Tpo $(DEPDIR)/libdap_la-DapIndent.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DapIndent.cc' object='libdap_la-DapIndent.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DapIndent.lo `test -f 'DapIndent.cc' || echo '$(srcdir)/'`DapIndent.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DapIndent.lo `test -f 'DapIndent.cc' || echo '$(srcdir)/'`DapIndent.cc
 
 libdap_la-XDRUtils.lo: XDRUtils.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRUtils.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRUtils.Tpo -c -o libdap_la-XDRUtils.lo `test -f 'XDRUtils.cc' || echo '$(srcdir)/'`XDRUtils.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-XDRUtils.Tpo $(DEPDIR)/libdap_la-XDRUtils.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XDRUtils.cc' object='libdap_la-XDRUtils.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRUtils.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRUtils.Tpo -c -o libdap_la-XDRUtils.lo `test -f 'XDRUtils.cc' || echo '$(srcdir)/'`XDRUtils.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-XDRUtils.Tpo $(DEPDIR)/libdap_la-XDRUtils.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='XDRUtils.cc' object='libdap_la-XDRUtils.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRUtils.lo `test -f 'XDRUtils.cc' || echo '$(srcdir)/'`XDRUtils.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRUtils.lo `test -f 'XDRUtils.cc' || echo '$(srcdir)/'`XDRUtils.cc
 
 libdap_la-XDRFileMarshaller.lo: XDRFileMarshaller.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRFileMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRFileMarshaller.Tpo -c -o libdap_la-XDRFileMarshaller.lo `test -f 'XDRFileMarshaller.cc' || echo '$(srcdir)/'`XDRFileMarshaller.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-XDRFileMarshaller.Tpo $(DEPDIR)/libdap_la-XDRFileMarshaller.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XDRFileMarshaller.cc' object='libdap_la-XDRFileMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRFileMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRFileMarshaller.Tpo -c -o libdap_la-XDRFileMarshaller.lo `test -f 'XDRFileMarshaller.cc' || echo '$(srcdir)/'`XDRFileMarshaller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-XDRFileMarshaller.Tpo $(DEPDIR)/libdap_la-XDRFileMarshaller.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='XDRFileMarshaller.cc' object='libdap_la-XDRFileMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRFileMarshaller.lo `test -f 'XDRFileMarshaller.cc' || echo '$(srcdir)/'`XDRFileMarshaller.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRFileMarshaller.lo `test -f 'XDRFileMarshaller.cc' || echo '$(srcdir)/'`XDRFileMarshaller.cc
 
 libdap_la-XDRStreamMarshaller.lo: XDRStreamMarshaller.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRStreamMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRStreamMarshaller.Tpo -c -o libdap_la-XDRStreamMarshaller.lo `test -f 'XDRStreamMarshaller.cc' || echo '$(srcdir)/'`XDRStreamMarshaller.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-XDRStreamMarshaller.Tpo $(DEPDIR)/libdap_la-XDRStreamMarshaller.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XDRStreamMarshaller.cc' object='libdap_la-XDRStreamMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRStreamMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRStreamMarshaller.Tpo -c -o libdap_la-XDRStreamMarshaller.lo `test -f 'XDRStreamMarshaller.cc' || echo '$(srcdir)/'`XDRStreamMarshaller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-XDRStreamMarshaller.Tpo $(DEPDIR)/libdap_la-XDRStreamMarshaller.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='XDRStreamMarshaller.cc' object='libdap_la-XDRStreamMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRStreamMarshaller.lo `test -f 'XDRStreamMarshaller.cc' || echo '$(srcdir)/'`XDRStreamMarshaller.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRStreamMarshaller.lo `test -f 'XDRStreamMarshaller.cc' || echo '$(srcdir)/'`XDRStreamMarshaller.cc
 
 libdap_la-XDRFileUnMarshaller.lo: XDRFileUnMarshaller.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRFileUnMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRFileUnMarshaller.Tpo -c -o libdap_la-XDRFileUnMarshaller.lo `test -f 'XDRFileUnMarshaller.cc' || echo '$(srcdir)/'`XDRFileUnMarshaller.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-XDRFileUnMarshaller.Tpo $(DEPDIR)/libdap_la-XDRFileUnMarshaller.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XDRFileUnMarshaller.cc' object='libdap_la-XDRFileUnMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRFileUnMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRFileUnMarshaller.Tpo -c -o libdap_la-XDRFileUnMarshaller.lo `test -f 'XDRFileUnMarshaller.cc' || echo '$(srcdir)/'`XDRFileUnMarshaller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-XDRFileUnMarshaller.Tpo $(DEPDIR)/libdap_la-XDRFileUnMarshaller.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='XDRFileUnMarshaller.cc' object='libdap_la-XDRFileUnMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRFileUnMarshaller.lo `test -f 'XDRFileUnMarshaller.cc' || echo '$(srcdir)/'`XDRFileUnMarshaller.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRFileUnMarshaller.lo `test -f 'XDRFileUnMarshaller.cc' || echo '$(srcdir)/'`XDRFileUnMarshaller.cc
 
 libdap_la-XDRStreamUnMarshaller.lo: XDRStreamUnMarshaller.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRStreamUnMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRStreamUnMarshaller.Tpo -c -o libdap_la-XDRStreamUnMarshaller.lo `test -f 'XDRStreamUnMarshaller.cc' || echo '$(srcdir)/'`XDRStreamUnMarshaller.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-XDRStreamUnMarshaller.Tpo $(DEPDIR)/libdap_la-XDRStreamUnMarshaller.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XDRStreamUnMarshaller.cc' object='libdap_la-XDRStreamUnMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XDRStreamUnMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-XDRStreamUnMarshaller.Tpo -c -o libdap_la-XDRStreamUnMarshaller.lo `test -f 'XDRStreamUnMarshaller.cc' || echo '$(srcdir)/'`XDRStreamUnMarshaller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-XDRStreamUnMarshaller.Tpo $(DEPDIR)/libdap_la-XDRStreamUnMarshaller.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='XDRStreamUnMarshaller.cc' object='libdap_la-XDRStreamUnMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRStreamUnMarshaller.lo `test -f 'XDRStreamUnMarshaller.cc' || echo '$(srcdir)/'`XDRStreamUnMarshaller.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XDRStreamUnMarshaller.lo `test -f 'XDRStreamUnMarshaller.cc' || echo '$(srcdir)/'`XDRStreamUnMarshaller.cc
 
 libdap_la-mime_util.lo: mime_util.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-mime_util.lo -MD -MP -MF $(DEPDIR)/libdap_la-mime_util.Tpo -c -o libdap_la-mime_util.lo `test -f 'mime_util.cc' || echo '$(srcdir)/'`mime_util.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-mime_util.Tpo $(DEPDIR)/libdap_la-mime_util.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='mime_util.cc' object='libdap_la-mime_util.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-mime_util.lo -MD -MP -MF $(DEPDIR)/libdap_la-mime_util.Tpo -c -o libdap_la-mime_util.lo `test -f 'mime_util.cc' || echo '$(srcdir)/'`mime_util.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-mime_util.Tpo $(DEPDIR)/libdap_la-mime_util.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='mime_util.cc' object='libdap_la-mime_util.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-mime_util.lo `test -f 'mime_util.cc' || echo '$(srcdir)/'`mime_util.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-mime_util.lo `test -f 'mime_util.cc' || echo '$(srcdir)/'`mime_util.cc
 
 libdap_la-Keywords2.lo: Keywords2.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Keywords2.lo -MD -MP -MF $(DEPDIR)/libdap_la-Keywords2.Tpo -c -o libdap_la-Keywords2.lo `test -f 'Keywords2.cc' || echo '$(srcdir)/'`Keywords2.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Keywords2.Tpo $(DEPDIR)/libdap_la-Keywords2.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Keywords2.cc' object='libdap_la-Keywords2.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Keywords2.lo -MD -MP -MF $(DEPDIR)/libdap_la-Keywords2.Tpo -c -o libdap_la-Keywords2.lo `test -f 'Keywords2.cc' || echo '$(srcdir)/'`Keywords2.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Keywords2.Tpo $(DEPDIR)/libdap_la-Keywords2.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Keywords2.cc' object='libdap_la-Keywords2.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Keywords2.lo `test -f 'Keywords2.cc' || echo '$(srcdir)/'`Keywords2.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Keywords2.lo `test -f 'Keywords2.cc' || echo '$(srcdir)/'`Keywords2.cc
 
 libdap_la-XMLWriter.lo: XMLWriter.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XMLWriter.lo -MD -MP -MF $(DEPDIR)/libdap_la-XMLWriter.Tpo -c -o libdap_la-XMLWriter.lo `test -f 'XMLWriter.cc' || echo '$(srcdir)/'`XMLWriter.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-XMLWriter.Tpo $(DEPDIR)/libdap_la-XMLWriter.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='XMLWriter.cc' object='libdap_la-XMLWriter.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-XMLWriter.lo -MD -MP -MF $(DEPDIR)/libdap_la-XMLWriter.Tpo -c -o libdap_la-XMLWriter.lo `test -f 'XMLWriter.cc' || echo '$(srcdir)/'`XMLWriter.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-XMLWriter.Tpo $(DEPDIR)/libdap_la-XMLWriter.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='XMLWriter.cc' object='libdap_la-XMLWriter.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XMLWriter.lo `test -f 'XMLWriter.cc' || echo '$(srcdir)/'`XMLWriter.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-XMLWriter.lo `test -f 'XMLWriter.cc' || echo '$(srcdir)/'`XMLWriter.cc
 
 libdap_la-ServerFunctionsList.lo: ServerFunctionsList.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-ServerFunctionsList.lo -MD -MP -MF $(DEPDIR)/libdap_la-ServerFunctionsList.Tpo -c -o libdap_la-ServerFunctionsList.lo `test -f 'ServerFunctionsList.cc' || echo '$(srcdir)/'`ServerFunctionsList.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-ServerFunctionsList.Tpo $(DEPDIR)/libdap_la-ServerFunctionsList.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ServerFunctionsList.cc' object='libdap_la-ServerFunctionsList.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-ServerFunctionsList.lo -MD -MP -MF $(DEPDIR)/libdap_la-ServerFunctionsList.Tpo -c -o libdap_la-ServerFunctionsList.lo `test -f 'ServerFunctionsList.cc' || echo '$(srcdir)/'`ServerFunctionsList.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-ServerFunctionsList.Tpo $(DEPDIR)/libdap_la-ServerFunctionsList.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ServerFunctionsList.cc' object='libdap_la-ServerFunctionsList.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-ServerFunctionsList.lo `test -f 'ServerFunctionsList.cc' || echo '$(srcdir)/'`ServerFunctionsList.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-ServerFunctionsList.lo `test -f 'ServerFunctionsList.cc' || echo '$(srcdir)/'`ServerFunctionsList.cc
 
 libdap_la-ServerFunction.lo: ServerFunction.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-ServerFunction.lo -MD -MP -MF $(DEPDIR)/libdap_la-ServerFunction.Tpo -c -o libdap_la-ServerFunction.lo `test -f 'ServerFunction.cc' || echo '$(srcdir)/'`ServerFunction.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-ServerFunction.Tpo $(DEPDIR)/libdap_la-ServerFunction.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ServerFunction.cc' object='libdap_la-ServerFunction.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-ServerFunction.lo -MD -MP -MF $(DEPDIR)/libdap_la-ServerFunction.Tpo -c -o libdap_la-ServerFunction.lo `test -f 'ServerFunction.cc' || echo '$(srcdir)/'`ServerFunction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-ServerFunction.Tpo $(DEPDIR)/libdap_la-ServerFunction.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ServerFunction.cc' object='libdap_la-ServerFunction.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-ServerFunction.lo `test -f 'ServerFunction.cc' || echo '$(srcdir)/'`ServerFunction.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-ServerFunction.lo `test -f 'ServerFunction.cc' || echo '$(srcdir)/'`ServerFunction.cc
 
 libdap_la-DapXmlNamespaces.lo: DapXmlNamespaces.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DapXmlNamespaces.lo -MD -MP -MF $(DEPDIR)/libdap_la-DapXmlNamespaces.Tpo -c -o libdap_la-DapXmlNamespaces.lo `test -f 'DapXmlNamespaces.cc' || echo '$(srcdir)/'`DapXmlNamespaces.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DapXmlNamespaces.Tpo $(DEPDIR)/libdap_la-DapXmlNamespaces.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DapXmlNamespaces.cc' object='libdap_la-DapXmlNamespaces.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DapXmlNamespaces.lo -MD -MP -MF $(DEPDIR)/libdap_la-DapXmlNamespaces.Tpo -c -o libdap_la-DapXmlNamespaces.lo `test -f 'DapXmlNamespaces.cc' || echo '$(srcdir)/'`DapXmlNamespaces.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DapXmlNamespaces.Tpo $(DEPDIR)/libdap_la-DapXmlNamespaces.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DapXmlNamespaces.cc' object='libdap_la-DapXmlNamespaces.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DapXmlNamespaces.lo `test -f 'DapXmlNamespaces.cc' || echo '$(srcdir)/'`DapXmlNamespaces.cc
+
+libdap_la-MarshallerThread.lo: MarshallerThread.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-MarshallerThread.lo -MD -MP -MF $(DEPDIR)/libdap_la-MarshallerThread.Tpo -c -o libdap_la-MarshallerThread.lo `test -f 'MarshallerThread.cc' || echo '$(srcdir)/'`MarshallerThread.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-MarshallerThread.Tpo $(DEPDIR)/libdap_la-MarshallerThread.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='MarshallerThread.cc' object='libdap_la-MarshallerThread.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DapXmlNamespaces.lo `test -f 'DapXmlNamespaces.cc' || echo '$(srcdir)/'`DapXmlNamespaces.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-MarshallerThread.lo `test -f 'MarshallerThread.cc' || echo '$(srcdir)/'`MarshallerThread.cc
 
 GNU/libdap_la-GetOpt.lo: GNU/GetOpt.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GNU/libdap_la-GetOpt.lo -MD -MP -MF GNU/$(DEPDIR)/libdap_la-GetOpt.Tpo -c -o GNU/libdap_la-GetOpt.lo `test -f 'GNU/GetOpt.cc' || echo '$(srcdir)/'`GNU/GetOpt.cc
- at am__fastdepCXX_TRUE@	$(am__mv) GNU/$(DEPDIR)/libdap_la-GetOpt.Tpo GNU/$(DEPDIR)/libdap_la-GetOpt.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='GNU/GetOpt.cc' object='GNU/libdap_la-GetOpt.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GNU/libdap_la-GetOpt.lo -MD -MP -MF GNU/$(DEPDIR)/libdap_la-GetOpt.Tpo -c -o GNU/libdap_la-GetOpt.lo `test -f 'GNU/GetOpt.cc' || echo '$(srcdir)/'`GNU/GetOpt.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GNU/$(DEPDIR)/libdap_la-GetOpt.Tpo GNU/$(DEPDIR)/libdap_la-GetOpt.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GNU/GetOpt.cc' object='GNU/libdap_la-GetOpt.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GNU/libdap_la-GetOpt.lo `test -f 'GNU/GetOpt.cc' || echo '$(srcdir)/'`GNU/GetOpt.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GNU/libdap_la-GetOpt.lo `test -f 'GNU/GetOpt.cc' || echo '$(srcdir)/'`GNU/GetOpt.cc
 
 GNU/libdap_la-GNURegex.lo: GNU/GNURegex.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GNU/libdap_la-GNURegex.lo -MD -MP -MF GNU/$(DEPDIR)/libdap_la-GNURegex.Tpo -c -o GNU/libdap_la-GNURegex.lo `test -f 'GNU/GNURegex.cc' || echo '$(srcdir)/'`GNU/GNURegex.cc
- at am__fastdepCXX_TRUE@	$(am__mv) GNU/$(DEPDIR)/libdap_la-GNURegex.Tpo GNU/$(DEPDIR)/libdap_la-GNURegex.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='GNU/GNURegex.cc' object='GNU/libdap_la-GNURegex.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GNU/libdap_la-GNURegex.lo -MD -MP -MF GNU/$(DEPDIR)/libdap_la-GNURegex.Tpo -c -o GNU/libdap_la-GNURegex.lo `test -f 'GNU/GNURegex.cc' || echo '$(srcdir)/'`GNU/GNURegex.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GNU/$(DEPDIR)/libdap_la-GNURegex.Tpo GNU/$(DEPDIR)/libdap_la-GNURegex.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GNU/GNURegex.cc' object='GNU/libdap_la-GNURegex.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GNU/libdap_la-GNURegex.lo `test -f 'GNU/GNURegex.cc' || echo '$(srcdir)/'`GNU/GNURegex.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GNU/libdap_la-GNURegex.lo `test -f 'GNU/GNURegex.cc' || echo '$(srcdir)/'`GNU/GNURegex.cc
 
 libdap_la-D4StreamMarshaller.lo: D4StreamMarshaller.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4StreamMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4StreamMarshaller.Tpo -c -o libdap_la-D4StreamMarshaller.lo `test -f 'D4StreamMarshaller.cc' || echo '$(srcdir)/'`D4StreamMarshaller.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4StreamMarshaller.Tpo $(DEPDIR)/libdap_la-D4StreamMarshaller.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4StreamMarshaller.cc' object='libdap_la-D4StreamMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4StreamMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4StreamMarshaller.Tpo -c -o libdap_la-D4StreamMarshaller.lo `test -f 'D4StreamMarshaller.cc' || echo '$(srcdir)/'`D4StreamMarshaller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4StreamMarshaller.Tpo $(DEPDIR)/libdap_la-D4StreamMarshaller.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4StreamMarshaller.cc' object='libdap_la-D4StreamMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4StreamMarshaller.lo `test -f 'D4StreamMarshaller.cc' || echo '$(srcdir)/'`D4StreamMarshaller.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4StreamMarshaller.lo `test -f 'D4StreamMarshaller.cc' || echo '$(srcdir)/'`D4StreamMarshaller.cc
 
 libdap_la-D4StreamUnMarshaller.lo: D4StreamUnMarshaller.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4StreamUnMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4StreamUnMarshaller.Tpo -c -o libdap_la-D4StreamUnMarshaller.lo `test -f 'D4StreamUnMarshaller.cc' || echo '$(srcdir)/'`D4StreamUnMarshaller.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4StreamUnMarshaller.Tpo $(DEPDIR)/libdap_la-D4StreamUnMarshaller.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4StreamUnMarshaller.cc' object='libdap_la-D4StreamUnMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4StreamUnMarshaller.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4StreamUnMarshaller.Tpo -c -o libdap_la-D4StreamUnMarshaller.lo `test -f 'D4StreamUnMarshaller.cc' || echo '$(srcdir)/'`D4StreamUnMarshaller.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4StreamUnMarshaller.Tpo $(DEPDIR)/libdap_la-D4StreamUnMarshaller.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4StreamUnMarshaller.cc' object='libdap_la-D4StreamUnMarshaller.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4StreamUnMarshaller.lo `test -f 'D4StreamUnMarshaller.cc' || echo '$(srcdir)/'`D4StreamUnMarshaller.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4StreamUnMarshaller.lo `test -f 'D4StreamUnMarshaller.cc' || echo '$(srcdir)/'`D4StreamUnMarshaller.cc
 
 libdap_la-Int64.lo: Int64.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int64.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int64.Tpo -c -o libdap_la-Int64.lo `test -f 'Int64.cc' || echo '$(srcdir)/'`Int64.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Int64.Tpo $(DEPDIR)/libdap_la-Int64.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Int64.cc' object='libdap_la-Int64.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int64.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int64.Tpo -c -o libdap_la-Int64.lo `test -f 'Int64.cc' || echo '$(srcdir)/'`Int64.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Int64.Tpo $(DEPDIR)/libdap_la-Int64.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Int64.cc' object='libdap_la-Int64.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int64.lo `test -f 'Int64.cc' || echo '$(srcdir)/'`Int64.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int64.lo `test -f 'Int64.cc' || echo '$(srcdir)/'`Int64.cc
 
 libdap_la-UInt64.lo: UInt64.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-UInt64.lo -MD -MP -MF $(DEPDIR)/libdap_la-UInt64.Tpo -c -o libdap_la-UInt64.lo `test -f 'UInt64.cc' || echo '$(srcdir)/'`UInt64.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-UInt64.Tpo $(DEPDIR)/libdap_la-UInt64.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='UInt64.cc' object='libdap_la-UInt64.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-UInt64.lo -MD -MP -MF $(DEPDIR)/libdap_la-UInt64.Tpo -c -o libdap_la-UInt64.lo `test -f 'UInt64.cc' || echo '$(srcdir)/'`UInt64.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-UInt64.Tpo $(DEPDIR)/libdap_la-UInt64.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='UInt64.cc' object='libdap_la-UInt64.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-UInt64.lo `test -f 'UInt64.cc' || echo '$(srcdir)/'`UInt64.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-UInt64.lo `test -f 'UInt64.cc' || echo '$(srcdir)/'`UInt64.cc
 
 libdap_la-Int8.lo: Int8.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int8.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int8.Tpo -c -o libdap_la-Int8.lo `test -f 'Int8.cc' || echo '$(srcdir)/'`Int8.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-Int8.Tpo $(DEPDIR)/libdap_la-Int8.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Int8.cc' object='libdap_la-Int8.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-Int8.lo -MD -MP -MF $(DEPDIR)/libdap_la-Int8.Tpo -c -o libdap_la-Int8.lo `test -f 'Int8.cc' || echo '$(srcdir)/'`Int8.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-Int8.Tpo $(DEPDIR)/libdap_la-Int8.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Int8.cc' object='libdap_la-Int8.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int8.lo `test -f 'Int8.cc' || echo '$(srcdir)/'`Int8.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-Int8.lo `test -f 'Int8.cc' || echo '$(srcdir)/'`Int8.cc
 
 libdap_la-D4ParserSax2.lo: D4ParserSax2.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4ParserSax2.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4ParserSax2.Tpo -c -o libdap_la-D4ParserSax2.lo `test -f 'D4ParserSax2.cc' || echo '$(srcdir)/'`D4ParserSax2.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4ParserSax2.Tpo $(DEPDIR)/libdap_la-D4ParserSax2.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4ParserSax2.cc' object='libdap_la-D4ParserSax2.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4ParserSax2.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4ParserSax2.Tpo -c -o libdap_la-D4ParserSax2.lo `test -f 'D4ParserSax2.cc' || echo '$(srcdir)/'`D4ParserSax2.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4ParserSax2.Tpo $(DEPDIR)/libdap_la-D4ParserSax2.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4ParserSax2.cc' object='libdap_la-D4ParserSax2.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4ParserSax2.lo `test -f 'D4ParserSax2.cc' || echo '$(srcdir)/'`D4ParserSax2.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4ParserSax2.lo `test -f 'D4ParserSax2.cc' || echo '$(srcdir)/'`D4ParserSax2.cc
 
 libdap_la-D4BaseTypeFactory.lo: D4BaseTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4BaseTypeFactory.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4BaseTypeFactory.Tpo -c -o libdap_la-D4BaseTypeFactory.lo `test -f 'D4BaseTypeFactory.cc' || echo '$(srcdir)/'`D4BaseTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4BaseTypeFactory.Tpo $(DEPDIR)/libdap_la-D4BaseTypeFactory.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4BaseTypeFactory.cc' object='libdap_la-D4BaseTypeFactory.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4BaseTypeFactory.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4BaseTypeFactory.Tpo -c -o libdap_la-D4BaseTypeFactory.lo `test -f 'D4BaseTypeFactory.cc' || echo '$(srcdir)/'`D4BaseTypeFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4BaseTypeFactory.Tpo $(DEPDIR)/libdap_la-D4BaseTypeFactory.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4BaseTypeFactory.cc' object='libdap_la-D4BaseTypeFactory.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4BaseTypeFactory.lo `test -f 'D4BaseTypeFactory.cc' || echo '$(srcdir)/'`D4BaseTypeFactory.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4BaseTypeFactory.lo `test -f 'D4BaseTypeFactory.cc' || echo '$(srcdir)/'`D4BaseTypeFactory.cc
 
 libdap_la-D4Dimensions.lo: D4Dimensions.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Dimensions.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Dimensions.Tpo -c -o libdap_la-D4Dimensions.lo `test -f 'D4Dimensions.cc' || echo '$(srcdir)/'`D4Dimensions.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Dimensions.Tpo $(DEPDIR)/libdap_la-D4Dimensions.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Dimensions.cc' object='libdap_la-D4Dimensions.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Dimensions.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Dimensions.Tpo -c -o libdap_la-D4Dimensions.lo `test -f 'D4Dimensions.cc' || echo '$(srcdir)/'`D4Dimensions.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Dimensions.Tpo $(DEPDIR)/libdap_la-D4Dimensions.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Dimensions.cc' object='libdap_la-D4Dimensions.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Dimensions.lo `test -f 'D4Dimensions.cc' || echo '$(srcdir)/'`D4Dimensions.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Dimensions.lo `test -f 'D4Dimensions.cc' || echo '$(srcdir)/'`D4Dimensions.cc
 
 libdap_la-D4EnumDefs.lo: D4EnumDefs.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4EnumDefs.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4EnumDefs.Tpo -c -o libdap_la-D4EnumDefs.lo `test -f 'D4EnumDefs.cc' || echo '$(srcdir)/'`D4EnumDefs.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4EnumDefs.Tpo $(DEPDIR)/libdap_la-D4EnumDefs.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4EnumDefs.cc' object='libdap_la-D4EnumDefs.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4EnumDefs.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4EnumDefs.Tpo -c -o libdap_la-D4EnumDefs.lo `test -f 'D4EnumDefs.cc' || echo '$(srcdir)/'`D4EnumDefs.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4EnumDefs.Tpo $(DEPDIR)/libdap_la-D4EnumDefs.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4EnumDefs.cc' object='libdap_la-D4EnumDefs.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4EnumDefs.lo `test -f 'D4EnumDefs.cc' || echo '$(srcdir)/'`D4EnumDefs.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4EnumDefs.lo `test -f 'D4EnumDefs.cc' || echo '$(srcdir)/'`D4EnumDefs.cc
 
 libdap_la-D4Group.lo: D4Group.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Group.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Group.Tpo -c -o libdap_la-D4Group.lo `test -f 'D4Group.cc' || echo '$(srcdir)/'`D4Group.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Group.Tpo $(DEPDIR)/libdap_la-D4Group.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Group.cc' object='libdap_la-D4Group.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Group.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Group.Tpo -c -o libdap_la-D4Group.lo `test -f 'D4Group.cc' || echo '$(srcdir)/'`D4Group.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Group.Tpo $(DEPDIR)/libdap_la-D4Group.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Group.cc' object='libdap_la-D4Group.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Group.lo `test -f 'D4Group.cc' || echo '$(srcdir)/'`D4Group.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Group.lo `test -f 'D4Group.cc' || echo '$(srcdir)/'`D4Group.cc
 
 libdap_la-DMR.lo: DMR.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DMR.lo -MD -MP -MF $(DEPDIR)/libdap_la-DMR.Tpo -c -o libdap_la-DMR.lo `test -f 'DMR.cc' || echo '$(srcdir)/'`DMR.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-DMR.Tpo $(DEPDIR)/libdap_la-DMR.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DMR.cc' object='libdap_la-DMR.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-DMR.lo -MD -MP -MF $(DEPDIR)/libdap_la-DMR.Tpo -c -o libdap_la-DMR.lo `test -f 'DMR.cc' || echo '$(srcdir)/'`DMR.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-DMR.Tpo $(DEPDIR)/libdap_la-DMR.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DMR.cc' object='libdap_la-DMR.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DMR.lo `test -f 'DMR.cc' || echo '$(srcdir)/'`DMR.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-DMR.lo `test -f 'DMR.cc' || echo '$(srcdir)/'`DMR.cc
 
 libdap_la-D4Attributes.lo: D4Attributes.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Attributes.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Attributes.Tpo -c -o libdap_la-D4Attributes.lo `test -f 'D4Attributes.cc' || echo '$(srcdir)/'`D4Attributes.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Attributes.Tpo $(DEPDIR)/libdap_la-D4Attributes.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Attributes.cc' object='libdap_la-D4Attributes.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Attributes.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Attributes.Tpo -c -o libdap_la-D4Attributes.lo `test -f 'D4Attributes.cc' || echo '$(srcdir)/'`D4Attributes.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Attributes.Tpo $(DEPDIR)/libdap_la-D4Attributes.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Attributes.cc' object='libdap_la-D4Attributes.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Attributes.lo `test -f 'D4Attributes.cc' || echo '$(srcdir)/'`D4Attributes.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Attributes.lo `test -f 'D4Attributes.cc' || echo '$(srcdir)/'`D4Attributes.cc
 
 libdap_la-D4Enum.lo: D4Enum.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Enum.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Enum.Tpo -c -o libdap_la-D4Enum.lo `test -f 'D4Enum.cc' || echo '$(srcdir)/'`D4Enum.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Enum.Tpo $(DEPDIR)/libdap_la-D4Enum.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Enum.cc' object='libdap_la-D4Enum.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Enum.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Enum.Tpo -c -o libdap_la-D4Enum.lo `test -f 'D4Enum.cc' || echo '$(srcdir)/'`D4Enum.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Enum.Tpo $(DEPDIR)/libdap_la-D4Enum.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Enum.cc' object='libdap_la-D4Enum.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Enum.lo `test -f 'D4Enum.cc' || echo '$(srcdir)/'`D4Enum.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Enum.lo `test -f 'D4Enum.cc' || echo '$(srcdir)/'`D4Enum.cc
 
 libdap_la-chunked_ostream.lo: chunked_ostream.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-chunked_ostream.lo -MD -MP -MF $(DEPDIR)/libdap_la-chunked_ostream.Tpo -c -o libdap_la-chunked_ostream.lo `test -f 'chunked_ostream.cc' || echo '$(srcdir)/'`chunked_ostream.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-chunked_ostream.Tpo $(DEPDIR)/libdap_la-chunked_ostream.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='chunked_ostream.cc' object='libdap_la-chunked_ostream.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-chunked_ostream.lo -MD -MP -MF $(DEPDIR)/libdap_la-chunked_ostream.Tpo -c -o libdap_la-chunked_ostream.lo `test -f 'chunked_ostream.cc' || echo '$(srcdir)/'`chunked_ostream.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-chunked_ostream.Tpo $(DEPDIR)/libdap_la-chunked_ostream.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='chunked_ostream.cc' object='libdap_la-chunked_ostream.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-chunked_ostream.lo `test -f 'chunked_ostream.cc' || echo '$(srcdir)/'`chunked_ostream.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-chunked_ostream.lo `test -f 'chunked_ostream.cc' || echo '$(srcdir)/'`chunked_ostream.cc
 
 libdap_la-chunked_istream.lo: chunked_istream.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-chunked_istream.lo -MD -MP -MF $(DEPDIR)/libdap_la-chunked_istream.Tpo -c -o libdap_la-chunked_istream.lo `test -f 'chunked_istream.cc' || echo '$(srcdir)/'`chunked_istream.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-chunked_istream.Tpo $(DEPDIR)/libdap_la-chunked_istream.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='chunked_istream.cc' object='libdap_la-chunked_istream.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-chunked_istream.lo -MD -MP -MF $(DEPDIR)/libdap_la-chunked_istream.Tpo -c -o libdap_la-chunked_istream.lo `test -f 'chunked_istream.cc' || echo '$(srcdir)/'`chunked_istream.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-chunked_istream.Tpo $(DEPDIR)/libdap_la-chunked_istream.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='chunked_istream.cc' object='libdap_la-chunked_istream.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-chunked_istream.lo `test -f 'chunked_istream.cc' || echo '$(srcdir)/'`chunked_istream.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-chunked_istream.lo `test -f 'chunked_istream.cc' || echo '$(srcdir)/'`chunked_istream.cc
 
 libdap_la-D4Sequence.lo: D4Sequence.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Sequence.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Sequence.Tpo -c -o libdap_la-D4Sequence.lo `test -f 'D4Sequence.cc' || echo '$(srcdir)/'`D4Sequence.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Sequence.Tpo $(DEPDIR)/libdap_la-D4Sequence.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Sequence.cc' object='libdap_la-D4Sequence.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Sequence.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Sequence.Tpo -c -o libdap_la-D4Sequence.lo `test -f 'D4Sequence.cc' || echo '$(srcdir)/'`D4Sequence.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Sequence.Tpo $(DEPDIR)/libdap_la-D4Sequence.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Sequence.cc' object='libdap_la-D4Sequence.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Sequence.lo `test -f 'D4Sequence.cc' || echo '$(srcdir)/'`D4Sequence.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Sequence.lo `test -f 'D4Sequence.cc' || echo '$(srcdir)/'`D4Sequence.cc
 
 libdap_la-D4Maps.lo: D4Maps.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Maps.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Maps.Tpo -c -o libdap_la-D4Maps.lo `test -f 'D4Maps.cc' || echo '$(srcdir)/'`D4Maps.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Maps.Tpo $(DEPDIR)/libdap_la-D4Maps.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Maps.cc' object='libdap_la-D4Maps.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Maps.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Maps.Tpo -c -o libdap_la-D4Maps.lo `test -f 'D4Maps.cc' || echo '$(srcdir)/'`D4Maps.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Maps.Tpo $(DEPDIR)/libdap_la-D4Maps.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Maps.cc' object='libdap_la-D4Maps.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Maps.lo `test -f 'D4Maps.cc' || echo '$(srcdir)/'`D4Maps.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Maps.lo `test -f 'D4Maps.cc' || echo '$(srcdir)/'`D4Maps.cc
 
 libdap_la-D4Opaque.lo: D4Opaque.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Opaque.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Opaque.Tpo -c -o libdap_la-D4Opaque.lo `test -f 'D4Opaque.cc' || echo '$(srcdir)/'`D4Opaque.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4Opaque.Tpo $(DEPDIR)/libdap_la-D4Opaque.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Opaque.cc' object='libdap_la-D4Opaque.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4Opaque.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4Opaque.Tpo -c -o libdap_la-D4Opaque.lo `test -f 'D4Opaque.cc' || echo '$(srcdir)/'`D4Opaque.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4Opaque.Tpo $(DEPDIR)/libdap_la-D4Opaque.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Opaque.cc' object='libdap_la-D4Opaque.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Opaque.lo `test -f 'D4Opaque.cc' || echo '$(srcdir)/'`D4Opaque.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4Opaque.lo `test -f 'D4Opaque.cc' || echo '$(srcdir)/'`D4Opaque.cc
 
 libdap_la-D4AsyncUtil.lo: D4AsyncUtil.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4AsyncUtil.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4AsyncUtil.Tpo -c -o libdap_la-D4AsyncUtil.lo `test -f 'D4AsyncUtil.cc' || echo '$(srcdir)/'`D4AsyncUtil.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4AsyncUtil.Tpo $(DEPDIR)/libdap_la-D4AsyncUtil.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4AsyncUtil.cc' object='libdap_la-D4AsyncUtil.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4AsyncUtil.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4AsyncUtil.Tpo -c -o libdap_la-D4AsyncUtil.lo `test -f 'D4AsyncUtil.cc' || echo '$(srcdir)/'`D4AsyncUtil.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4AsyncUtil.Tpo $(DEPDIR)/libdap_la-D4AsyncUtil.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4AsyncUtil.cc' object='libdap_la-D4AsyncUtil.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4AsyncUtil.lo `test -f 'D4AsyncUtil.cc' || echo '$(srcdir)/'`D4AsyncUtil.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4AsyncUtil.lo `test -f 'D4AsyncUtil.cc' || echo '$(srcdir)/'`D4AsyncUtil.cc
 
 libdap_la-D4RValue.lo: D4RValue.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4RValue.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4RValue.Tpo -c -o libdap_la-D4RValue.lo `test -f 'D4RValue.cc' || echo '$(srcdir)/'`D4RValue.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdap_la-D4RValue.Tpo $(DEPDIR)/libdap_la-D4RValue.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4RValue.cc' object='libdap_la-D4RValue.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdap_la-D4RValue.lo -MD -MP -MF $(DEPDIR)/libdap_la-D4RValue.Tpo -c -o libdap_la-D4RValue.lo `test -f 'D4RValue.cc' || echo '$(srcdir)/'`D4RValue.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdap_la-D4RValue.Tpo $(DEPDIR)/libdap_la-D4RValue.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4RValue.cc' object='libdap_la-D4RValue.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4RValue.lo `test -f 'D4RValue.cc' || echo '$(srcdir)/'`D4RValue.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdap_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdap_la-D4RValue.lo `test -f 'D4RValue.cc' || echo '$(srcdir)/'`D4RValue.cc
 
 libdapclient_la-RCReader.lo: RCReader.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-RCReader.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-RCReader.Tpo -c -o libdapclient_la-RCReader.lo `test -f 'RCReader.cc' || echo '$(srcdir)/'`RCReader.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-RCReader.Tpo $(DEPDIR)/libdapclient_la-RCReader.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='RCReader.cc' object='libdapclient_la-RCReader.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-RCReader.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-RCReader.Tpo -c -o libdapclient_la-RCReader.lo `test -f 'RCReader.cc' || echo '$(srcdir)/'`RCReader.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-RCReader.Tpo $(DEPDIR)/libdapclient_la-RCReader.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='RCReader.cc' object='libdapclient_la-RCReader.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-RCReader.lo `test -f 'RCReader.cc' || echo '$(srcdir)/'`RCReader.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-RCReader.lo `test -f 'RCReader.cc' || echo '$(srcdir)/'`RCReader.cc
 
 libdapclient_la-Connect.lo: Connect.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-Connect.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-Connect.Tpo -c -o libdapclient_la-Connect.lo `test -f 'Connect.cc' || echo '$(srcdir)/'`Connect.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-Connect.Tpo $(DEPDIR)/libdapclient_la-Connect.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Connect.cc' object='libdapclient_la-Connect.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-Connect.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-Connect.Tpo -c -o libdapclient_la-Connect.lo `test -f 'Connect.cc' || echo '$(srcdir)/'`Connect.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-Connect.Tpo $(DEPDIR)/libdapclient_la-Connect.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Connect.cc' object='libdapclient_la-Connect.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-Connect.lo `test -f 'Connect.cc' || echo '$(srcdir)/'`Connect.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-Connect.lo `test -f 'Connect.cc' || echo '$(srcdir)/'`Connect.cc
 
 libdapclient_la-HTTPConnect.lo: HTTPConnect.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-HTTPConnect.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-HTTPConnect.Tpo -c -o libdapclient_la-HTTPConnect.lo `test -f 'HTTPConnect.cc' || echo '$(srcdir)/'`HTTPConnect.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-HTTPConnect.Tpo $(DEPDIR)/libdapclient_la-HTTPConnect.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPConnect.cc' object='libdapclient_la-HTTPConnect.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-HTTPConnect.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-HTTPConnect.Tpo -c -o libdapclient_la-HTTPConnect.lo `test -f 'HTTPConnect.cc' || echo '$(srcdir)/'`HTTPConnect.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-HTTPConnect.Tpo $(DEPDIR)/libdapclient_la-HTTPConnect.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPConnect.cc' object='libdapclient_la-HTTPConnect.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-HTTPConnect.lo `test -f 'HTTPConnect.cc' || echo '$(srcdir)/'`HTTPConnect.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-HTTPConnect.lo `test -f 'HTTPConnect.cc' || echo '$(srcdir)/'`HTTPConnect.cc
 
 libdapclient_la-HTTPCache.lo: HTTPCache.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-HTTPCache.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-HTTPCache.Tpo -c -o libdapclient_la-HTTPCache.lo `test -f 'HTTPCache.cc' || echo '$(srcdir)/'`HTTPCache.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-HTTPCache.Tpo $(DEPDIR)/libdapclient_la-HTTPCache.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPCache.cc' object='libdapclient_la-HTTPCache.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-HTTPCache.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-HTTPCache.Tpo -c -o libdapclient_la-HTTPCache.lo `test -f 'HTTPCache.cc' || echo '$(srcdir)/'`HTTPCache.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-HTTPCache.Tpo $(DEPDIR)/libdapclient_la-HTTPCache.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPCache.cc' object='libdapclient_la-HTTPCache.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-HTTPCache.lo `test -f 'HTTPCache.cc' || echo '$(srcdir)/'`HTTPCache.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-HTTPCache.lo `test -f 'HTTPCache.cc' || echo '$(srcdir)/'`HTTPCache.cc
 
 libdapclient_la-util_mit.lo: util_mit.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-util_mit.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-util_mit.Tpo -c -o libdapclient_la-util_mit.lo `test -f 'util_mit.cc' || echo '$(srcdir)/'`util_mit.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-util_mit.Tpo $(DEPDIR)/libdapclient_la-util_mit.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util_mit.cc' object='libdapclient_la-util_mit.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-util_mit.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-util_mit.Tpo -c -o libdapclient_la-util_mit.lo `test -f 'util_mit.cc' || echo '$(srcdir)/'`util_mit.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-util_mit.Tpo $(DEPDIR)/libdapclient_la-util_mit.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='util_mit.cc' object='libdapclient_la-util_mit.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-util_mit.lo `test -f 'util_mit.cc' || echo '$(srcdir)/'`util_mit.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-util_mit.lo `test -f 'util_mit.cc' || echo '$(srcdir)/'`util_mit.cc
 
 libdapclient_la-ResponseTooBigErr.lo: ResponseTooBigErr.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-ResponseTooBigErr.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-ResponseTooBigErr.Tpo -c -o libdapclient_la-ResponseTooBigErr.lo `test -f 'ResponseTooBigErr.cc' || echo '$(srcdir)/'`ResponseTooBigErr.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-ResponseTooBigErr.Tpo $(DEPDIR)/libdapclient_la-ResponseTooBigErr.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ResponseTooBigErr.cc' object='libdapclient_la-ResponseTooBigErr.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-ResponseTooBigErr.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-ResponseTooBigErr.Tpo -c -o libdapclient_la-ResponseTooBigErr.lo `test -f 'ResponseTooBigErr.cc' || echo '$(srcdir)/'`ResponseTooBigErr.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-ResponseTooBigErr.Tpo $(DEPDIR)/libdapclient_la-ResponseTooBigErr.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ResponseTooBigErr.cc' object='libdapclient_la-ResponseTooBigErr.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-ResponseTooBigErr.lo `test -f 'ResponseTooBigErr.cc' || echo '$(srcdir)/'`ResponseTooBigErr.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-ResponseTooBigErr.lo `test -f 'ResponseTooBigErr.cc' || echo '$(srcdir)/'`ResponseTooBigErr.cc
 
 libdapclient_la-HTTPCacheTable.lo: HTTPCacheTable.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-HTTPCacheTable.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-HTTPCacheTable.Tpo -c -o libdapclient_la-HTTPCacheTable.lo `test -f 'HTTPCacheTable.cc' || echo '$(srcdir)/'`HTTPCacheTable.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-HTTPCacheTable.Tpo $(DEPDIR)/libdapclient_la-HTTPCacheTable.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPCacheTable.cc' object='libdapclient_la-HTTPCacheTable.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-HTTPCacheTable.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-HTTPCacheTable.Tpo -c -o libdapclient_la-HTTPCacheTable.lo `test -f 'HTTPCacheTable.cc' || echo '$(srcdir)/'`HTTPCacheTable.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-HTTPCacheTable.Tpo $(DEPDIR)/libdapclient_la-HTTPCacheTable.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPCacheTable.cc' object='libdapclient_la-HTTPCacheTable.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-HTTPCacheTable.lo `test -f 'HTTPCacheTable.cc' || echo '$(srcdir)/'`HTTPCacheTable.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-HTTPCacheTable.lo `test -f 'HTTPCacheTable.cc' || echo '$(srcdir)/'`HTTPCacheTable.cc
 
 libdapclient_la-D4Connect.lo: D4Connect.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-D4Connect.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-D4Connect.Tpo -c -o libdapclient_la-D4Connect.lo `test -f 'D4Connect.cc' || echo '$(srcdir)/'`D4Connect.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libdapclient_la-D4Connect.Tpo $(DEPDIR)/libdapclient_la-D4Connect.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4Connect.cc' object='libdapclient_la-D4Connect.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libdapclient_la-D4Connect.lo -MD -MP -MF $(DEPDIR)/libdapclient_la-D4Connect.Tpo -c -o libdapclient_la-D4Connect.lo `test -f 'D4Connect.cc' || echo '$(srcdir)/'`D4Connect.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libdapclient_la-D4Connect.Tpo $(DEPDIR)/libdapclient_la-D4Connect.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4Connect.cc' object='libdapclient_la-D4Connect.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-D4Connect.lo `test -f 'D4Connect.cc' || echo '$(srcdir)/'`D4Connect.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdapclient_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libdapclient_la-D4Connect.lo `test -f 'D4Connect.cc' || echo '$(srcdir)/'`D4Connect.cc
 
 libparsers_la-lex.das.lo: lex.das.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.das.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.das.Tpo -c -o libparsers_la-lex.das.lo `test -f 'lex.das.cc' || echo '$(srcdir)/'`lex.das.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-lex.das.Tpo $(DEPDIR)/libparsers_la-lex.das.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.das.cc' object='libparsers_la-lex.das.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.das.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.das.Tpo -c -o libparsers_la-lex.das.lo `test -f 'lex.das.cc' || echo '$(srcdir)/'`lex.das.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-lex.das.Tpo $(DEPDIR)/libparsers_la-lex.das.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='lex.das.cc' object='libparsers_la-lex.das.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.das.lo `test -f 'lex.das.cc' || echo '$(srcdir)/'`lex.das.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.das.lo `test -f 'lex.das.cc' || echo '$(srcdir)/'`lex.das.cc
 
-libparsers_la-das.tab.lo: das.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-das.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-das.tab.Tpo -c -o libparsers_la-das.tab.lo `test -f 'das.tab.cc' || echo '$(srcdir)/'`das.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-das.tab.Tpo $(DEPDIR)/libparsers_la-das.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='das.tab.cc' object='libparsers_la-das.tab.lo' libtool=yes @AMDEPBACKSLASH@
+libparsers_la-lex.dds.lo: lex.dds.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.dds.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.dds.Tpo -c -o libparsers_la-lex.dds.lo `test -f 'lex.dds.cc' || echo '$(srcdir)/'`lex.dds.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-lex.dds.Tpo $(DEPDIR)/libparsers_la-lex.dds.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='lex.dds.cc' object='libparsers_la-lex.dds.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-das.tab.lo `test -f 'das.tab.cc' || echo '$(srcdir)/'`das.tab.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.dds.lo `test -f 'lex.dds.cc' || echo '$(srcdir)/'`lex.dds.cc
 
-libparsers_la-lex.dds.lo: lex.dds.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.dds.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.dds.Tpo -c -o libparsers_la-lex.dds.lo `test -f 'lex.dds.cc' || echo '$(srcdir)/'`lex.dds.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-lex.dds.Tpo $(DEPDIR)/libparsers_la-lex.dds.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.dds.cc' object='libparsers_la-lex.dds.lo' libtool=yes @AMDEPBACKSLASH@
+libparsers_la-lex.ce_expr.lo: lex.ce_expr.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.ce_expr.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.ce_expr.Tpo -c -o libparsers_la-lex.ce_expr.lo `test -f 'lex.ce_expr.cc' || echo '$(srcdir)/'`lex.ce_expr.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-lex.ce_expr.Tpo $(DEPDIR)/libparsers_la-lex.ce_expr.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='lex.ce_expr.cc' object='libparsers_la-lex.ce_expr.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.dds.lo `test -f 'lex.dds.cc' || echo '$(srcdir)/'`lex.dds.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.ce_expr.lo `test -f 'lex.ce_expr.cc' || echo '$(srcdir)/'`lex.ce_expr.cc
 
-libparsers_la-dds.tab.lo: dds.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-dds.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-dds.tab.Tpo -c -o libparsers_la-dds.tab.lo `test -f 'dds.tab.cc' || echo '$(srcdir)/'`dds.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-dds.tab.Tpo $(DEPDIR)/libparsers_la-dds.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='dds.tab.cc' object='libparsers_la-dds.tab.lo' libtool=yes @AMDEPBACKSLASH@
+libparsers_la-lex.Error.lo: lex.Error.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.Error.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.Error.Tpo -c -o libparsers_la-lex.Error.lo `test -f 'lex.Error.cc' || echo '$(srcdir)/'`lex.Error.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-lex.Error.Tpo $(DEPDIR)/libparsers_la-lex.Error.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='lex.Error.cc' object='libparsers_la-lex.Error.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-dds.tab.lo `test -f 'dds.tab.cc' || echo '$(srcdir)/'`dds.tab.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.Error.lo `test -f 'lex.Error.cc' || echo '$(srcdir)/'`lex.Error.cc
 
-libparsers_la-lex.ce_expr.lo: lex.ce_expr.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.ce_expr.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.ce_expr.Tpo -c -o libparsers_la-lex.ce_expr.lo `test -f 'lex.ce_expr.cc' || echo '$(srcdir)/'`lex.ce_expr.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-lex.ce_expr.Tpo $(DEPDIR)/libparsers_la-lex.ce_expr.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.ce_expr.cc' object='libparsers_la-lex.ce_expr.lo' libtool=yes @AMDEPBACKSLASH@
+libparsers_la-das.tab.lo: das.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-das.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-das.tab.Tpo -c -o libparsers_la-das.tab.lo `test -f 'das.tab.cc' || echo '$(srcdir)/'`das.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-das.tab.Tpo $(DEPDIR)/libparsers_la-das.tab.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='das.tab.cc' object='libparsers_la-das.tab.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.ce_expr.lo `test -f 'lex.ce_expr.cc' || echo '$(srcdir)/'`lex.ce_expr.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-das.tab.lo `test -f 'das.tab.cc' || echo '$(srcdir)/'`das.tab.cc
 
-libparsers_la-ce_expr.tab.lo: ce_expr.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-ce_expr.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-ce_expr.tab.Tpo -c -o libparsers_la-ce_expr.tab.lo `test -f 'ce_expr.tab.cc' || echo '$(srcdir)/'`ce_expr.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-ce_expr.tab.Tpo $(DEPDIR)/libparsers_la-ce_expr.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ce_expr.tab.cc' object='libparsers_la-ce_expr.tab.lo' libtool=yes @AMDEPBACKSLASH@
+libparsers_la-dds.tab.lo: dds.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-dds.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-dds.tab.Tpo -c -o libparsers_la-dds.tab.lo `test -f 'dds.tab.cc' || echo '$(srcdir)/'`dds.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-dds.tab.Tpo $(DEPDIR)/libparsers_la-dds.tab.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='dds.tab.cc' object='libparsers_la-dds.tab.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-ce_expr.tab.lo `test -f 'ce_expr.tab.cc' || echo '$(srcdir)/'`ce_expr.tab.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-dds.tab.lo `test -f 'dds.tab.cc' || echo '$(srcdir)/'`dds.tab.cc
 
-libparsers_la-lex.Error.lo: lex.Error.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-lex.Error.lo -MD -MP -MF $(DEPDIR)/libparsers_la-lex.Error.Tpo -c -o libparsers_la-lex.Error.lo `test -f 'lex.Error.cc' || echo '$(srcdir)/'`lex.Error.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-lex.Error.Tpo $(DEPDIR)/libparsers_la-lex.Error.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.Error.cc' object='libparsers_la-lex.Error.lo' libtool=yes @AMDEPBACKSLASH@
+libparsers_la-ce_expr.tab.lo: ce_expr.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-ce_expr.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-ce_expr.tab.Tpo -c -o libparsers_la-ce_expr.tab.lo `test -f 'ce_expr.tab.cc' || echo '$(srcdir)/'`ce_expr.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-ce_expr.tab.Tpo $(DEPDIR)/libparsers_la-ce_expr.tab.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='ce_expr.tab.cc' object='libparsers_la-ce_expr.tab.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-lex.Error.lo `test -f 'lex.Error.cc' || echo '$(srcdir)/'`lex.Error.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-ce_expr.tab.lo `test -f 'ce_expr.tab.cc' || echo '$(srcdir)/'`ce_expr.tab.cc
 
 libparsers_la-Error.tab.lo: Error.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-Error.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-Error.tab.Tpo -c -o libparsers_la-Error.tab.lo `test -f 'Error.tab.cc' || echo '$(srcdir)/'`Error.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libparsers_la-Error.tab.Tpo $(DEPDIR)/libparsers_la-Error.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='Error.tab.cc' object='libparsers_la-Error.tab.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparsers_la-Error.tab.lo -MD -MP -MF $(DEPDIR)/libparsers_la-Error.tab.Tpo -c -o libparsers_la-Error.tab.lo `test -f 'Error.tab.cc' || echo '$(srcdir)/'`Error.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libparsers_la-Error.tab.Tpo $(DEPDIR)/libparsers_la-Error.tab.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='Error.tab.cc' object='libparsers_la-Error.tab.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-Error.tab.lo `test -f 'Error.tab.cc' || echo '$(srcdir)/'`Error.tab.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparsers_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparsers_la-Error.tab.lo `test -f 'Error.tab.cc' || echo '$(srcdir)/'`Error.tab.cc
 
 getdap-getdap.o: getdap.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap-getdap.o -MD -MP -MF $(DEPDIR)/getdap-getdap.Tpo -c -o getdap-getdap.o `test -f 'getdap.cc' || echo '$(srcdir)/'`getdap.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/getdap-getdap.Tpo $(DEPDIR)/getdap-getdap.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='getdap.cc' object='getdap-getdap.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap-getdap.o -MD -MP -MF $(DEPDIR)/getdap-getdap.Tpo -c -o getdap-getdap.o `test -f 'getdap.cc' || echo '$(srcdir)/'`getdap.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/getdap-getdap.Tpo $(DEPDIR)/getdap-getdap.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='getdap.cc' object='getdap-getdap.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap-getdap.o `test -f 'getdap.cc' || echo '$(srcdir)/'`getdap.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap-getdap.o `test -f 'getdap.cc' || echo '$(srcdir)/'`getdap.cc
 
 getdap-getdap.obj: getdap.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap-getdap.obj -MD -MP -MF $(DEPDIR)/getdap-getdap.Tpo -c -o getdap-getdap.obj `if test -f 'getdap.cc'; then $(CYGPATH_W) 'getdap.cc'; else $(CYGPATH_W) '$(srcdir)/getdap.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/getdap-getdap.Tpo $(DEPDIR)/getdap-getdap.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='getdap.cc' object='getdap-getdap.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap-getdap.obj -MD -MP -MF $(DEPDIR)/getdap-getdap.Tpo -c -o getdap-getdap.obj `if test -f 'getdap.cc'; then $(CYGPATH_W) 'getdap.cc'; else $(CYGPATH_W) '$(srcdir)/getdap.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/getdap-getdap.Tpo $(DEPDIR)/getdap-getdap.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='getdap.cc' object='getdap-getdap.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap-getdap.obj `if test -f 'getdap.cc'; then $(CYGPATH_W) 'getdap.cc'; else $(CYGPATH_W) '$(srcdir)/getdap.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap-getdap.obj `if test -f 'getdap.cc'; then $(CYGPATH_W) 'getdap.cc'; else $(CYGPATH_W) '$(srcdir)/getdap.cc'; fi`
 
 getdap4-getdap4.o: getdap4.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap4-getdap4.o -MD -MP -MF $(DEPDIR)/getdap4-getdap4.Tpo -c -o getdap4-getdap4.o `test -f 'getdap4.cc' || echo '$(srcdir)/'`getdap4.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/getdap4-getdap4.Tpo $(DEPDIR)/getdap4-getdap4.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='getdap4.cc' object='getdap4-getdap4.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap4-getdap4.o -MD -MP -MF $(DEPDIR)/getdap4-getdap4.Tpo -c -o getdap4-getdap4.o `test -f 'getdap4.cc' || echo '$(srcdir)/'`getdap4.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/getdap4-getdap4.Tpo $(DEPDIR)/getdap4-getdap4.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='getdap4.cc' object='getdap4-getdap4.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap4-getdap4.o `test -f 'getdap4.cc' || echo '$(srcdir)/'`getdap4.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap4-getdap4.o `test -f 'getdap4.cc' || echo '$(srcdir)/'`getdap4.cc
 
 getdap4-getdap4.obj: getdap4.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap4-getdap4.obj -MD -MP -MF $(DEPDIR)/getdap4-getdap4.Tpo -c -o getdap4-getdap4.obj `if test -f 'getdap4.cc'; then $(CYGPATH_W) 'getdap4.cc'; else $(CYGPATH_W) '$(srcdir)/getdap4.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/getdap4-getdap4.Tpo $(DEPDIR)/getdap4-getdap4.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='getdap4.cc' object='getdap4-getdap4.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT getdap4-getdap4.obj -MD -MP -MF $(DEPDIR)/getdap4-getdap4.Tpo -c -o getdap4-getdap4.obj `if test -f 'getdap4.cc'; then $(CYGPATH_W) 'getdap4.cc'; else $(CYGPATH_W) '$(srcdir)/getdap4.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/getdap4-getdap4.Tpo $(DEPDIR)/getdap4-getdap4.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='getdap4.cc' object='getdap4-getdap4.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap4-getdap4.obj `if test -f 'getdap4.cc'; then $(CYGPATH_W) 'getdap4.cc'; else $(CYGPATH_W) '$(srcdir)/getdap4.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdap4_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o getdap4-getdap4.obj `if test -f 'getdap4.cc'; then $(CYGPATH_W) 'getdap4.cc'; else $(CYGPATH_W) '$(srcdir)/getdap4.cc'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -2186,17 +2300,20 @@ uninstall-pkgincludeHEADERS:
 # (1) if the variable is set in 'config.status', edit 'config.status'
 #     (which will cause the Makefiles to be regenerated when you run 'make');
 # (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -2211,61 +2328,12 @@ $(RECURSIVE_TARGETS):
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in dods-datatypes-config.h.in xdr-datatypes-config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -2281,12 +2349,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in dods-datatypes-config.h.i
 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS) config.h.in dods-datatypes-config.h.in xdr-datatypes-config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -2298,15 +2361,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in dods-datatypes-config.h.i
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in dods-datatypes-config.h.in xdr-datatypes-config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS) config.h.in dods-datatypes-config.h.in xdr-datatypes-config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -2315,18 +2374,16 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
-
 cscope: cscope.files
 	test ! -s cscope.files \
 	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-
 clean-cscope:
 	-rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
 
-cscope.files: clean-cscope cscopelist-recursive cscopelist
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -2350,19 +2407,6 @@ distdir: $(DISTFILES)
 	  echo "NEWS not updated; not releasing" 1>&2; \
 	  exit 1;; \
 	esac
-	@list='$(MANS)'; if test -n "$$list"; then \
-	  list=`for p in $$list; do \
-	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
-	  if test -n "$$list" && \
-	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-	    echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
-	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
-	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-	    echo "       typically 'make maintainer-clean' will remove them" >&2; \
-	    exit 1; \
-	  else :; fi; \
-	else :; fi
 	$(am__remove_distdir)
 	test -d "$(distdir)" || mkdir "$(distdir)"
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -2443,10 +2487,16 @@ dist-xz: distdir
 	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__post_remove_distdir)
 
 dist-shar: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
 
@@ -2479,18 +2529,19 @@ distcheck: dist
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
+	chmod -R a-w $(distdir)
+	chmod u+w $(distdir)
+	mkdir $(distdir)/_build $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
 	  && am__cwd=`pwd` \
 	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	  && ../configure \
 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=.. --prefix="$$dc_install_base" \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
 	  && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -2672,17 +2723,16 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
 
 uninstall-man: uninstall-man1
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	cscopelist-recursive ctags-recursive install install-am \
-	install-strip tags-recursive
+.MAKE: $(am__recursive_targets) all check install install-am \
+	install-strip
 
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am am--refresh check check-am clean clean-binPROGRAMS \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--refresh check check-am clean clean-binPROGRAMS \
 	clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \
-	clean-noinstLTLIBRARIES cscope cscopelist cscopelist-recursive \
-	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
-	distclean distclean-compile distclean-generic distclean-hdr \
+	clean-noinstLTLIBRARIES cscope cscopelist-am ctags ctags-am \
+	dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-compile distclean-generic distclean-hdr \
 	distclean-libtool distclean-tags distcleancheck distdir \
 	distuninstallcheck dvi dvi-am html html-am info info-am \
 	install install-am install-binPROGRAMS install-binSCRIPTS \
@@ -2695,21 +2745,15 @@ uninstall-man: uninstall-man1
 	installcheck-am installdirs installdirs-am maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-compile \
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am \
-	uninstall-binPROGRAMS uninstall-binSCRIPTS \
-	uninstall-dist_aclocalDATA uninstall-libLTLIBRARIES \
-	uninstall-man uninstall-man1 uninstall-pkgconfigDATA \
-	uninstall-pkgincludeHEADERS
+	tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-binSCRIPTS uninstall-dist_aclocalDATA \
+	uninstall-libLTLIBRARIES uninstall-man uninstall-man1 \
+	uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS
 
 
 %.1: %.man1
 	groff -t -e -mandoc -Tascii $< | col -bx > $@
 
-# Copy the generated grammar files to the 'grammarfiles' directory.
-.PHONY: grammarfiles
-grammarfiles: $(GRAM_SRC)
-	for f in $(GRAM_SRC); do cp $$f grammarfiles; done
-
 .PHONY: docs
 docs:
 	doxygen $(srcdir)/doxy.conf
@@ -2833,35 +2877,42 @@ xdr-datatypes.h: xdr-datatypes-config.h
 #
 # Build the DAS scanner and parser
 
+# Using this pattern rule is a way to get gnu make to run bison only once.
+# The targets that explicitly name the two sources to be built will run it
+# twice with a parallel build. jhrg 6/18/15
+
+%.tab.cc %.tab.hh: %.yy
+	$(YACC) $(YFLAGS) $<
+
 lex.das.cc: das.lex das.tab.cc das.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-das.tab.cc das.tab.hh: das.yy DAS.h
-	$(YACC) $(YFLAGS) $<
+#das.tab.cc das.tab.hh: das.yy DAS.h
+#	$(YACC) $(YFLAGS) $<
 
 # DDS
 
 lex.dds.cc: dds.lex dds.tab.cc dds.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-dds.tab.cc dds.tab.hh: dds.yy
-	$(YACC) $(YFLAGS) $<
+#dds.tab.cc dds.tab.hh: dds.yy
+#	$(YACC) $(YFLAGS) $<
 
 # CE
 
 lex.ce_expr.cc: ce_expr.lex ce_expr.tab.cc ce_expr.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-ce_expr.tab.cc ce_expr.tab.hh: ce_expr.yy
-	$(YACC) $(YFLAGS) $<
+#ce_expr.tab.cc ce_expr.tab.hh: ce_expr.yy
+#	$(YACC) $(YFLAGS) $<
 
 # Errors
 
 lex.Error.cc: Error.lex Error.tab.cc Error.tab.hh
 	$(LEX) $(LFLAGS) $<
 
-Error.tab.cc Error.tab.hh: Error.yy
-	$(YACC) $(YFLAGS) $<
+#Error.tab.cc Error.tab.hh: Error.yy
+#	$(YACC) $(YFLAGS) $<
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/Marshaller.h b/Marshaller.h
index 9217440..20d1d09 100644
--- a/Marshaller.h
+++ b/Marshaller.h
@@ -36,47 +36,71 @@
 #include <string>
 #include <vector>
 
-using std::string ;
-using std::vector ;
-
 #include "DapObj.h"
-
+#include "Type.h"
 #include "dods-datatypes.h"
+#include "InternalErr.h"
 
-namespace libdap
-{
+namespace libdap {
 
-class Vector ;
+class Vector;
 
 /** @brief abstract base class used to marshal/serialize dap data objects
  */
-class Marshaller : public DapObj
-{
+class Marshaller: public DapObj {
 public:
-    virtual void		put_byte( dods_byte val ) = 0 ;
-
-    virtual void		put_int16( dods_int16 val ) = 0 ;
-    virtual void		put_int32( dods_int32 val ) = 0 ;
-
-    virtual void		put_float32( dods_float32 val ) = 0 ;
-    virtual void		put_float64( dods_float64 val ) = 0 ;
-
-    virtual void		put_uint16( dods_uint16 val ) = 0 ;
-    virtual void		put_uint32( dods_uint32 val ) = 0 ;
-
-    virtual void		put_str( const string &val ) = 0 ;
-    virtual void		put_url( const string &val ) = 0 ;
-
-    virtual void		put_opaque( char *val, unsigned int len ) = 0 ;
-    virtual void		put_int( int val ) = 0 ;
-
-    virtual void		put_vector( char *val, int num,
-                                            Vector &vec ) = 0 ;
-    virtual void		put_vector( char *val, int num, int width,
-                                            Vector &vec ) = 0 ;
-
-    virtual void		dump(ostream &strm) const = 0 ;
-} ;
+    virtual void put_byte(dods_byte val) = 0;
+
+    virtual void put_int16(dods_int16 val) = 0;
+    virtual void put_int32(dods_int32 val) = 0;
+
+    virtual void put_float32(dods_float32 val) = 0;
+    virtual void put_float64(dods_float64 val) = 0;
+
+    virtual void put_uint16(dods_uint16 val) = 0;
+    virtual void put_uint32(dods_uint32 val) = 0;
+
+    virtual void put_str(const std::string &val) = 0;
+    virtual void put_url(const std::string &val) = 0;
+
+    virtual void put_opaque(char *val, unsigned int len) = 0;
+    virtual void put_int(int val) = 0;
+
+    virtual void put_vector(char *val, int num, Vector &vec) = 0;
+    virtual void put_vector(char *val, int num, int width, Vector &vec) = 0;
+
+    /**
+     * Write the prefix bytes for a vector and reset the state/counter for
+     * a vector/array that will be written using put_vector_part() and
+     * put_vector_end().
+     *
+     * @param num The number of elements to write
+     */
+    virtual void put_vector_start(int /*num*/) {
+        throw InternalErr(__FILE__, __LINE__, "Not Implemented yet");
+    }// = 0;
+
+    /**
+     * Write one part of a vector's contents.
+     *
+     * @param val Pointer to the part's values
+     * @param num The number of values in this part
+     * @param width The number of bytes per value
+     * @param type The DAP2 data type for each value
+     */
+    virtual void put_vector_part(char */*val*/, unsigned int /*num*/, int /*width*/, Type /*type*/) {
+        throw InternalErr(__FILE__, __LINE__, "Not Implemented yet");
+    }// = 0;
+
+    /**
+     * Close a vector written using put_vector_part()
+     */
+    virtual void put_vector_end() {
+        throw InternalErr(__FILE__, __LINE__, "Not Implemented yet");
+    }// = 0;
+
+    virtual void dump(std::ostream &strm) const = 0;
+};
 
 } // namespace libdap
 
diff --git a/MarshallerThread.cc b/MarshallerThread.cc
new file mode 100644
index 0000000..73eaae9
--- /dev/null
+++ b/MarshallerThread.cc
@@ -0,0 +1,293 @@
+// -*- mode: c++; c-basic-offset:4 -*-
+
+// This file is part of libdap, A C++ implementation of the OPeNDAP Data
+// Access Protocol.
+
+// Copyright (c) 2015 OPeNDAP, Inc.
+// Author: James Gallagher <jgallagher at opendap.org>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
+
+/*
+ * MarshallerThread.cc
+ *
+ *  Created on: Aug 27, 2015
+ *      Author: jimg
+ */
+
+#include "config.h"
+
+#include <pthread.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <ostream>
+#include <sstream>
+
+#include "MarshallerThread.h"
+#include "Error.h"
+#include "InternalErr.h"
+#include "debug.h"
+
+using namespace libdap;
+using namespace std;
+
+bool MarshallerThread::print_time = false;
+
+/**
+ * Use this with timeval structures returned by gettimeofday() to compute
+ * real time (instead of user time that is returned by std::clock() or
+ * get_rusage()).
+ */
+static double time_diff_to_hundredths(struct timeval *stop, struct timeval *start)
+{
+    /* Perform the carry for the later subtraction by updating y. */
+    if (stop->tv_usec < start->tv_usec) {
+        int nsec = (start->tv_usec - stop->tv_usec) / 1000000 + 1;
+        start->tv_usec -= 1000000 * nsec;
+        start->tv_sec += nsec;
+    }
+    if (stop->tv_usec - start->tv_usec > 1000000) {
+        int nsec = (start->tv_usec - stop->tv_usec) / 1000000;
+        start->tv_usec += 1000000 * nsec;
+        start->tv_sec -= nsec;
+    }
+
+    double result = stop->tv_sec - start->tv_sec;
+    result += double(stop->tv_usec - start->tv_usec) / 1000000;
+    return result;
+}
+
+/**
+ * Lock the mutex then wait for the child thread to signal using the
+ * condition variable 'cond'. Once the signal is received, re-test count
+ * to make sure it's zero (there are no child threads).
+ *
+ * This is used to lock the main thread and ensure that a second child
+ * (writer) thread is not started until any current child thread completes,
+ * which keeps the write operations in the correct order.
+ */
+Locker::Locker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count) :
+    m_mutex(lock)
+{
+    int status = pthread_mutex_lock(&m_mutex);
+
+    DBG(cerr << "Locking the mutex! (waiting; " << pthread_self() << ")" << endl);
+
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not lock m_mutex");
+    while (count != 0) {
+        status = pthread_cond_wait(&cond, &m_mutex);
+        if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not wait on m_cond");
+    }
+    if (count != 0) throw InternalErr(__FILE__, __LINE__, "FAIL: left m_cond wait with non-zero child thread count");
+
+    DBG(cerr << "Locked! (" << pthread_self() << ")" << endl);
+}
+
+/**
+ * Unlock the mutex
+ */
+Locker::~Locker()
+{
+    DBG(cerr << "Unlocking the mutex! (" << pthread_self() << ")" << endl);
+
+    int status = pthread_mutex_unlock(&m_mutex);
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not unlock m_mutex");
+}
+
+
+/**
+ * Lock the mutex, but do not wait on the condition variable.
+ * This is used by the child thread; it helps ensure that the
+ * mutex is unlocked and the predicate is reset no matter how the
+ * child thread is exited.
+ *
+ * Note we how a reference to the shared 'count' predicate that
+ * tells how many (0 or 1) child threads exist so that when this
+ * version of the Locker object is destroyed, we can zero that.
+ * This enables us to use RAII in the child thread and ensure
+ * the invariant if there is an error and the code exits with a
+ * summary return.
+ */
+ChildLocker::ChildLocker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count) :
+    m_mutex(lock), m_cond(cond), m_count(count)
+{
+    int status = pthread_mutex_lock(&m_mutex);
+
+    DBG(cerr << "Locking the mutex! (simple; " << pthread_self() << ")" << endl);
+
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not lock m_mutex");
+
+    DBG(cerr << "Locked! (" << pthread_self() << ")" << endl);
+}
+
+ChildLocker::~ChildLocker()
+{
+    DBG(cerr << "Unlocking the mutex! (" << pthread_self() << ")" << endl);
+
+    m_count = 0;
+    int status = pthread_cond_signal(&m_cond);
+    if (status != 0)
+        throw InternalErr(__FILE__, __LINE__, "Could not signal main thread from ChildLocker!");
+
+    status = pthread_mutex_unlock(&m_mutex);
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not unlock m_mutex");
+}
+
+MarshallerThread::MarshallerThread() :
+    d_thread(0), d_child_thread_count(0)
+{
+    if (pthread_attr_init(&d_thread_attr) != 0) throw Error("Failed to initialize pthread attributes.");
+    if (pthread_attr_setdetachstate(&d_thread_attr, PTHREAD_CREATE_DETACHED /*PTHREAD_CREATE_JOINABLE*/) != 0)
+        throw Error("Failed to complete pthread attribute initialization.");
+
+    if (pthread_mutex_init(&d_out_mutex, 0) != 0) throw Error("Failed to initialize mutex.");
+    if (pthread_cond_init(&d_out_cond, 0) != 0) throw Error("Failed to initialize cond.");
+}
+
+MarshallerThread::~MarshallerThread()
+{
+    int status = pthread_mutex_lock(&d_out_mutex);
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not lock m_mutex");
+    while (d_child_thread_count != 0) {
+        status = pthread_cond_wait(&d_out_cond, &d_out_mutex);
+        if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not wait on m_cond");
+    }
+    if (d_child_thread_count != 0)
+        throw InternalErr(__FILE__, __LINE__, "FAIL: left m_cond wait with non-zero child thread count");
+
+    status = pthread_mutex_unlock(&d_out_mutex);
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not unlock m_mutex");
+
+    pthread_mutex_destroy(&d_out_mutex);
+    pthread_cond_destroy(&d_out_cond);
+
+    pthread_attr_destroy(&d_thread_attr);
+}
+
+// not a static method
+/**
+ * Start the child thread, using the arguments given. This will write 'bytes'
+ * bytes from 'byte_buf' to the output stream 'out'
+ *
+ */
+void MarshallerThread::start_thread(void* (*thread)(void *arg), ostream &out, char *byte_buf,
+    unsigned int bytes)
+{
+    write_args *args = new write_args(d_out_mutex, d_out_cond, d_child_thread_count, d_thread_error, out, byte_buf,
+        bytes);
+    int status = pthread_create(&d_thread, &d_thread_attr, thread, args);
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not start child thread");
+}
+
+/**
+ * Write 'bytes' bytes from 'byte_buf' to the file descriptor 'fd'.
+ */
+void MarshallerThread::start_thread(void* (*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes)
+{
+    write_args *args = new write_args(d_out_mutex, d_out_cond, d_child_thread_count, d_thread_error, fd, byte_buf,
+        bytes);
+    int status = pthread_create(&d_thread, &d_thread_attr, thread, args);
+    if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not start child thread");
+}
+
+/**
+ * This static method is used to write data to the ostream referenced
+ * by the ostream element of write_args. This is used by start_thread()
+ * and passed to pthread_create()
+ */
+void *
+MarshallerThread::write_thread(void *arg)
+{
+    write_args *args = reinterpret_cast<write_args *>(arg);
+
+    ChildLocker lock(args->d_mutex, args->d_cond, args->d_count); // RAII; will unlock on exit
+
+    struct timeval tp_s;
+    if (print_time && gettimeofday(&tp_s, 0) != 0) cerr << "could not read time" << endl;
+
+    // force an error
+    // return (void*)-1;
+
+    if (args->d_out_file != -1) {
+        int bytes_written = write(args->d_out_file, args->d_buf, args->d_num);
+        if (bytes_written != args->d_num)
+            return (void*) -1;
+    }
+    else {
+        args->d_out.write(args->d_buf, args->d_num);
+        if (args->d_out.fail()) {
+            ostringstream oss;
+            oss << "Could not write data: " << __FILE__ << ":" << __LINE__;
+            args->d_error = oss.str();
+            return (void*) -1;
+        }
+    }
+
+    delete args->d_buf;
+    delete args;
+
+    struct timeval tp_e;
+    if (print_time) {
+        if (gettimeofday(&tp_e, 0) != 0) cerr << "could not read time" << endl;
+
+        cerr << "time for child thread write: " << time_diff_to_hundredths(&tp_e, &tp_s) << endl;
+    }
+
+    return 0;
+}
+
+/**
+ * This static method is used to write data to the ostream referenced
+ * by the ostream element of write_args. This is used by start_thread()
+ * and passed to pthread_create()
+ *
+ * @note This differers from MarshallerThread::write_thread() in that it
+ * writes data starting _after_ the four-byte length prefix that XDR
+ * adds to the data. It is used for the put_vector_part() calls in
+ * XDRStreamMarshaller.
+ *
+ * @return 0 if successful, -1 otherwise.
+ */
+void *
+MarshallerThread::write_thread_part(void *arg)
+{
+    write_args *args = reinterpret_cast<write_args *>(arg);
+
+    ChildLocker lock(args->d_mutex, args->d_cond, args->d_count); // RAII; will unlock on exit
+
+    if (args->d_out_file != -1) {
+        int bytes_written = write(args->d_out_file, args->d_buf, args->d_num);
+        if (bytes_written != args->d_num) return (void*) -1;
+    }
+    else {
+        args->d_out.write(args->d_buf + 4, args->d_num);
+        if (args->d_out.fail()) {
+            ostringstream oss;
+            oss << "Could not write data: " << __FILE__ << ":" << __LINE__;
+            args->d_error = oss.str();
+            return (void*) -1;
+        }
+    }
+
+    delete args->d_buf;
+    delete args;
+
+    return 0;
+}
+
diff --git a/MarshallerThread.h b/MarshallerThread.h
new file mode 100644
index 0000000..fd15e95
--- /dev/null
+++ b/MarshallerThread.h
@@ -0,0 +1,154 @@
+
+// -*- mode: c++; c-basic-offset:4 -*-
+
+// This file is part of libdap, A C++ implementation of the OPeNDAP Data
+// Access Protocol.
+
+// Copyright (c) 2015 OPeNDAP, Inc.
+// Author: James Gallagher <jgallagher at opendap.org>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
+
+/*
+ * MarshallerThread.h
+ *
+ *  Created on: Aug 27, 2015
+ *      Author: jimg
+ */
+
+#ifndef MARSHALLERTHREAD_H_
+#define MARSHALLERTHREAD_H_
+
+#include <pthread.h>
+
+#include <iostream>
+#include <ostream>
+#include <string>
+
+namespace libdap {
+
+/**
+ * RAII for the MarshallerThread mutex and condition variable. Used by the
+ * Main thread. The constructor locks the mutex and then, if the count of
+ * child threads is not zero, blocks on the associated condition variable.
+ * When signaled by the child thread using the condition variable (the child
+ * thread count should then be zero), the mutex is (re)locked and the ctor
+ * returns. The destructor unlocks the mutex.
+ */
+class Locker {
+public:
+    Locker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count);
+    virtual ~Locker();
+
+private:
+    pthread_mutex_t& m_mutex;
+
+    Locker();
+    Locker(const Locker &rhs);
+};
+
+/**
+ * RAII (for MarshallerThread) used by the child thread. The ctor simply
+ * locks the mutex; the dtor clears the child thread count, signals that
+ * count has changed and unlocks the mutex.
+ */
+class ChildLocker {
+public:
+    ChildLocker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count);
+    virtual ~ChildLocker();
+
+private:
+    pthread_mutex_t& m_mutex;
+    pthread_cond_t& m_cond;
+    int& m_count;
+
+    ChildLocker();
+    ChildLocker(const Locker &rhs);
+};
+
+class MarshallerThread {
+private:
+    pthread_t d_thread;
+    pthread_attr_t d_thread_attr;
+
+    pthread_mutex_t d_out_mutex;
+    pthread_cond_t d_out_cond;
+
+    int d_child_thread_count;   // 0 or 1
+    std::string d_thread_error; // non-null indicates an error
+
+    static bool print_time; // false by default
+
+    /**
+     * Used to pass information into the static methods that run the
+     * simple stream writer threads. This can pass both an ostream or
+     * a file descriptor. If a fd is passed, the ostream reference is
+     * set to stderr (i.e., std::cerr).
+     */
+    struct write_args {
+        pthread_mutex_t &d_mutex;
+        pthread_cond_t &d_cond;
+        int &d_count;
+        std::string &d_error;
+        std::ostream &d_out;     // The output stream protected by the mutex, ...
+        int d_out_file;       // file descriptor; if not -1, use this.
+        char *d_buf;        // The data to write to the stream
+        int d_num;          // The size of d_buf
+
+        /**
+         * Build args for an ostream. The file descriptor is set to -1
+         */
+        write_args(pthread_mutex_t &m, pthread_cond_t &c, int &count, std::string &e, std::ostream &s, char *vals, int num) :
+            d_mutex(m), d_cond(c), d_count(count), d_error(e), d_out(s), d_out_file(-1), d_buf(vals), d_num(num)
+        {
+        }
+
+        /**
+         * Build args for a file descriptr. The ostream is set to cerr (because it is
+         * a reference and has to be initialized to something).
+         */
+        write_args(pthread_mutex_t &m, pthread_cond_t &c, int &count, std::string &e, int fd, char *vals, int num) :
+            d_mutex(m), d_cond(c), d_count(count), d_error(e), d_out(std::cerr), d_out_file(fd), d_buf(vals), d_num(num)
+        {
+        }
+   };
+
+public:
+    MarshallerThread();
+    virtual ~MarshallerThread();
+
+    pthread_mutex_t &get_mutex() { return d_out_mutex; }
+    pthread_cond_t &get_cond() { return d_out_cond; }
+
+    int &get_child_thread_count() { return d_child_thread_count; }
+    void increment_child_thread_count() { ++d_child_thread_count; }
+
+    void start_thread(void* (*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written);
+    void start_thread(void* (*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes_written);
+
+    // These are static so they will have c-linkage - required because they
+    // are passed to pthread_create()
+    static void *write_thread(void *arg);
+    static void *write_thread_part(void *arg);
+
+    static void set_print_time(bool state) { print_time = state; }
+    static bool get_print_time() { return print_time; }
+};
+
+}
+
+#endif /* MARSHALLERTHREAD_H_ */
diff --git a/NEWS b/NEWS
index 52dc5e6..6ddb228 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,48 @@
+News for version 3.15.1
+
+Bug fixes
+
+News for version 3.15.0
+
+The library now writes to the network using a child thread, allowing 
+parallel processing of data reads and writes when one or more variables
+are returned (or when returning the result of an aggregation).
+
+The library now supports writing 'vector' data (i.e., Array variables)
+in parts so that large arrays that are being built up over time can be
+serialized in pieces as the data becomes available. This is combined
+with the parallel I/O feature when serailizing aggregations - other
+handlers could also take advantage of it
+
+We fixed an issue in Vector where template methods were used in a way
+that broke inheritance, introducing a hard-to-diagbose bug in the NCML 
+code. The problem was that variables that describe the 'aggregation 
+dimension' could not be subset. That's now fixed.
+
+News for version 3.14.2
+
+This version of the library _changes the behavior of BaseType::serialize()_
+so that memory allocated on the heap used to hold data (e.g., for an 
+Array) will be deleted as soon as the data are serialized. This was added
+to reduce memory consumption when returning responses with many large 
+variables. The change did not affect any of the code we normally test
+against; I think it was a largely undocumented 'feature' that the data
+were still present after serialized returned. However, if a module needs
+the data after serialize() is called, it can use a new method called
+serialize_no_release() to get the old behavior.
+
+News for version 3.14.1
+
+We started using Travis-CI and Coverity for/with/on this code; there was
+a learning curve... ;-) Also some issues with the parsers have been 
+addressed, hopefully resulting in more straightforward builds.
+
 News for version 3.14.0
 
+This version of libdap contains the current DAP4 implementation for 
+C++. The implementation is nearly complete, lacking only the CE filters
+for Sequences.
+
 News for version 3.13.3
 
 Memory leak fix in RValue.cc - affects server function evaluation only.
diff --git a/Operators.h b/Operators.h
index 89abeb5..5991a12 100644
--- a/Operators.h
+++ b/Operators.h
@@ -39,7 +39,7 @@
 #include "parser.h"  // for ID_MAX
 #include "ce_expr.tab.hh"
 
-using namespace std;
+//using namespace std;
 
 namespace libdap {
 
diff --git a/RCReader.cc b/RCReader.cc
index e04b165..8a92e3b 100644
--- a/RCReader.cc
+++ b/RCReader.cc
@@ -1,4 +1,3 @@
-
 // -*- mode: c++; c-basic-offset:4 -*-
 
 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
@@ -30,9 +29,9 @@
 // jose Jose Garcia <jgarcia at ucar.edu>
 
 /** A singleton which reads and parses the .dodsrc file. This code was
-    extracted from Connect (which has since changed considerably).
+ extracted from Connect (which has since changed considerably).
 
-    @author: jose */
+ @author: jose */
 
 // #define DODS_DEBUG
 #include "config.h"
@@ -76,11 +75,10 @@ RCReader* RCReader::_instance = 0;
 static pthread_once_t instance_control = PTHREAD_ONCE_INIT;
 
 /** Using values from this instance of RCReader, write out values for a
-    default .dodsrc file. Nominally this will use the defaults for each thing
-    that might be read from the configuration file. */
+ default .dodsrc file. Nominally this will use the defaults for each thing
+ that might be read from the configuration file. */
 
-bool
-RCReader::write_rc_file(const string &pathname)
+bool RCReader::write_rc_file(const string &pathname)
 {
     DBG(cerr << "Writing the RC file to " << pathname << endl);
     ofstream fpo(pathname.c_str());
@@ -94,11 +92,10 @@ RCReader::write_rc_file(const string &pathname)
         fpo << "# OPeNDAP client configuration file. See the OPeNDAP" << endl;
         fpo << "# users guide for information." << endl;
         fpo << "USE_CACHE=" << _dods_use_cache << endl;
-        fpo << "# Cache and object size are given in megabytes (20 ==> 20Mb)."
-        << endl;
-        fpo << "MAX_CACHE_SIZE=" << _dods_cache_max  << endl;
+        fpo << "# Cache and object size are given in megabytes (20 ==> 20Mb)." << endl;
+        fpo << "MAX_CACHE_SIZE=" << _dods_cache_max << endl;
         fpo << "MAX_CACHED_OBJ=" << _dods_cached_obj << endl;
-        fpo << "IGNORE_EXPIRES=" << _dods_ign_expires  << endl;
+        fpo << "IGNORE_EXPIRES=" << _dods_ign_expires << endl;
         fpo << "CACHE_ROOT=" << d_cache_root << endl;
         fpo << "DEFAULT_EXPIRES=" << _dods_default_expires << endl;
         fpo << "ALWAYS_VALIDATE=" << _dods_always_validate << endl;
@@ -111,19 +108,13 @@ RCReader::write_rc_file(const string &pathname)
         fpo << "VALIDATE_SSL=" << d_validate_ssl << endl;
 
         fpo << "# Proxy configuration (optional parts in []s)." << endl;
-	fpo << "# You may also use the 'http_proxy' environment variable"
-	    << endl;
-	fpo << "# but a value in this file will override that env variable."
-	    << endl;
-        fpo << "# PROXY_SERVER=[http://][username:password@]host[:port]"
-        << endl;
+        fpo << "# You may also use the 'http_proxy' environment variable" << endl;
+        fpo << "# but a value in this file will override that env variable." << endl;
+        fpo << "# PROXY_SERVER=[http://][username:password@]host[:port]" << endl;
         if (!d_dods_proxy_server_host.empty()) {
-            fpo << "PROXY_SERVER=" <<  d_dods_proxy_server_protocol << "://"
-            << (d_dods_proxy_server_userpw.empty()
-                ? ""
-                : d_dods_proxy_server_userpw + "@")
-            + d_dods_proxy_server_host
-            + ":" + long_to_string(d_dods_proxy_server_port) << endl;
+            fpo << "PROXY_SERVER=" << d_dods_proxy_server_protocol << "://"
+                    << (d_dods_proxy_server_userpw.empty() ? "" : d_dods_proxy_server_userpw + "@")
+                            + d_dods_proxy_server_host + ":" + long_to_string(d_dods_proxy_server_port) << endl;
         }
 
         fpo << "# NO_PROXY_FOR=<host|domain>" << endl;
@@ -133,18 +124,13 @@ RCReader::write_rc_file(const string &pathname)
 
         fpo << "# AIS_DATABASE=<file or url>" << endl;
 
-	fpo << "# COOKIE_JAR=.dods_cookies" << endl;
-	fpo << "# The cookie jar is a file that holds cookies sent from"
-	    << endl;
-	fpo << "# servers such as single signon systems. Uncomment this"
-	    << endl;
-	fpo << "# option and provide a file name to activate this feature."
-	    << endl;
-	fpo << "# If the value is a filename, it will be created in this"
-	    << endl;
-	fpo << "# directory; a full pathname can be used to force a specific"
-	    << endl;
-	fpo << "# location." << endl;
+        fpo << "# COOKIE_JAR=.dods_cookies" << endl;
+        fpo << "# The cookie jar is a file that holds cookies sent from" << endl;
+        fpo << "# servers such as single signon systems. Uncomment this" << endl;
+        fpo << "# option and provide a file name to activate this feature." << endl;
+        fpo << "# If the value is a filename, it will be created in this" << endl;
+        fpo << "# directory; a full pathname can be used to force a specific" << endl;
+        fpo << "# location." << endl;
 
         fpo.close();
         return true;
@@ -153,8 +139,7 @@ RCReader::write_rc_file(const string &pathname)
     return false;
 }
 
-bool
-RCReader::read_rc_file(const string &pathname)
+bool RCReader::read_rc_file(const string &pathname)
 {
     DBG(cerr << "Reading the RC file from " << pathname << endl);
 
@@ -171,99 +156,84 @@ RCReader::read_rc_file(const string &pathname)
         int tokenlength;
         while (true) {
             fpi.getline(&tempstr[0], 1023);
-            if (!fpi.good())
-                break;
+            if (!fpi.good()) break;
 
             value = strchr(&tempstr[0], '=');
-            if (!value)
-                continue;
+            if (!value) continue;
             tokenlength = value - &tempstr[0];
             value++;
 
-            if ((strncmp(&tempstr[0], "USE_CACHE", 9) == 0)
-                && tokenlength == 9) {
+            if ((strncmp(&tempstr[0], "USE_CACHE", 9) == 0) && tokenlength == 9) {
                 _dods_use_cache = atoi(value) ? true : false;
             }
-            else if ((strncmp(&tempstr[0], "MAX_CACHE_SIZE", 14) == 0)
-                     && tokenlength == 14) {
+            else if ((strncmp(&tempstr[0], "MAX_CACHE_SIZE", 14) == 0) && tokenlength == 14) {
                 _dods_cache_max = atoi(value);
             }
-            else if ((strncmp(&tempstr[0], "MAX_CACHED_OBJ", 14) == 0)
-                     && tokenlength == 14) {
+            else if ((strncmp(&tempstr[0], "MAX_CACHED_OBJ", 14) == 0) && tokenlength == 14) {
                 _dods_cached_obj = atoi(value);
             }
-            else if ((strncmp(&tempstr[0], "IGNORE_EXPIRES", 14) == 0)
-                     && tokenlength == 14) {
+            else if ((strncmp(&tempstr[0], "IGNORE_EXPIRES", 14) == 0) && tokenlength == 14) {
                 _dods_ign_expires = atoi(value);
             }
-            else if ((strncmp(&tempstr[0], "DEFLATE", 7) == 0)
-                     && tokenlength == 7) {
+            else if ((strncmp(&tempstr[0], "DEFLATE", 7) == 0) && tokenlength == 7) {
                 _dods_deflate = atoi(value) ? true : false;
             }
-            else if ((strncmp(&tempstr[0], "CACHE_ROOT", 10) == 0)
-                     && tokenlength == 10) {
+            else if ((strncmp(&tempstr[0], "CACHE_ROOT", 10) == 0) && tokenlength == 10) {
                 d_cache_root = value;
-                if (d_cache_root[d_cache_root.length() - 1] != DIR_SEP_CHAR)
-                    d_cache_root += string(DIR_SEP_STRING);
+                if (d_cache_root[d_cache_root.length() - 1] != DIR_SEP_CHAR) d_cache_root += string(DIR_SEP_STRING);
             }
-            else if ((strncmp(&tempstr[0], "DEFAULT_EXPIRES", 15) == 0)
-                     && tokenlength == 15) {
+            else if ((strncmp(&tempstr[0], "DEFAULT_EXPIRES", 15) == 0) && tokenlength == 15) {
                 _dods_default_expires = atoi(value);
             }
-            else if ((strncmp(&tempstr[0], "ALWAYS_VALIDATE", 15) == 0)
-                     && tokenlength == 15) {
+            else if ((strncmp(&tempstr[0], "ALWAYS_VALIDATE", 15) == 0) && tokenlength == 15) {
                 _dods_always_validate = atoi(value);
             }
-            else if ((strncmp(&tempstr[0], "VALIDATE_SSL", 12) == 0)
-                     && tokenlength == 12) {
+            else if ((strncmp(&tempstr[0], "VALIDATE_SSL", 12) == 0) && tokenlength == 12) {
                 d_validate_ssl = atoi(value);
             }
-            else if (strncmp(&tempstr[0], "AIS_DATABASE", 12) == 0
-                     && tokenlength == 12) {
+            else if (strncmp(&tempstr[0], "AIS_DATABASE", 12) == 0 && tokenlength == 12) {
                 d_ais_database = value;
-	    }
-            else if (strncmp(&tempstr[0], "COOKIE_JAR", 10) == 0
-                     && tokenlength == 10) {
-		// if the value of COOKIE_JAR starts with a slash, use it as
-		// is. However, if it does not start with a slash, prefix it
-		// with the directory that contains the .dodsrc file.
-		if (value[0] == '/') {
-		    d_cookie_jar = value;
-		}
-		else {
-		    d_cookie_jar = d_rc_file_path.substr(0, d_rc_file_path.find(".dodsrc")) + string(value);
-		}
-		DBG(cerr << "set cookie jar to: " << d_cookie_jar << endl);
             }
-            else if ((strncmp(&tempstr[0], "PROXY_SERVER", 12) == 0)
-                     && tokenlength == 12) {
+            else if (strncmp(&tempstr[0], "COOKIE_JAR", 10) == 0 && tokenlength == 10) {
+                // if the value of COOKIE_JAR starts with a slash, use it as
+                // is. However, if it does not start with a slash, prefix it
+                // with the directory that contains the .dodsrc file.
+                if (value[0] == '/') {
+                    d_cookie_jar = value;
+                }
+                else {
+                    d_cookie_jar = d_rc_file_path.substr(0, d_rc_file_path.find(".dodsrc")) + string(value);
+                } DBG(cerr << "set cookie jar to: " << d_cookie_jar << endl);
+            }
+            else if ((strncmp(&tempstr[0], "PROXY_SERVER", 12) == 0) && tokenlength == 12) {
                 // Setup a proxy server for all requests.
-		// The original syntax was <protocol>,<machine> where the
-		// machine could also contain the user/pass and port info.
-		// Support that but also support machine prefixed by
-		// 'http://' with and without the '<protocol>,' prefix. jhrg
-		// 4/21/08 (see bug 1095).
+                // The original syntax was <protocol>,<machine> where the
+                // machine could also contain the user/pass and port info.
+                // Support that but also support machine prefixed by
+                // 'http://' with and without the '<protocol>,' prefix. jhrg
+                // 4/21/08 (see bug 1095).
                 string proxy = value;
                 string::size_type comma = proxy.find(',');
 
                 // Since the <protocol> is now optional, the comma might be
                 // here. If it is, check that the protocol given is http.
                 if (comma != string::npos) {
-		    d_dods_proxy_server_protocol = proxy.substr(0, comma);
-		    downcase(d_dods_proxy_server_protocol);
-		    if (d_dods_proxy_server_protocol != "http")
-			throw Error("The only supported protocol for a proxy server is \"HTTP\". Correct your \".dodsrc\" file.");
-		    proxy = proxy.substr(comma + 1);
-		}
-		else {
-		    d_dods_proxy_server_protocol = "http";
-		}
-
-		// Look for a 'protocol://' prefix; skip if found
-		string::size_type protocol = proxy.find("://");
-		if (protocol != string::npos) {
-		    proxy = proxy.substr(protocol + 3);
-		}
+                    d_dods_proxy_server_protocol = proxy.substr(0, comma);
+                    downcase(d_dods_proxy_server_protocol);
+                    if (d_dods_proxy_server_protocol != "http")
+                        throw Error(
+                                "The only supported protocol for a proxy server is \"HTTP\". Correct your \".dodsrc\" file.");
+                    proxy = proxy.substr(comma + 1);
+                }
+                else {
+                    d_dods_proxy_server_protocol = "http";
+                }
+
+                // Look for a 'protocol://' prefix; skip if found
+                string::size_type protocol = proxy.find("://");
+                if (protocol != string::npos) {
+                    proxy = proxy.substr(protocol + 3);
+                }
 
                 // Break apart into userpw, host and port.
                 string::size_type at_sign = proxy.find('@');
@@ -278,16 +248,14 @@ RCReader::read_rc_file(const string &pathname)
                 string::size_type colon = proxy.find(':');
                 if (colon != string::npos) {
                     d_dods_proxy_server_host = proxy.substr(0, colon);
-                    d_dods_proxy_server_port
-			= strtol(proxy.substr(colon + 1).c_str(), 0, 0);
+                    d_dods_proxy_server_port = strtol(proxy.substr(colon + 1).c_str(), 0, 0);
                 }
                 else {
                     d_dods_proxy_server_host = proxy;
-		    d_dods_proxy_server_port = 80;
+                    d_dods_proxy_server_port = 80;
                 }
             }
-            else if ((strncmp(&tempstr[0], "NO_PROXY_FOR", 12) == 0)
-                     && tokenlength == 12) {
+            else if ((strncmp(&tempstr[0], "NO_PROXY_FOR", 12) == 0) && tokenlength == 12) {
                 // Setup a proxy server for all requests.
                 string no_proxy = value;
                 string::size_type comma = no_proxy.find(',');
@@ -295,15 +263,15 @@ RCReader::read_rc_file(const string &pathname)
                 // Since the protocol is required, the comma *must* be
                 // present. We could throw an Error on the malformed line...
                 if (comma == string::npos) {
-		    d_dods_no_proxy_for_protocol = "http";
-		    d_dods_no_proxy_for_host = no_proxy;
-		    d_dods_no_proxy_for = true;
-		}
-		else {
-		    d_dods_no_proxy_for_protocol = no_proxy.substr(0, comma);
-		    d_dods_no_proxy_for_host = no_proxy.substr(comma + 1);
-		    d_dods_no_proxy_for = true;
-		}
+                    d_dods_no_proxy_for_protocol = "http";
+                    d_dods_no_proxy_for_host = no_proxy;
+                    d_dods_no_proxy_for = true;
+                }
+                else {
+                    d_dods_no_proxy_for_protocol = no_proxy.substr(0, comma);
+                    d_dods_no_proxy_for_host = no_proxy.substr(comma + 1);
+                    d_dods_no_proxy_for = true;
+                }
             }
         }
 
@@ -320,26 +288,25 @@ RCReader::read_rc_file(const string &pathname)
 // Helper for check_env_var(). This is its main logic, separated out for the
 // cases under WIN32 where we don't use an environment variable.  09/19/03
 // jhrg
-string
-RCReader::check_string(string env_var)
+string RCReader::check_string(string env_var)
 {
-	DBG(cerr << "Entering check_string... (" << env_var << ")" << endl);
+    DBG(cerr << "Entering check_string... (" << env_var << ")" << endl);
     struct stat stat_info;
 
-	if (stat(env_var.c_str(), &stat_info) != 0) {
-		DBG(cerr << "stat returned non-zero" << endl);
+    if (stat(env_var.c_str(), &stat_info) != 0) {
+        DBG(cerr << "stat returned non-zero" << endl);
         return "";  // ENV VAR not a file or dir, bail
-	}
+    }
 
-	if (S_ISREG(stat_info.st_mode)) {
-		DBG(cerr << "S_ISREG: " << S_ISREG(stat_info.st_mode) << endl);
+    if (S_ISREG(stat_info.st_mode)) {
+        DBG(cerr << "S_ISREG: " << S_ISREG(stat_info.st_mode) << endl);
         return env_var;  // ENV VAR is a file, use it
-	}
+    }
 
     // ENV VAR is a directory, does it contain .dodsrc? Can we create
     // .dodsrc if it's not there?
     if (S_ISDIR(stat_info.st_mode)) {
-		DBG(cerr << "S_ISDIR: " << S_ISDIR(stat_info.st_mode) << endl);
+        DBG(cerr << "S_ISDIR: " << S_ISDIR(stat_info.st_mode) << endl);
         if (*env_var.rbegin() != DIR_SEP_CHAR) // Add trailing / if missing
             env_var += DIR_SEP_STRING;
         // Trick: set d_cache_root here in case we're going to create the
@@ -348,46 +315,43 @@ RCReader::check_string(string env_var)
         // value. 09/19/03 jhrg
         d_cache_root = env_var + string(".dods_cache") + DIR_SEP_STRING;
         env_var += ".dodsrc";
-        if (stat(env_var.c_str(), &stat_info) == 0 &&
-			S_ISREG(stat_info.st_mode)) {
-			DBG(cerr << "Found .dodsrc in \"" << env_var << "\"" << endl);
+        if (stat(env_var.c_str(), &stat_info) == 0 && S_ISREG(stat_info.st_mode)) {
+            DBG(cerr << "Found .dodsrc in \"" << env_var << "\"" << endl);
             return env_var; // Found .dodsrc in ENV VAR
-		}
+        }
 
         // Didn't find .dodsrc in ENV VAR and ENV VAR is a directory; try to
         // create it. Note write_rc_file uses d_cache_root (set above) when
         // it creates the RC file's contents.
-		if (write_rc_file(env_var)) {
-			DBG(cerr << "Wrote .dodsrc in \"" << env_var << "\"" << endl);
+        if (write_rc_file(env_var)) {
+            DBG(cerr << "Wrote .dodsrc in \"" << env_var << "\"" << endl);
             return env_var;
-		}
+        }
     }
 
     // If we're here, then we've neither found nor created the RC file.
-	DBG(cerr << "could neither find nor create a .dodsrc file" << endl);
+    DBG(cerr << "could neither find nor create a .dodsrc file" << endl);
     return "";
 }
 
 /** Examine an environment variable. If the env variable is set, then if
-    this is the name of a file, use that as the name of the RC file. If this
-    is the name of a directory, look in that directory for a file called
-    .dodsrc. If there's no such file, create it using default values for its
-    parameters. In the last case, write the .dodsrc so that the .dods_cache
-    directory is located in the directory named by DODS_CONF.
-
-    @return The pathname to the RC file or "" if another variable/method
-    should be used to find/create the RC file. */
-string
-RCReader::check_env_var(const string &variable_name)
+ this is the name of a file, use that as the name of the RC file. If this
+ is the name of a directory, look in that directory for a file called
+ .dodsrc. If there's no such file, create it using default values for its
+ parameters. In the last case, write the .dodsrc so that the .dods_cache
+ directory is located in the directory named by DODS_CONF.
+
+ @return The pathname to the RC file or "" if another variable/method
+ should be used to find/create the RC file. */
+string RCReader::check_env_var(const string &variable_name)
 {
     char *ev = getenv(variable_name.c_str());
-    if (!ev || strlen(ev) == 0)
-        return "";
+    if (!ev || strlen(ev) == 0) return "";
 
     return check_string(ev);
 }
 
-RCReader::RCReader() throw(Error)
+RCReader::RCReader() // throw (Error) jhrg 7/2/15
 {
     d_rc_file_path = "";
     d_cache_root = "";
@@ -436,33 +400,31 @@ RCReader::RCReader() throw(Error)
     string homedir = string("C:") + string(DIR_SEP_STRING) + string("Dods");
     d_rc_file_path = check_string(homedir);
     if (d_rc_file_path.empty()) {
-	homedir = string("C:") + string(DIR_SEP_STRING) + string("opendap");
-	d_rc_file_path = check_string(homedir);
+        homedir = string("C:") + string(DIR_SEP_STRING) + string("opendap");
+        d_rc_file_path = check_string(homedir);
     }
     //  Normally, I'd prefer this for WinNT-based systems.
     if (d_rc_file_path.empty())
-        d_rc_file_path = check_env_var("APPDATA");
+    d_rc_file_path = check_env_var("APPDATA");
     if (d_rc_file_path.empty())
-        d_rc_file_path = check_env_var("TEMP");
+    d_rc_file_path = check_env_var("TEMP");
     if (d_rc_file_path.empty())
-        d_rc_file_path = check_env_var("TMP");
+    d_rc_file_path = check_env_var("TMP");
 #else
     d_rc_file_path = check_env_var("DODS_CONF");
-    if (d_rc_file_path.empty())
-        d_rc_file_path = check_env_var("HOME");
+    if (d_rc_file_path.empty()) d_rc_file_path = check_env_var("HOME");
 #endif
     DBG(cerr << "Looking for .dodsrc in: " << d_rc_file_path << endl);
 
-    if (!d_rc_file_path.empty())
-        read_rc_file(d_rc_file_path);
+    if (!d_rc_file_path.empty()) read_rc_file(d_rc_file_path);
 }
 
 RCReader::~RCReader()
-{}
+{
+}
 
 /** Static void private method. */
-void
-RCReader::delete_instance()
+void RCReader::delete_instance()
 {
     if (RCReader::_instance) {
         delete RCReader::_instance;
@@ -471,8 +433,7 @@ RCReader::delete_instance()
 }
 
 /** Static void private method. */
-void
-RCReader::initialize_instance()
+void RCReader::initialize_instance()
 {
     DBGN(cerr << "RCReader::initialize_instance() ... ");
 
@@ -485,7 +446,7 @@ RCReader::initialize_instance()
 RCReader*
 RCReader::instance()
 {
-	DBG(cerr << "Entring RCReader::instance" << endl);
+    DBG(cerr << "Entring RCReader::instance" << endl);
     // The instance_control variable is defined at the top of this file.
     // 08/07/02 jhrg
     pthread_once(&instance_control, initialize_instance);
@@ -495,4 +456,20 @@ RCReader::instance()
     return _instance;
 }
 
+#if 0
+RCReader*
+RCReader::instance(const string &rc_file_path)
+{
+    DBG(cerr << "Entring RCReader::instance" << endl);
+
+    d_rc_file_path = rc_file_path;
+    // The instance_control variable is defined at the top of this file.
+    // 08/07/02 jhrg
+    pthread_once(&instance_control, initialize_instance);
+
+    DBG(cerr << "Instance value: " << hex << _instance << dec << endl);
+
+    return _instance;
+}
+#endif
 } // namespace libdap
diff --git a/RCReader.h b/RCReader.h
index 7adef35..e6afe48 100644
--- a/RCReader.h
+++ b/RCReader.h
@@ -111,7 +111,7 @@ private:
 
     static RCReader* _instance;
 
-    RCReader() throw(Error);
+    RCReader();
     ~RCReader();
 
     // File I/O methods
@@ -130,7 +130,9 @@ private:
 
 public:
     static RCReader* instance();
-
+#if 0
+    static RCReader* instance(const string &rc_file_path);
+#endif
     // GET METHODS
     string get_dods_cache_root() const throw()
     {
diff --git a/README b/README
index 8ab076b..1b2c1bc 100644
--- a/README
+++ b/README
@@ -1,3 +1,26 @@
+Updated for 3.15.0
+
+libdap now supports parallel I/O for certain data write operations,
+mostly those involving larger amounts of data - Marshaller::put_vector
+and put_vector_part. The behavior can be 'turned off' by #undef the
+symbol USE_POSIX_THREADS in the XDSStreamMarshaller classes.
+
+Added to libdap is the ability to send DAP2 responses in parts, so that
+code that builds large responses from multiple reads can write a part
+that is complete and then return to work on the next part. This is
+especially benficial for aggregations that cross many granules. The new
+method is Marshaller::put_vector_part().
+
+Added to libdap is a virtual void BaseType::clear_local_data() method
+that can be used to free the memory used by a BaseType to hold data values.
+This provides a way for the object to persist in memory without holding
+onto all of its data (which can be a substantial part of the object's
+total size).
+
+Updated for 3.14.0
+
+Bison 3 is required to build this code.
+
 Updated for 3.13.3
 
 Bug fix release
diff --git a/Sequence.cc b/Sequence.cc
index bd2b13a..aa60a2b 100644
--- a/Sequence.cc
+++ b/Sequence.cc
@@ -74,6 +74,8 @@
 #include "Constructor.h"
 #include "DMR.h"
 
+#undef CLEAR_LOCAL_DATA
+
 using namespace std;
 
 namespace libdap {
@@ -172,8 +174,9 @@ Sequence::Sequence(const string &n) :
 
  @brief The Sequence server-side constructor. */
 Sequence::Sequence(const string &n, const string &d) :
-        Constructor(n, d, dods_sequence_c), d_row_number(-1), d_starting_row_number(-1), d_row_stride(1), d_ending_row_number(
-                -1), d_unsent_data(false), d_wrote_soi(false), d_leaf_sequence(false), d_top_most(false)
+		Constructor(n, d, dods_sequence_c), d_row_number(-1), d_starting_row_number(-1),
+		d_row_stride(1), d_ending_row_number(-1), d_unsent_data(false),
+		d_wrote_soi(false), d_leaf_sequence(false), d_top_most(false)
 {
 }
 
@@ -233,7 +236,17 @@ static inline void delete_rows(BaseTypeRow *bt_row_ptr)
 
 Sequence::~Sequence()
 {
-    for_each(d_values.begin(), d_values.end(), delete_rows);
+    clear_local_data();
+}
+
+void Sequence::clear_local_data()
+{
+    if (!d_values.empty()) {
+        for_each(d_values.begin(), d_values.end(), delete_rows);
+        d_values.resize(0);
+    }
+
+    set_read_p(false);
 }
 
 Sequence &
@@ -665,10 +678,18 @@ bool Sequence::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, boo
     DBG2(cerr << "Entering Sequence::serialize for " << name() << endl);
 
     // Special case leaf sequences!
+    bool status = false;
+
     if (is_leaf_sequence())
-        return serialize_leaf(dds, eval, m, ce_eval);
+        status = serialize_leaf(dds, eval, m, ce_eval);
     else
-        return serialize_parent_part_one(dds, eval, m);
+        status = serialize_parent_part_one(dds, eval, m);
+
+#ifdef CLEAR_LOCAL_DATA
+    clear_local_data();
+#endif
+
+    return status;
 }
 
 // We know this is not a leaf Sequence. That means that this Sequence holds
diff --git a/Sequence.h b/Sequence.h
index ea2da32..4bcdbbc 100644
--- a/Sequence.h
+++ b/Sequence.h
@@ -159,148 +159,154 @@ typedef vector<BaseTypeRow *> SequenceValues;
 
  @brief Holds a sequence. */
 
-class Sequence: public Constructor {
+class Sequence: public Constructor
+{
 private:
-	// This holds the values read off the wire. Values are stored in
-	// instances of BaseTypeRow objects which hold instances of BaseType.
-	SequenceValues d_values;
+    // This holds the values read off the wire. Values are stored in
+    // instances of BaseTypeRow objects which hold instances of BaseType.
+    SequenceValues d_values;
 
-	// The number of the row that has just been deserialized. Before
-	// deserialized has been called, this field is -1.
-	int d_row_number;
+    // The number of the row that has just been deserialized. Before
+    // deserialized has been called, this field is -1.
+    int d_row_number;
 
-	// If a client asks for certain rows of a sequence using the bracket
-	// notation (<tt>[<start>:<stride>:<stop>]</tt>) primarily intended for
-	// arrays
-	// and grids, record that information in the next three fields. This
-	// information can be used by the translation software. s.a. the accessor
-	// and mutator methods for these members. Values of -1 indicate that
-	// these have not yet been set.
-	int d_starting_row_number;
-	int d_row_stride;
-	int d_ending_row_number;
+    // If a client asks for certain rows of a sequence using the bracket
+    // notation (<tt>[<start>:<stride>:<stop>]</tt>) primarily intended for
+    // arrays
+    // and grids, record that information in the next three fields. This
+    // information can be used by the translation software. s.a. the accessor
+    // and mutator methods for these members. Values of -1 indicate that
+    // these have not yet been set.
+    int d_starting_row_number;
+    int d_row_stride;
+    int d_ending_row_number;
 
-	// Used to track if data has not already been sent.
-	bool d_unsent_data;
+    // Used to track if data has not already been sent.
+    bool d_unsent_data;
 
-	// Track if the Start Of Instance marker has been written. Needed to
-	// properly send EOS for only the outer Sequence when a selection
-	// returns an empty Sequence.
-	bool d_wrote_soi;
+    // Track if the Start Of Instance marker has been written. Needed to
+    // properly send EOS for only the outer Sequence when a selection
+    // returns an empty Sequence.
+    bool d_wrote_soi;
 
-	// This signals whether the sequence is a leaf or parent.
-	bool d_leaf_sequence;
+    // This signals whether the sequence is a leaf or parent.
+    bool d_leaf_sequence;
 
-	// In a hierarchy of sequences, is this the top most?
-	bool d_top_most;
+    // In a hierarchy of sequences, is this the top most?
+    bool d_top_most;
 
-	bool is_end_of_rows(int i);
+    bool is_end_of_rows(int i);
 
-	friend class SequenceTest;
+    friend class SequenceTest;
 
 protected:
-	void m_duplicate(const Sequence &s);
-	typedef stack<SequenceValues*> sequence_values_stack_t;
+    void m_duplicate(const Sequence &s);
+    typedef stack<SequenceValues*> sequence_values_stack_t;
 
-	virtual bool serialize_parent_part_one(DDS &dds, ConstraintEvaluator &eval, Marshaller &m);
-	virtual void serialize_parent_part_two(DDS &dds, ConstraintEvaluator &eval, Marshaller &m);
-	virtual bool serialize_leaf(DDS &dds, ConstraintEvaluator &eval, Marshaller &m, bool ce_eval);
+    virtual bool serialize_parent_part_one(DDS &dds, ConstraintEvaluator &eval, Marshaller &m);
+    virtual void serialize_parent_part_two(DDS &dds, ConstraintEvaluator &eval, Marshaller &m);
+    virtual bool serialize_leaf(DDS &dds, ConstraintEvaluator &eval, Marshaller &m, bool ce_eval);
 
-	virtual void intern_data_private(ConstraintEvaluator &eval, DDS &dds,
-			sequence_values_stack_t &sequence_values_stack);
-	virtual void intern_data_for_leaf(DDS &dds, ConstraintEvaluator &eval,
-			sequence_values_stack_t &sequence_values_stack);
+    virtual void intern_data_private(ConstraintEvaluator &eval, DDS &dds,
+            sequence_values_stack_t &sequence_values_stack);
+    virtual void intern_data_for_leaf(DDS &dds, ConstraintEvaluator &eval,
+            sequence_values_stack_t &sequence_values_stack);
 
-	virtual void intern_data_parent_part_one(DDS &dds, ConstraintEvaluator &eval,
-			sequence_values_stack_t &sequence_values_stack);
+    virtual void intern_data_parent_part_one(DDS &dds, ConstraintEvaluator &eval,
+            sequence_values_stack_t &sequence_values_stack);
 
-	virtual void intern_data_parent_part_two(DDS &dds, ConstraintEvaluator &eval,
-			sequence_values_stack_t &sequence_values_stack);
+    virtual void intern_data_parent_part_two(DDS &dds, ConstraintEvaluator &eval,
+            sequence_values_stack_t &sequence_values_stack);
 #if 0
-	// See note in Sequence.cc
-        virtual void load_prototypes_with_values(int d_row_number);
+    // See note in Sequence.cc
+    virtual void load_prototypes_with_values(int d_row_number);
 #endif
 
 public:
 
-	Sequence(const string &n);
-	Sequence(const string &n, const string &d);
+    Sequence(const string &n);
+    Sequence(const string &n, const string &d);
 
-	Sequence(const Sequence &rhs);
+    Sequence(const Sequence &rhs);
 
-	virtual ~Sequence();
+    virtual ~Sequence();
 
-	Sequence &operator=(const Sequence &rhs);
+    Sequence &operator=(const Sequence &rhs);
 
-	virtual BaseType *ptr_duplicate();
+    virtual BaseType *ptr_duplicate();
 
-	virtual BaseType *transform_to_dap4(D4Group *root, Constructor *container);
+    virtual void clear_local_data();
 
-	virtual bool is_dap2_only_type();
+    virtual BaseType *transform_to_dap4(D4Group *root, Constructor *container);
 
-	virtual string toString();
+    virtual bool is_dap2_only_type();
 
-	virtual bool is_linear();
+    virtual string toString();
 
-	virtual int length() const;
+    virtual bool is_linear();
 
-	virtual int number_of_rows() const;
+    virtual int length() const;
 
-	virtual bool read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval = true);
+    virtual int number_of_rows() const;
 
-	virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
-	virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
-	virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
+    virtual bool read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval = true);
 
-	/// Rest the row number counter
-	void reset_row_number();
+    virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
+    virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
+#if 0
+    virtual bool serialize_no_release(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
+#endif
+    virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
+
+    /// Rest the row number counter
+    void reset_row_number();
 
-	int get_starting_row_number();
+    int get_starting_row_number();
 
-	virtual int get_row_stride();
+    virtual int get_row_stride();
 
-	virtual int get_ending_row_number();
+    virtual int get_ending_row_number();
 
-	virtual void set_row_number_constraint(int start, int stop, int stride = 1);
+    virtual void set_row_number_constraint(int start, int stop, int stride = 1);
 
-	/// Get the unsent data property
-	bool get_unsent_data()
-	{
-		return d_unsent_data;
-	}
+    /// Get the unsent data property
+    bool get_unsent_data()
+    {
+        return d_unsent_data;
+    }
 
-	/// Set the unsent data property
-	void set_unsent_data(bool usd)
-	{
-		d_unsent_data = usd;
-	}
+    /// Set the unsent data property
+    void set_unsent_data(bool usd)
+    {
+        d_unsent_data = usd;
+    }
 
-	virtual void set_value(SequenceValues &values);
-	virtual SequenceValues value();
-	virtual SequenceValues &value_ref();
+    virtual void set_value(SequenceValues &values);
+    virtual SequenceValues value();
+    virtual SequenceValues &value_ref();
 
-	virtual BaseType *var_value(size_t row, const string &name);
+    virtual BaseType *var_value(size_t row, const string &name);
 
-	virtual BaseType *var_value(size_t row, size_t i);
+    virtual BaseType *var_value(size_t row, size_t i);
 
-	virtual BaseTypeRow *row_value(size_t row);
-	virtual void print_one_row(ostream &out, int row, string space, bool print_row_num = false);
-	virtual void print_val_by_rows(ostream &out, string space = "", bool print_decl_p = true, bool print_row_numbers =
-			true);
-	virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
+    virtual BaseTypeRow *row_value(size_t row);
+    virtual void print_one_row(ostream &out, int row, string space, bool print_row_num = false);
+    virtual void print_val_by_rows(ostream &out, string space = "", bool print_decl_p = true, bool print_row_numbers =
+            true);
+    virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
 
-	virtual void print_one_row(FILE *out, int row, string space, bool print_row_num = false);
-	virtual void print_val_by_rows(FILE *out, string space = "", bool print_decl_p = true,
-			bool print_row_numbers = true);
-	virtual void print_val(FILE *out, string space = "", bool print_decl_p = true);
+    virtual void print_one_row(FILE *out, int row, string space, bool print_row_num = false);
+    virtual void print_val_by_rows(FILE *out, string space = "", bool print_decl_p = true,
+            bool print_row_numbers = true);
+    virtual void print_val(FILE *out, string space = "", bool print_decl_p = true);
 
-	virtual void set_leaf_p(bool state);
+    virtual void set_leaf_p(bool state);
 
-	virtual bool is_leaf_sequence();
+    virtual bool is_leaf_sequence();
 
-	virtual void set_leaf_sequence(int lvl = 1);
+    virtual void set_leaf_sequence(int lvl = 1);
 
-	virtual void dump(ostream &strm) const;
+    virtual void dump(ostream &strm) const;
 };
 
 } // namespace libdap
diff --git a/VCPP/sample/getdap.cc b/VCPP/sample/getdap.cc
index 1a72caf..dd4da57 100644
--- a/VCPP/sample/getdap.cc
+++ b/VCPP/sample/getdap.cc
@@ -166,7 +166,7 @@ int main(int argc, char *argv[])
     _setmode(_fileno(stdout), _O_BINARY);
 #endif
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             get_dds = true;
diff --git a/Vector.cc b/Vector.cc
index 467aec0..7768da5 100644
--- a/Vector.cc
+++ b/Vector.cc
@@ -38,7 +38,7 @@
 #include <cstring>
 #include <cassert>
 
-//#define DODS_DEBUG
+//#define DODS_DEBUG 1
 
 #include <sstream>
 #include <vector>
@@ -65,6 +65,8 @@
 #include "debug.h"
 #include "InternalErr.h"
 
+#undef CLEAR_LOCAL_DATA
+
 using std::cerr;
 using std::endl;
 
@@ -121,7 +123,6 @@ void Vector::m_duplicate(const Vector & v)
  */
 bool Vector::m_is_cardinal_type() const
 {
-	// TODO Is this true? It might not be
     // Not cardinal if no d_proto at all!
     if (!d_proto) {
         return false;
@@ -498,10 +499,7 @@ BaseType *Vector::var(unsigned int i)
 unsigned int Vector::width(bool constrained) const
 {
     // Jose Garcia
-	// TODO Use assert.
-	if (!d_proto) {
-        throw InternalErr(__FILE__, __LINE__, "Cannot get width since *this* object is not holding data.");
-    }
+	assert(d_proto);
 
     return length() * d_proto->width(constrained);
 }
@@ -621,28 +619,26 @@ void Vector::intern_data(ConstraintEvaluator &eval, DDS &dds)
 
 bool Vector::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, bool ce_eval)
 {
-    int i = 0;// TODO move closer to use
-
-    // TODO Time out here? or in ResponseBuilder?
     dds.timeout_on();
 
     if (!read_p())
         read(); // read() throws Error and InternalErr
 
-//#if EVAL
     if (ce_eval && !eval.eval_selection(dds, dataset()))
         return true;
-//#endif
 
     dds.timeout_off();
 
     // length() is not capacity; it must be set explicitly in read().
     int num = length();
+    bool status = false;
 
     switch (d_proto->type()) {
         case dods_byte_c:
             m.put_vector(d_buf, num, *this);
+            status = true;
             break;
+
         case dods_int16_c:
         case dods_uint16_c:
         case dods_int32_c:
@@ -650,6 +646,8 @@ bool Vector::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, boo
         case dods_float32_c:
         case dods_float64_c:
             m.put_vector(d_buf, num, d_proto->width(), *this);
+            status = true;
+
             break;
 
         case dods_str_c:
@@ -659,9 +657,10 @@ bool Vector::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, boo
 
             m.put_int(num);
 
-            for (i = 0; i < num; ++i)
+            for (int i = 0; i < num; ++i)
                 m.put_str(d_str[i]);
 
+            status = true;
             break;
 
         case dods_array_c:
@@ -674,9 +673,9 @@ bool Vector::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, boo
                 throw InternalErr(__FILE__, __LINE__, "The capacity of *this* vector is 0.");
 
             m.put_int(num);
-
-            for (i = 0; i < num; ++i)
-                d_compound_buf[i]->serialize(eval, dds, m, false);
+            status = true;
+            for (int i = 0; i < num && status; ++i)
+                status = status && d_compound_buf[i]->serialize(eval, dds, m, false);
 
             break;
 
@@ -685,7 +684,11 @@ bool Vector::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, boo
             break;
     }
 
-    return true;
+#ifdef CLEAR_LOCAL_DATA
+    clear_local_data();
+#endif
+
+    return status;
 }
 
 // Read an object from the network and internalize it. For a Vector this is
@@ -727,7 +730,7 @@ bool Vector::deserialize(UnMarshaller &um, DDS * dds, bool reuse)
                 set_length(num);
 
             if (num != (unsigned int) length())
-                throw InternalErr(__FILE__, __LINE__, "The server sent declarations and data with mismatched sizes.");
+                throw InternalErr(__FILE__, __LINE__, "The server sent declarations and data with mismatched sizes for the variable '" + name() + "'.");
 
             if (!d_buf || !reuse) {
                 // Make d_buf be large enough for length() elements of _var->type()
@@ -770,6 +773,7 @@ bool Vector::deserialize(UnMarshaller &um, DDS * dds, bool reuse)
             break;
 
         case dods_array_c:
+            // TODO
         case dods_structure_c:
         case dods_sequence_c:
         case dods_grid_c:
@@ -877,7 +881,7 @@ void Vector::intern_data(Crc32 &checksum/*, DMR &dmr, ConstraintEvaluator &eval*
                 d_compound_buf[i]->intern_data(checksum/*, dmr, eval*/);
             break;
 
-        case dods_array_c:
+        case dods_array_c:      // No Array of Array in DAP4 either...
         case dods_grid_c:
         default:
         	throw InternalErr(__FILE__, __LINE__, "Unknown or unsupported datatype (" + d_proto->type_name() + ").");
@@ -957,6 +961,10 @@ Vector::serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*
             throw InternalErr(__FILE__, __LINE__, "Unknown datatype.");
             break;
     }
+
+#ifdef CLEAR_LOCAL_DATA
+    clear_local_data();
+#endif
 }
 
 void
@@ -1276,7 +1284,7 @@ void Vector::set_vec_nocopy(unsigned int i, BaseType * val)
  * Essentially clears the _buf, d_str, and d_compound_buf of any data.
  * Useful for tightening up memory when the data is no longer needed,
  * but the object cannot yet be destroyed.
- * NOTE: this is not virtual, and only affects the data in Vector itself!
+ *
  * On exit: get_value_capacity() == 0 && !read_p()
  */
 void Vector::clear_local_data()
@@ -1500,7 +1508,6 @@ Vector::set_value_slice_from_row_major_vector(const Vector& rowMajorDataC, unsig
 		case dods_sequence_c:
 		case dods_grid_c:
 			// Not sure that this function will be used for these type of nested objects, so I will throw here.
-			// TODO impl and test this path if it's ever needed.
 			throw InternalErr(__FILE__, __LINE__,
 					funcName + "Unimplemented method for Vectors of type: array, opaque, structure, sequence or grid.");
 			break;
@@ -1570,7 +1577,7 @@ static bool types_match(Type t, T *cpp_var)
 /** @brief set the value of a byte array */
 
 template <typename T>
-bool Vector::set_value(T *v, int sz)
+bool Vector::set_value_worker(T *v, int sz)
 {
     if (!v || !types_match(d_proto->type() == dods_enum_c ? static_cast<D4Enum*>(d_proto)->element_type() : d_proto->type(), v))
         return false;
@@ -1579,129 +1586,58 @@ bool Vector::set_value(T *v, int sz)
     return true;
 }
 
-template <typename T>
-bool Vector::set_value(vector<T> &v, int sz)
+bool Vector::set_value(dods_byte *val, int sz)
 {
-    // Extra call worth the overhead?
-    return set_value(&v[0], sz);
-#if 0
-    if (!v || !types_match(d_proto->type() == dods_enum_c ? static_cast<D4Enum*>(d_proto)->element_type() : d_proto->type(), v))
-        return false;
-
-    m_set_cardinal_values_internal(&v[0], sz);
-    return true;
-#endif
+    return set_value_worker(val, sz);
 }
-
-template bool Vector::set_value(dods_byte *val, int sz);
-template bool Vector::set_value(dods_int8 *val, int sz);
-template bool Vector::set_value(dods_int16 *val, int sz);
-template bool Vector::set_value(dods_uint16 *val, int sz);
-template bool Vector::set_value(dods_int32 *val, int sz);
-template bool Vector::set_value(dods_uint32 *val, int sz);
-template bool Vector::set_value(dods_int64 *val, int sz);
-template bool Vector::set_value(dods_uint64 *val, int sz);
-template bool Vector::set_value(dods_float32 *val, int sz);
-template bool Vector::set_value(dods_float64 *val, int sz);
-
-template bool Vector::set_value(vector<dods_byte> &val, int sz);
-template bool Vector::set_value(vector<dods_int8> &val, int sz);
-template bool Vector::set_value(vector<dods_int16> &val, int sz);
-template bool Vector::set_value(vector<dods_uint16> &val, int sz);
-template bool Vector::set_value(vector<dods_int32> &val, int sz);
-template bool Vector::set_value(vector<dods_uint32> &val, int sz);
-template bool Vector::set_value(vector<dods_int64> &val, int sz);
-template bool Vector::set_value(vector<dods_uint64> &val, int sz);
-template bool Vector::set_value(vector<dods_float32> &val, int sz);
-template bool Vector::set_value(vector<dods_float64> &val, int sz);
-
-#if 0
-bool Vector::set_value(dods_byte *val, int sz)
+bool Vector::set_value(dods_int8 *val, int sz)
 {
-	assert(var()->type() == dods_byte_c || var()->type() == dods_uint8_c);
-	assert(val);
-
-    m_set_cardinal_values_internal<dods_byte> (val, sz);
-    return true;
-
-#if 0
-    // TODO Recode all of these like this and drop the bool return type?
-    if (var()->type() == dods_byte_c && val) {
-        m_set_cardinal_values_internal<dods_byte> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
-#endif
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a byte array */
-bool Vector::set_value(vector<dods_byte> &val, int sz)
+bool Vector::set_value(dods_int16 *val, int sz)
 {
-	// TODO Drop the extra call or is it not worth the optimization cost?
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of an int8 array */
-bool Vector::set_value(dods_int8 *val, int sz)
+bool Vector::set_value(dods_uint16 *val, int sz)
 {
-    if (var()->type() == dods_int8_c && val) {
-        m_set_cardinal_values_internal<dods_int8> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of an int8 array */
-bool Vector::set_value(vector<dods_int8> &val, int sz)
+bool Vector::set_value(dods_int32 *val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of an int16 array */
-bool Vector::set_value(dods_int16 *val, int sz)
+bool Vector::set_value(dods_uint32 *val, int sz)
 {
-    if (var()->type() == dods_int16_c && val) {
-        m_set_cardinal_values_internal<dods_int16> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of an int16 array */
-bool Vector::set_value(vector<dods_int16> &val, int sz)
+bool Vector::set_value(dods_int64 *val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of an int32 array */
-bool Vector::set_value(dods_int32 *val, int sz)
+bool Vector::set_value(dods_uint64 *val, int sz)
 {
-    if (var()->type() == dods_int32_c && val) {
-        m_set_cardinal_values_internal<dods_int32> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of an int32 array */
-bool Vector::set_value(vector<dods_int32> &val, int sz)
+bool Vector::set_value(dods_float32 *val, int sz)
+{
+    return set_value_worker(val, sz);
+}
+bool Vector::set_value(dods_float64 *val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
 
-/** @brief set the value of an int64 array */
-bool Vector::set_value(dods_int64 *val, int sz)
+/** @brief set the value of a string or url array */
+bool Vector::set_value(string *val, int sz)
 {
-    if (var()->type() == dods_int64_c && val) {
-        m_set_cardinal_values_internal<dods_int64> (val, sz);
+    if ((var()->type() == dods_str_c || var()->type() == dods_url_c) && val) {
+        d_str.resize(sz);
+        d_capacity = sz;
+        for (register int t = 0; t < sz; t++) {
+            d_str[t] = val[t];
+        }
+        set_length(sz);
+        set_read_p(true);
         return true;
     }
     else {
@@ -1709,120 +1645,53 @@ bool Vector::set_value(dods_int64 *val, int sz)
     }
 }
 
-/** @brief set the value of an int64 array */
-bool Vector::set_value(vector<dods_int64> &val, int sz)
+template<typename T>
+bool Vector::set_value_worker(vector<T> &v, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value(&v[0], sz);
 }
 
-/** @brief set the value of a uint16 array */
-bool Vector::set_value(dods_uint16 *val, int sz)
+bool Vector::set_value(vector<dods_byte> &val, int sz)
 {
-    if (var()->type() == dods_uint16_c && val) {
-        m_set_cardinal_values_internal<dods_uint16> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a uint16 array */
-bool Vector::set_value(vector<dods_uint16> &val, int sz)
+bool Vector::set_value(vector<dods_int8> &val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a uint32 array */
-bool Vector::set_value(dods_uint32 *val, int sz)
+bool Vector::set_value(vector<dods_int16> &val, int sz)
 {
-    if (var()->type() == dods_uint32_c && val) {
-        m_set_cardinal_values_internal<dods_uint32> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a uint32 array */
-bool Vector::set_value(vector<dods_uint32> &val, int sz)
+bool Vector::set_value(vector<dods_uint16> &val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a uint64 array */
-bool Vector::set_value(dods_uint64 *val, int sz)
+bool Vector::set_value(vector<dods_int32> &val, int sz)
 {
-    if (var()->type() == dods_uint64_c && val) {
-        m_set_cardinal_values_internal<dods_uint64> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a uint64 array */
-bool Vector::set_value(vector<dods_uint64> &val, int sz)
+bool Vector::set_value(vector<dods_uint32> &val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a float32 array */
-bool Vector::set_value(dods_float32 *val, int sz)
+bool Vector::set_value(vector<dods_int64> &val, int sz)
 {
-    if (var()->type() == dods_float32_c && val) {
-        m_set_cardinal_values_internal<dods_float32> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a float32 array */
-bool Vector::set_value(vector<dods_float32> &val, int sz)
+bool Vector::set_value(vector<dods_uint64> &val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a float64 array */
-bool Vector::set_value(dods_float64 *val, int sz)
+bool Vector::set_value(vector<dods_float32> &val, int sz)
 {
-    if (var()->type() == dods_float64_c && val) {
-        m_set_cardinal_values_internal<dods_float64> (val, sz);
-        return true;
-    }
-    else {
-        return false;
-    }
+    return set_value_worker(val, sz);
 }
-
-/** @brief set the value of a float64 array */
 bool Vector::set_value(vector<dods_float64> &val, int sz)
 {
-    return set_value(&val[0], sz);
+    return set_value_worker(val, sz);
 }
-#endif
 
-/** @brief set the value of a string or url array */
-bool Vector::set_value(string *val, int sz)
-{
-    if ((var()->type() == dods_str_c || var()->type() == dods_url_c) && val) {
-        d_str.resize(sz);
-        d_capacity = sz;
-        for (register int t = 0; t < sz; t++) {
-            d_str[t] = val[t];
-        }
-        set_length(sz);
-        set_read_p(true);
-        return true;
-    }
-    else {
-        return false;
-    }
-}
 
 /** @brief set the value of a string or url array */
 bool Vector::set_value(vector<string> &val, int sz)
@@ -1862,7 +1731,7 @@ bool Vector::set_value(vector<string> &val, int sz)
  * @param b A pointer to the memory to hold the data; must be at least
  * length() * sizeof(dods_byte) in size.*/
 template <typename T>
-void Vector::value(vector<unsigned int> *indices, T *b) const
+void Vector::value_worker(vector<unsigned int> *indices, T *b) const
 {
    // unsigned long currentIndex;
 #if 0
@@ -1889,7 +1758,18 @@ void Vector::value(vector<unsigned int> *indices, T *b) const
         b[i] = reinterpret_cast<T*>(d_buf )[currentIndex]; // I like this version - and it works!
     }
 }
+void Vector::value(vector<unsigned int> *indices, dods_byte *b) const    { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_int8 *b) const    { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_int16 *b) const   { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_uint16 *b) const  { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_int32 *b) const   { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_uint32 *b) const  { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_int64 *b) const   { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_uint64 *b) const  { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_float32 *b) const { value_worker(indices, b); }
+void Vector::value(vector<unsigned int> *indices, dods_float64 *b) const { value_worker(indices, b); }
 
+#if 0
 template void Vector::value(vector<unsigned int> *indices, dods_byte *b) const;
 template void Vector::value(vector<unsigned int> *indices, dods_int8 *b) const;
 template void Vector::value(vector<unsigned int> *indices, dods_int16 *b) const;
@@ -1900,167 +1780,6 @@ template void Vector::value(vector<unsigned int> *indices, dods_int64 *b) const;
 template void Vector::value(vector<unsigned int> *indices, dods_uint64 *b) const;
 template void Vector::value(vector<unsigned int> *indices, dods_float32 *b) const;
 template void Vector::value(vector<unsigned int> *indices, dods_float64 *b) const;
-
-#if 0
-void Vector::value(vector<unsigned int> *subsetIndex, dods_byte *b) const
-{
-   // unsigned long currentIndex;
-#if 0
-	// Iterator version. Not tested, jhrg 8/14/13
-	for (vector<unsigned int>::iterator i = subsetIndex->begin(); i != subsetIndex->end(); ++i) {
-		unsigned long currentIndex = *i;
-        if(currentIndex > (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i - subsetIndex->begin() <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_byte*>(d_buf )[currentIndex];
-	}
-#endif
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-    	unsigned long currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_byte*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
-
-void Vector::value(vector<unsigned int> *subsetIndex, dods_int8 *b) const
-{
-   // unsigned long currentIndex;
-#if 0
-	// Iterator version. Not tested, jhrg 8/14/13
-	for (vector<unsigned int>::iterator i = subsetIndex->begin(); i != subsetIndex->end(); ++i) {
-		unsigned long currentIndex = *i;
-        if(currentIndex > (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i - subsetIndex->begin() <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_byte*>(d_buf )[currentIndex];
-	}
-#endif
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-    	unsigned long currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_int8*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
-
-/** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
-void Vector::value(vector<unsigned int> *subsetIndex, dods_uint16 *b) const
-{
-    unsigned long currentIndex;
-
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-        currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_uint16*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
-
-
-/** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
-void Vector::value(vector<unsigned int> *subsetIndex, dods_int16 *b) const
-{
-    unsigned long currentIndex;
-
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-        currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_int16*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
-
-/** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
-void Vector::value(vector<unsigned int> *subsetIndex, dods_uint32 *b) const
-{
-    unsigned long currentIndex;
-
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-        currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_uint32*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
-
-/** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
-void Vector::value(vector<unsigned int> *subsetIndex, dods_int32 *b) const
-{
-    unsigned long currentIndex;
-
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-        currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_int32*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
-
-/** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
-void Vector::value(vector<unsigned int> *subsetIndex, dods_float32 *b) const
-{
-    unsigned long currentIndex;
-
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-        currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-
-        b[i] = reinterpret_cast<dods_float32*>(d_buf )[currentIndex];
-    }
-}
-
-/** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
-void Vector::value(vector<unsigned int> *subsetIndex, dods_float64 *b) const
-{
-    unsigned long currentIndex;
-
-    for(unsigned long i=0; i<subsetIndex->size() ;++i){
-        currentIndex = (*subsetIndex)[i] ;
-        if(currentIndex> (unsigned int)length()){
-            stringstream s;
-            s << "Vector::value() - Subset index[" << i <<  "] = " << currentIndex << " references a value that is " <<
-                    "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
-            throw Error(s.str());
-        }
-        b[i] = reinterpret_cast<dods_float64*>(d_buf )[currentIndex]; // I like this version - and it works!
-    }
-}
 #endif
 
 /** @brief Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. **/
@@ -2083,14 +1802,25 @@ void Vector::value(vector<unsigned int> *subsetIndex, vector<string> &b) const
 }
 
 template <typename T>
-void Vector::value(T *v) const
+void Vector::value_worker(T *v) const
 {
     // Only copy if v is not null and the proto's  type matches.
     // For Enums, use the element type since type == dods_enum_c.
     if (v && types_match(d_proto->type() == dods_enum_c ? static_cast<D4Enum*>(d_proto)->element_type() : d_proto->type(), v))
         memcpy(v, d_buf, length() * sizeof(T));
 }
+void Vector::value(dods_byte *b) const    { value_worker(b); }
+void Vector::value(dods_int8 *b) const    { value_worker(b); }
+void Vector::value(dods_int16 *b) const   { value_worker(b); }
+void Vector::value(dods_uint16 *b) const  { value_worker(b); }
+void Vector::value(dods_int32 *b) const   { value_worker(b); }
+void Vector::value(dods_uint32 *b) const  { value_worker(b); }
+void Vector::value(dods_int64 *b) const   { value_worker(b); }
+void Vector::value(dods_uint64 *b) const  { value_worker(b); }
+void Vector::value(dods_float32 *b) const { value_worker(b); }
+void Vector::value(dods_float64 *b) const { value_worker(b); }
 
+#if 0
 template void Vector::value(dods_byte *v) const;
 template void Vector::value(dods_int8 *v) const;
 template void Vector::value(dods_int16 *v) const;
@@ -2101,95 +1831,9 @@ template void Vector::value(dods_int64 *v) const;
 template void Vector::value(dods_uint64 *v) const;
 template void Vector::value(dods_float32 *v) const;
 template void Vector::value(dods_float64 *v) const;
-
-#if 0
-/** @brief Get a copy of the data held by this variable.
- Read data from this variable's internal storage and load it into the
- memory referenced by \c b. The argument \c b must point to enough memory
- to hold length() Bytes.
-
- @param b A pointer to the memory to hold the data; must be at least
- length() * sizeof(dods_byte) in size.*/
-void Vector::value(dods_byte *b) const
-{
-    if (b && d_proto->type() == dods_byte_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_byte));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_int8 *b) const
-{
-    if (b && d_proto->type() == dods_int8_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_int8));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_uint16 *b) const
-{
-    if (b && d_proto->type() == dods_uint16_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_uint16));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_int16 *b) const
-{
-    if (b && d_proto->type() == dods_int16_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_int16));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_uint32 *b) const
-{
-    if (b && d_proto->type() == dods_uint32_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_uint32));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_int32 *b) const
-{
-    if (b && d_proto->type() == dods_int32_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_int32));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_uint64 *b) const
-{
-    if (b && d_proto->type() == dods_uint64_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_uint64));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_int64 *b) const
-{
-    if (b && d_proto->type() == dods_int64_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_int64));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_float32 *b) const
-{
-    if (b && d_proto->type() == dods_float32_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_float32));
-    }
-}
-
-/** @brief Get a copy of the data held by this variable. */
-void Vector::value(dods_float64 *b) const
-{
-    if (b && d_proto->type() == dods_float64_c) {
-        memcpy(b, d_buf, length() * sizeof(dods_float64));
-    }
-}
 #endif
 
+
 /** @brief Get a copy of the data held by this variable. */
 void Vector::value(vector<string> &b) const
 {
@@ -2227,7 +1871,7 @@ void *Vector::value()
 void Vector::add_var(BaseType * v, Part /*p*/)
 {
 #if 0
-	//TODO Why doesn't this work?  tried all 3 variants. jhrg 8/14/13
+	// Why doesn't this work?  tried all 3 variants. jhrg 8/14/13
 	Vector::add_var_nocopy(v->ptr_duplicate(), p);
 	add_var_nocopy(v->ptr_duplicate(), p);
 	add_var_nocopy(v->ptr_duplicate());
@@ -2338,23 +1982,24 @@ void Vector::dump(ostream &strm) const
     }
     DapIndent::UnIndent();
     if (d_buf) {
-        switch (d_proto->type()) {
+        switch (d_proto != 0 ? d_proto->type() : 0) {
             case dods_byte_c:
-            case dods_char_c: {
+            case dods_char_c:
                 strm << DapIndent::LMarg << "_buf: ";
                 strm.write(d_buf, d_length);
                 strm << endl;
-            }
                 break;
-            default: {
+
+            case 0:
+            default:
                 strm << DapIndent::LMarg << "_buf: " << (void *) d_buf << endl;
-            }
                 break;
         }
     }
     else {
         strm << DapIndent::LMarg << "_buf: EMPTY" << endl;
     }
+
     DapIndent::UnIndent();
 }
 
diff --git a/Vector.h b/Vector.h
index d5a056c..a21e25b 100644
--- a/Vector.h
+++ b/Vector.h
@@ -93,6 +93,20 @@ private:
     // or the capacity of d_str for strings or capacity of _vec.
     unsigned int d_capacity;
 
+    friend class MarshallerTest;
+
+    /*
+     * Made these template methods private because they can't be
+     * overridden anyways (because c++...) - ndp 08/14/2015
+     *
+     */
+
+    template <typename T> void value_worker(T *v) const;
+    template <typename T> void value_worker(vector<unsigned int> *indices, T *b) const;
+
+    template <typename T> bool set_value_worker(T *v, int sz);
+    template <typename T> bool set_value_worker(vector<T> &v, int sz);
+
 protected:
     // This function copies the private members of Vector.
     void m_duplicate(const Vector &v);
@@ -113,6 +127,39 @@ public:
     Vector &operator=(const Vector &rhs);
     virtual BaseType *ptr_duplicate() = 0;
 
+    /**
+     * Provide access to internal data by reference. Callers cannot delete this
+     * but can pass them to other methods.
+     *
+     * @note Added so that the NCML handler can code some optimizations in its
+     * specialized versions of Array. jhrg 8/14/15
+     * @return A reference to the data buffer for Vectors/Arrays of the cardinal types.
+     */
+    char *get_buf() {
+        return d_buf;
+    }
+
+    /**
+     * Provide access to internal string data by reference. Callers cannot delete this
+     * but can pass them to other methods.
+     *
+     * @return A reference to a vector of strings
+     */
+    vector<string> &get_str() {
+        return d_str;
+    }
+
+    /**
+     * Provide access to internal data by reference. Callers cannot delete this
+     * but can pass them to other methods.
+     *
+     * @return A reference to a vector of BaseType pointers. Treat with care; never
+     * delete these!
+     */
+    vector<BaseType*> &get_compound_buf() {
+        return d_compound_buf;
+    }
+
 #if 0
     virtual bool is_dap2_only_type();
 #endif
@@ -136,12 +183,18 @@ public:
     // DAP2
     virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
     virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
+#if 0
+    virtual bool serialize_no_release(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
+#endif
     virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
 
     // DAP4
     virtual void compute_checksum(Crc32 &checksum);
-    virtual void intern_data(Crc32 &checksum/*, DMR &dmr, ConstraintEvaluator &eval*/);
-    virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
+    virtual void intern_data(Crc32 &checksum);
+    virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
+#if 0
+    virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
+#endif
     virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
 
     virtual unsigned int val2buf(void *val, bool reuse = false);
@@ -152,7 +205,7 @@ public:
 
     void vec_resize(int l);
 
-    void clear_local_data();
+    virtual void clear_local_data();
 
     virtual unsigned int get_value_capacity() const;
     virtual void reserve_value_capacity(unsigned int numElements);
@@ -160,44 +213,32 @@ public:
 
     virtual unsigned int set_value_slice_from_row_major_vector(const Vector& rowMajorData, unsigned int startElement);
 
-    template <typename T> bool set_value(T *v, int sz);
-    template <typename T> bool set_value(vector<T> &v, int sz);
-#if 0
-    virtual bool set_value(dods_byte *val, int sz);
-    virtual bool set_value(vector<dods_byte> &val, int sz);
 
+    virtual bool set_value(dods_byte *val, int sz);
     virtual bool set_value(dods_int8 *val, int sz);
-    virtual bool set_value(vector<dods_int8> &val, int sz);
-
     virtual bool set_value(dods_int16 *val, int sz);
-    virtual bool set_value(vector<dods_int16> &val, int sz);
-
     virtual bool set_value(dods_uint16 *val, int sz);
-    virtual bool set_value(vector<dods_uint16> &val, int sz);
-
     virtual bool set_value(dods_int32 *val, int sz);
-    virtual bool set_value(vector<dods_int32> &val, int sz);
-
     virtual bool set_value(dods_uint32 *val, int sz);
-    virtual bool set_value(vector<dods_uint32> &val, int sz);
-
     virtual bool set_value(dods_int64 *val, int sz);
-    virtual bool set_value(vector<dods_int64> &val, int sz);
-
     virtual bool set_value(dods_uint64 *val, int sz);
-    virtual bool set_value(vector<dods_uint64> &val, int sz);
-
     virtual bool set_value(dods_float32 *val, int sz);
-    virtual bool set_value(vector<dods_float32> &val, int sz);
-
     virtual bool set_value(dods_float64 *val, int sz);
-    virtual bool set_value(vector<dods_float64> &val, int sz);
-#endif
     virtual bool set_value(string *val, int sz);
+
+
+    virtual bool set_value(vector<dods_byte> &val, int sz);
+    virtual bool set_value(vector<dods_int8> &val, int sz);
+    virtual bool set_value(vector<dods_int16> &val, int sz);
+    virtual bool set_value(vector<dods_uint16> &val, int sz);
+    virtual bool set_value(vector<dods_int32> &val, int sz);
+    virtual bool set_value(vector<dods_uint32> &val, int sz);
+    virtual bool set_value(vector<dods_int64> &val, int sz);
+    virtual bool set_value(vector<dods_uint64> &val, int sz);
+    virtual bool set_value(vector<dods_float32> &val, int sz);
+    virtual bool set_value(vector<dods_float64> &val, int sz);
     virtual bool set_value(vector<string> &val, int sz);
 
-    template <typename T> void value(T *v) const;
-#if 0
     virtual void value(dods_byte *b) const;
     virtual void value(dods_int8 *b) const;
     virtual void value(dods_int16 *b) const;
@@ -208,21 +249,19 @@ public:
     virtual void value(dods_uint64 *b) const;
     virtual void value(dods_float32 *b) const;
     virtual void value(dods_float64 *b) const;
-#endif
     virtual void value(vector<string> &b) const;
 
-    template <typename T> void value(vector<unsigned int> *indices, T *b) const;
-#if 0
-    void value(vector<unsigned int> *index, dods_byte *b) const;
-    void value(vector<unsigned int> *index, dods_int8 *b) const;
-    void value(vector<unsigned int> *index, dods_int16 *b) const;
-    void value(vector<unsigned int> *index, dods_uint16 *b) const;
-    void value(vector<unsigned int> *index, dods_int32 *b) const;
-    void value(vector<unsigned int> *index, dods_uint32 *b) const;
-    void value(vector<unsigned int> *index, dods_float32 *b) const;
-    void value(vector<unsigned int> *index, dods_float64 *b) const;
-#endif
-    void value(vector<unsigned int> *index, vector<string> &b) const;
+    virtual void value(vector<unsigned int> *indices, dods_byte *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_int8 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_int16 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_uint16 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_int32 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_uint32 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_int64 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_uint64 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_float32 *b) const;
+    virtual void value(vector<unsigned int> *indices, dods_float64 *b) const;
+    virtual void value(vector<unsigned int> *index, vector<string> &b) const;
 
     virtual void *value();
 
diff --git a/XDRFileMarshaller.cc b/XDRFileMarshaller.cc
index 9ba97f4..2cecdc3 100644
--- a/XDRFileMarshaller.cc
+++ b/XDRFileMarshaller.cc
@@ -53,158 +53,143 @@
 
 namespace libdap {
 
-XDRFileMarshaller::XDRFileMarshaller( FILE *out )
-    : _sink( 0 )
+XDRFileMarshaller::XDRFileMarshaller(FILE *out) :
+    _sink(0)//, d_out(out)
 {
-    _sink = new_xdrstdio( out, XDR_ENCODE ) ;
+    _sink = new_xdrstdio(out, XDR_ENCODE);
 }
 
-XDRFileMarshaller::XDRFileMarshaller()
-    : Marshaller(),
-      _sink( 0 )
+XDRFileMarshaller::XDRFileMarshaller() :
+    Marshaller(), _sink(0)//, d_out(0)
 {
-    throw InternalErr( __FILE__, __LINE__, "Default constructor not implemented." ) ;
+    throw InternalErr( __FILE__, __LINE__, "Default constructor not implemented.");
 }
 
-XDRFileMarshaller::XDRFileMarshaller( const XDRFileMarshaller &m )
-    : Marshaller( m ),
-      _sink( 0 )
+XDRFileMarshaller::XDRFileMarshaller(const XDRFileMarshaller &m) :
+    Marshaller(m), _sink(0)//, d_out(0)
 {
-    throw InternalErr( __FILE__, __LINE__, "Copy constructor not implemented." ) ;
+    throw InternalErr( __FILE__, __LINE__, "Copy constructor not implemented.");
 }
 
 XDRFileMarshaller &
-XDRFileMarshaller::operator=( const XDRFileMarshaller & )
+XDRFileMarshaller::operator=(const XDRFileMarshaller &)
 {
-    throw InternalErr( __FILE__, __LINE__, "Copy operator not implemented." ) ;
+    throw InternalErr( __FILE__, __LINE__, "Copy operator not implemented.");
 
-    return *this ;
+    return *this;
 }
 
-XDRFileMarshaller::~XDRFileMarshaller( )
+XDRFileMarshaller::~XDRFileMarshaller()
 {
-    delete_xdrstdio( _sink ) ;
+    delete_xdrstdio(_sink);
 }
 
-void
-XDRFileMarshaller::put_byte( dods_byte val )
+void XDRFileMarshaller::put_byte(dods_byte val)
 {
-    if( !xdr_char( _sink, (char *)&val ) )
-        throw Error("Network I/O Error. Could not send byte data.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_char(_sink, (char *) &val))
+        throw Error(
+            "Network I/O Error. Could not send byte data.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_int16( dods_int16 val )
+void XDRFileMarshaller::put_int16(dods_int16 val)
 {
-    if( !XDR_INT16( _sink, &val ) )
-        throw Error("Network I/O Error. Could not send int 16 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+    if (!XDR_INT16(_sink, &val))
+        throw Error(
+            "Network I/O Error. Could not send int 16 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_int32( dods_int32 val )
+void XDRFileMarshaller::put_int32(dods_int32 val)
 {
-    if( !XDR_INT32( _sink, &val ) )
-        throw Error("Network I/O Error. Could not read int 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+    if (!XDR_INT32(_sink, &val))
+        throw Error(
+            "Network I/O Error. Could not read int 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_float32( dods_float32 val )
+void XDRFileMarshaller::put_float32(dods_float32 val)
 {
-    if( !xdr_float( _sink, &val ) )
-        throw Error("Network I/O Error. Could not send float 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+    if (!xdr_float(_sink, &val))
+        throw Error(
+            "Network I/O Error. Could not send float 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_float64( dods_float64 val )
+void XDRFileMarshaller::put_float64(dods_float64 val)
 {
-    if( !xdr_double( _sink, &val ) )
-        throw Error("Network I/O Error. Could not send float 64 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+    if (!xdr_double(_sink, &val))
+        throw Error(
+            "Network I/O Error. Could not send float 64 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_uint16( dods_uint16 val )
+void XDRFileMarshaller::put_uint16(dods_uint16 val)
 {
-    if( !XDR_UINT16( _sink, &val ) )
-        throw Error("Network I/O Error. Could not send uint 16 data. This may be due to a\nbug in libdap or a problem with the network connection.");
+    if (!XDR_UINT16(_sink, &val))
+        throw Error(
+            "Network I/O Error. Could not send uint 16 data. This may be due to a\nbug in libdap or a problem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_uint32( dods_uint32 val )
+void XDRFileMarshaller::put_uint32(dods_uint32 val)
 {
-    if( !XDR_UINT32( _sink, &val ) )
-        throw Error("Network I/O Error. Could not send uint 32 data. This may be due to a\nbug in libdap or a problem with the network connection.");
+    if (!XDR_UINT32(_sink, &val))
+        throw Error(
+            "Network I/O Error. Could not send uint 32 data. This may be due to a\nbug in libdap or a problem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_str( const string &val )
+void XDRFileMarshaller::put_str(const string &val)
 {
-    const char *out_tmp = val.c_str() ;
+    const char *out_tmp = val.c_str();
 
-    if( !xdr_string( _sink, (char **)&out_tmp, max_str_len) )
-        throw Error("Network I/O Error. Could not send string data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+    if (!xdr_string(_sink, (char **) &out_tmp, max_str_len))
+        throw Error(
+            "Network I/O Error. Could not send string data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_url( const string &val )
+void XDRFileMarshaller::put_url(const string &val)
 {
-    put_str( val ) ;
+    put_str(val);
 }
 
-void
-XDRFileMarshaller::put_opaque( char *val, unsigned int len )
+void XDRFileMarshaller::put_opaque(char *val, unsigned int len)
 {
-    if( !xdr_opaque( _sink, val, len ) )
-        throw Error("Network I/O Error. Could not send opaque data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+    if (!xdr_opaque(_sink, val, len))
+        throw Error(
+            "Network I/O Error. Could not send opaque data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_int( int val )
+void XDRFileMarshaller::put_int(int val)
 {
-    if( !xdr_int( _sink, &val) )
-	throw Error("Network I/O Error(1). This may be due to a bug in libdap or a\nproblem with the network connection.");
+    if (!xdr_int(_sink, &val))
+        throw Error(
+            "Network I/O Error(1). This may be due to a bug in libdap or a\nproblem with the network connection.");
 }
 
-void
-XDRFileMarshaller::put_vector( char *val, int num, Vector & )
+void XDRFileMarshaller::put_vector(char *val, int num, Vector &)
 {
-    if (!val)
-	throw InternalErr(__FILE__, __LINE__,
-			  "Buffer pointer is not set.");
+    if (!val) throw InternalErr(__FILE__, __LINE__, "Buffer pointer is not set.");
 
-    put_int( num ) ;
+    put_int(num);
 
-    if( !xdr_bytes( _sink, (char **)&val,
-		    (unsigned int *) &num,
-		    DODS_MAX_ARRAY) )
-    {
-	throw Error("Network I/O Error(2). This may be due to a bug in libdap or a\nproblem with the network connection.");
+    if (!xdr_bytes(_sink, (char **) &val, (unsigned int *) &num, DODS_MAX_ARRAY)) {
+        throw Error(
+            "Network I/O Error(2). This may be due to a bug in libdap or a\nproblem with the network connection.");
     }
 }
 
-void
-XDRFileMarshaller::put_vector( char *val, int num, int width, Vector &vec )
+void XDRFileMarshaller::put_vector(char *val, int num, int width, Vector &vec)
 {
-    if (!val)
-	throw InternalErr(__FILE__, __LINE__,
-			  "Buffer pointer is not set.");
+    if (!val) throw InternalErr(__FILE__, __LINE__, "Buffer pointer is not set.");
 
-    put_int( num ) ;
+    put_int(num);
 
-    BaseType *var = vec.var() ;
-    if( !xdr_array( _sink, (char **)&val,
-		    (unsigned int *) & num,
-		    DODS_MAX_ARRAY, width,
-		    XDRUtils::xdr_coder( var->type() ) ) )
-    {
-	throw Error("Network I/O Error(2). This may be due to a bug in libdap or a\nproblem with the network connection.");
+    BaseType *var = vec.var();
+    if (!xdr_array(_sink, (char **) &val, (unsigned int *) &num, DODS_MAX_ARRAY, width,
+        XDRUtils::xdr_coder(var->type()))) {
+        throw Error(
+            "Network I/O Error(2). This may be due to a bug in libdap or a\nproblem with the network connection.");
     }
 }
 
-void
-XDRFileMarshaller::dump(ostream &strm) const
+void XDRFileMarshaller::dump(ostream &strm) const
 {
-    strm << DapIndent::LMarg << "XDRFileMarshaller::dump - ("
-         << (void *)this << ")" << endl ;
+    strm << DapIndent::LMarg << "XDRFileMarshaller::dump - (" << (void *) this << ")" << endl;
 }
 
 } // namespace libdap
diff --git a/XDRFileMarshaller.h b/XDRFileMarshaller.h
index decb240..779add0 100644
--- a/XDRFileMarshaller.h
+++ b/XDRFileMarshaller.h
@@ -35,47 +35,49 @@
 
 #include "Marshaller.h"
 #include "XDRUtils.h"
+#if 0
+#include "Array.h"
+#include "Vector.h"
+#endif
 
-namespace libdap
-{
+namespace libdap {
 
 /** @brief marshaller that knows how to marshall/serialize dap data objects
  * to a file using XDR
  */
-class XDRFileMarshaller : public Marshaller
-{
+class XDRFileMarshaller: public Marshaller {
 private:
-    XDR *			_sink ;
-    				XDRFileMarshaller() ;
-    				XDRFileMarshaller( const XDRFileMarshaller &m ) ;
-    XDRFileMarshaller &		operator=( const XDRFileMarshaller & ) ;
+    XDR * _sink;
+
+    XDRFileMarshaller();
+    XDRFileMarshaller(const XDRFileMarshaller &m);
+    XDRFileMarshaller & operator=(const XDRFileMarshaller &);
 public:
-    				XDRFileMarshaller( FILE *out ) ;
-    virtual			~XDRFileMarshaller() ;
+    XDRFileMarshaller(FILE *out);
+    virtual ~XDRFileMarshaller();
+
+    virtual void put_byte(dods_byte val);
 
-    virtual void		put_byte( dods_byte val ) ;
+    virtual void put_int16(dods_int16 val);
+    virtual void put_int32(dods_int32 val);
 
-    virtual void		put_int16( dods_int16 val ) ;
-    virtual void		put_int32( dods_int32 val ) ;
+    virtual void put_float32(dods_float32 val);
+    virtual void put_float64(dods_float64 val);
 
-    virtual void		put_float32( dods_float32 val ) ;
-    virtual void		put_float64( dods_float64 val ) ;
+    virtual void put_uint16(dods_uint16 val);
+    virtual void put_uint32(dods_uint32 val);
 
-    virtual void		put_uint16( dods_uint16 val ) ;
-    virtual void		put_uint32( dods_uint32 val ) ;
+    virtual void put_str(const string &val);
+    virtual void put_url(const string &val);
 
-    virtual void		put_str( const string &val ) ;
-    virtual void		put_url( const string &val ) ;
+    virtual void put_opaque(char *val, unsigned int len);
+    virtual void put_int(int val);
 
-    virtual void		put_opaque( char *val, unsigned int len ) ;
-    virtual void		put_int( int val ) ;
+    virtual void put_vector(char *val, int num, Vector &vec);
+    virtual void put_vector(char *val, int num, int width, Vector &vec);
 
-    virtual void		put_vector( char *val, int num,
-					    Vector &vec ) ;
-    virtual void		put_vector( char *val, int num, int width,
-                                            Vector &vec ) ;
-    virtual void		dump(ostream &strm) const ;
-} ;
+    virtual void dump(ostream &strm) const;
+};
 
 } // namespace libdap
 
diff --git a/XDRStreamMarshaller.cc b/XDRStreamMarshaller.cc
index 5b5b99b..958ecb8 100644
--- a/XDRStreamMarshaller.cc
+++ b/XDRStreamMarshaller.cc
@@ -32,26 +32,40 @@
 
 #include "config.h"
 
-#include "XDRStreamMarshaller.h"
+#ifdef HAVE_PTHREAD_H
+#include <pthread.h>
+#endif
+
+#include <cassert>
 
 #include <iostream>
 #include <sstream>
 #include <iomanip>
 
-using namespace std;
-
-//#define DODS_DEBUG 1
+// #define DODS_DEBUG
 
+#include "XDRStreamMarshaller.h"
+#ifdef USE_POSIX_THREADS
+#include "MarshallerThread.h"
+#endif
 #include "Vector.h"
+#include "XDRUtils.h"
 #include "util.h"
+
 #include "debug.h"
 
+using namespace std;
+
+// Build this code so it does not use pthreads to write some kinds of
+// data (see the put_vector() and put_vector_part() methods) in a child thread.
+// #undef USE_POSIX_THREADS
+
 namespace libdap {
 
 char *XDRStreamMarshaller::d_buf = 0;
-
 #define XDR_DAP_BUFF_SIZE 256
 
+
 /** Build an instance of XDRStreamMarshaller. Bind the C++ stream out to this
  * instance. If the checksum parameter is true, initialize a checksum buffer
  * and enable the use of the reset_checksum() and get_checksum() methods.
@@ -60,301 +74,216 @@ char *XDRStreamMarshaller::d_buf = 0;
  * @param checksum If true, compute checksums. False by default
  * @param write_data If true, write data values. True by default
  */
-XDRStreamMarshaller::XDRStreamMarshaller(ostream &out) : d_out(out)
+XDRStreamMarshaller::XDRStreamMarshaller(ostream &out) :
+    d_out(out), d_partial_put_byte_count(0), tm(0)
 {
-    if (!d_buf)
-        d_buf = (char *) malloc(XDR_DAP_BUFF_SIZE);
-    if (!d_buf)
-        throw Error("Failed to allocate memory for data serialization.");
+    if (!d_buf) d_buf = (char *) malloc(XDR_DAP_BUFF_SIZE);
+    if (!d_buf) throw Error("Failed to allocate memory for data serialization.");
 
-    xdrmem_create( &d_sink, d_buf, XDR_DAP_BUFF_SIZE, XDR_ENCODE);
+    xdrmem_create(&d_sink, d_buf, XDR_DAP_BUFF_SIZE, XDR_ENCODE);
 
-#if CHECKSUMS
-    if (checksum) {
-        _MD_CTX = EVP_MD_CTX_create();
-    }
+#ifdef USE_POSIX_THREADS
+    tm = new MarshallerThread;
 #endif
 }
 
-XDRStreamMarshaller::XDRStreamMarshaller() :
-    Marshaller(), d_out(cout)
-{
-    throw InternalErr(__FILE__, __LINE__, "Default constructor not implemented.");
-}
-
-XDRStreamMarshaller::XDRStreamMarshaller(const XDRStreamMarshaller &m) :
-    Marshaller(m), d_out(cout)
-{
-    throw InternalErr(__FILE__, __LINE__, "Copy constructor not implemented.");
-}
-
-XDRStreamMarshaller &
-XDRStreamMarshaller::operator=(const XDRStreamMarshaller &)
-{
-    throw InternalErr(__FILE__, __LINE__, "Copy operator not implemented.");
-
-    return *this;
-}
-
 XDRStreamMarshaller::~XDRStreamMarshaller()
 {
-    xdr_destroy(&d_sink);
-
-#if CHECKSUMS
-    if (_MD_CTX)
-        EVP_MD_CTX_destroy(_MD_CTX);
-#endif
-}
-
-#if 0
-/** Initialize the checksum buffer. This resets the checksum calculation.
- * @exception InternalErr if called when the object was created without
- * checksum support.
- */
-void XDRStreamMarshaller::reset_checksum()
-{
-#if CHECKSUMS
-    if (_MD_CTX == 0)
-        throw InternalErr( __FILE__, __LINE__, "reset_checksum() called by checksum is not enabled.");
-
-    if (EVP_DigestInit_ex(_MD_CTX, EVP_sha1(), 0) == 0)
-        throw Error("Failed to initialize checksum object.");
-
-    _checksum_ctx_valid = true;
-#endif
-}
-
-/** Get the current checksum. It is not possible to continue computing the
- * checksum once this has been called.
- * @exception InternalErr if called when the object was created without
- * checksum support or if called when the checksum has already been returned.
- */
-string XDRStreamMarshaller::get_checksum()
-{
-#if CHECKSUMS
-    if (_MD_CTX == 0)
-        throw InternalErr(__FILE__, __LINE__, "checksum_init() called by checksum is not enabled.");
-
-    if (_checksum_ctx_valid) {
-        // '...Final()' 'erases' the context so the next call without a reset
-        // returns a bogus value.
-        _checksum_ctx_valid = false;
-
-        vector<unsigned char> md(EVP_MAX_MD_SIZE);
-        unsigned int md_len;
-        if (EVP_DigestFinal_ex(_MD_CTX, &md[0], &md_len) == 0)
-            throw Error("Error computing the checksum (checksum computation).");
-
-        ostringstream oss;
-        oss.setf(ios::hex, ios::basefield);
-        for (unsigned int i = 0; i < md_len; ++i) {
-            oss << setfill('0') << setw(2) << (unsigned int) md[i];
-        }
-
-        _checksum = oss.str();
-    }
-
-    return _checksum;
-#else
-    return "";
-#endif
-}
-
-void XDRStreamMarshaller::checksum_update(const void *data, unsigned long len)
-{
-#if CHECKSUMS
-    if (_MD_CTX == 0)
-        throw InternalErr( __FILE__, __LINE__, "checksum_init() called by checksum is not enabled.");
+    delete tm;
 
-    if (!_checksum_ctx_valid)
-        throw InternalErr( __FILE__, __LINE__, "Invalid checksum context (checksum update).");
-
-    if (EVP_DigestUpdate(_MD_CTX, data, len) == 0) {
-        _checksum_ctx_valid = false;
-        throw Error("Error computing the checksum (checksum update).");
-    }
-#endif
+    xdr_destroy(&d_sink);
 }
-#endif
 
 void XDRStreamMarshaller::put_byte(dods_byte val)
 {
-#if CHECKSUM
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_byte));
-#endif
-    DBG( std::cerr << "put_byte: " << val << std::endl );
-
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send byte data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+     if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send byte data - unable to set stream position.");
 
     if (!xdr_char(&d_sink, (char *) &val))
-        throw Error("Network I/O Error. Could not send byte data.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send byte data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send byte data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send byte data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_int16(dods_int16 val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_int16));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send int 16 data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send int 16 data - unable to set stream position.");
 
     if (!XDR_INT16(&d_sink, &val))
-        throw Error("Network I/O Error. Could not send int 16 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send int 16 data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send int 16 data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send int 16 data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_int32(dods_int32 val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_int32));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send int 32 data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send int 32 data - unable to set stream position.");
 
     if (!XDR_INT32(&d_sink, &val))
-        throw Error("Network I/O Error. Culd not read int 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Culd not read int 32 data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send int 32 data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send int 32 data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_float32(dods_float32 val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_float32));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send float 32 data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send float 32 data - unable to set stream position.");
 
     if (!xdr_float(&d_sink, &val))
-        throw Error("Network I/O Error. Could not send float 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send float 32 data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send float 32 data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send float 32 data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_float64(dods_float64 val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_float64));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send float 64 data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send float 64 data - unable to set stream position.");
 
     if (!xdr_double(&d_sink, &val))
-        throw Error("Network I/O Error. Could not send float 64 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send float 64 data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send float 64 data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send float 64 data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_uint16(dods_uint16 val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_uint16));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send uint 16 data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send uint 16 data - unable to set stream position.");
 
     if (!XDR_UINT16(&d_sink, &val))
-        throw Error("Network I/O Error. Could not send uint 16 data. This may be due to a\nbug in libdap or a problem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send uint 16 data. This may be due to a\nbug in libdap or a problem with the network connection.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send uint 16 data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send uint 16 data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_uint32(dods_uint32 val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(dods_uint32));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send uint 32 data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send uint 32 data - unable to set stream position.");
 
     if (!XDR_UINT32(&d_sink, &val))
-        throw Error("Network I/O Error. Could not send uint 32 data. This may be due to a\nbug in libdap or a problem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send uint 32 data. This may be due to a\nbug in libdap or a problem with the network connection.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send uint 32 data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send uint 32 data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
 void XDRStreamMarshaller::put_str(const string &val)
 {
-#if 0
-	if (_MD_CTX)
-	checksum_update(val.c_str(), val.length());
-#endif
-	int size = val.length() + 8;
-#if 0
-	char *str_buf = (char *) malloc(size);
+    int size = val.length() + 8;
+
+    XDR str_sink;
+    vector<char> str_buf(size);
+
+    try {
+        xdrmem_create(&str_sink, &str_buf[0], size, XDR_ENCODE);
+
+        if (!xdr_setpos(&str_sink, 0))
+            throw Error(
+                "Network I/O Error. Could not send string data - unable to set stream position.");
+
+        const char *out_tmp = val.c_str();
+        if (!xdr_string(&str_sink, (char **) &out_tmp, size))
+            throw Error(
+                "Network I/O Error. Could not send string data.");
 
-	if (!str_buf) {
-		throw Error("Failed to allocate memory for string data serialization.");
-	}
+        unsigned int bytes_written = xdr_getpos(&str_sink);
+        if (!bytes_written)
+            throw Error(
+                "Network I/O Error. Could not send string data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+        Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
 #endif
 
-	XDR str_sink;
-	vector<char> str_buf(size);
-	//XDR *str_sink = new XDR;
-	try {
-		xdrmem_create(&str_sink, &str_buf[0], size, XDR_ENCODE);
-
-		if (!xdr_setpos( &str_sink, 0 ))
-			throw Error(
-					"Network I/O Error. Could not send string data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
-
-		const char *out_tmp = val.c_str();
-		if (!xdr_string(&str_sink, (char **) &out_tmp, size))
-			throw Error(
-					"Network I/O Error. Could not send string data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
-
-		unsigned int bytes_written = xdr_getpos( &str_sink );
-		if (!bytes_written)
-			throw Error(
-					"Network I/O Error. Could not send string data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
-
-		d_out.write(&str_buf[0], bytes_written);
-
-		xdr_destroy(&str_sink);
-	}
-	catch (...) {
-		xdr_destroy(&str_sink);
-		throw;
-	}
+        d_out.write(&str_buf[0], bytes_written);
+
+        xdr_destroy(&str_sink);
+    }
+    catch (...) {
+        xdr_destroy(&str_sink);
+        throw;
+    }
 }
 
 void XDRStreamMarshaller::put_url(const string &val)
@@ -364,148 +293,319 @@ void XDRStreamMarshaller::put_url(const string &val)
 
 void XDRStreamMarshaller::put_opaque(char *val, unsigned int len)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, len);
-#endif
     if (len > XDR_DAP_BUFF_SIZE)
         throw Error("Network I/O Error. Could not send opaque data - length of opaque data larger than allowed");
 
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send opaque data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send opaque data - unable to set stream position.");
 
     if (!xdr_opaque(&d_sink, val, len))
-        throw Error("Network I/O Error. Could not send opaque data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send opaque data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send opaque data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send opaque data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
-void XDRStreamMarshaller::put_int( int val )
+void XDRStreamMarshaller::put_int(int val)
 {
-#if 0
-    if (_MD_CTX)
-        checksum_update(&val, sizeof(int));
-#endif
-    if (!xdr_setpos( &d_sink, 0 ))
-        throw Error("Network I/O Error. Could not send int data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+    if (!xdr_setpos(&d_sink, 0))
+        throw Error(
+            "Network I/O Error. Could not send int data - unable to set stream position.");
 
     if (!xdr_int(&d_sink, &val))
-        throw Error("Network I/O Error(1). Could not send int data.\nThis may be due to a bug in libdap or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error(1). Could not send int data.");
 
-    unsigned int bytes_written = xdr_getpos( &d_sink );
+    unsigned int bytes_written = xdr_getpos(&d_sink);
     if (!bytes_written)
-        throw Error("Network I/O Error. Could not send int data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
+        throw Error(
+            "Network I/O Error. Could not send int data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
 
     d_out.write(d_buf, bytes_written);
 }
 
-void XDRStreamMarshaller::put_vector(char *val, int num, Vector &)
+void XDRStreamMarshaller::put_vector(char *val, int num, int width, Vector &vec)
 {
-	if (!val) throw InternalErr(__FILE__, __LINE__, "Could not send byte vector data. Buffer pointer is not set.");
-#if 0
-	if (_MD_CTX)
-	checksum_update(val, num);
-#endif
-	// write the number of members of the array being written and then set the position to 0
-	put_int(num);
-
-	// this is the word boundary for writing xdr bytes in a vector.
-	const unsigned int add_to = 8;
-#if 0
-	char *byte_buf = (char *) malloc(num + add_to);
-	if (!byte_buf) throw Error("Failed to allocate memory for byte vector data serialization.");
-#endif
-	vector<char> byte_buf(num + add_to);
-	XDR byte_sink;
-	try {
-		xdrmem_create(&byte_sink, &byte_buf[0], num + add_to, XDR_ENCODE);
-		if (!xdr_setpos( &byte_sink, 0 ))
-			throw Error(
-					"Network I/O Error. Could not send byte vector data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
-
-		if (!xdr_bytes(&byte_sink, (char **) &val, (unsigned int *) &num, num + add_to))
-			throw Error(
-					"Network I/O Error(2). Could not send byte vector data.\nThis may be due to a bug in libdap or a\nproblem with the network connection.");
-
-		unsigned int bytes_written = xdr_getpos( &byte_sink );
-		if (!bytes_written)
-			throw Error(
-					"Network I/O Error. Could not send byte vector data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
-
-		d_out.write(&byte_buf[0], bytes_written);
-
-		xdr_destroy(&byte_sink);
-	}
-	catch (...) {
-		xdr_destroy(&byte_sink);
-		throw;
-	}
+    put_vector(val, num, width, vec.var()->type());
 }
 
-void
-XDRStreamMarshaller::put_vector( char *val, int num, int width, Vector &vec )
+
+/**
+ * Prepare to send a single array/vector using a series of 'put' calls.
+ *
+ * @param num The number of elements in the Array/Vector
+ * @see put_vector_part()
+ * @see put_vector_end()
+ */
+void XDRStreamMarshaller::put_vector_start(int num)
 {
-    put_vector(val, num, width, vec.var()->type());
+    put_int(num);
+    put_int(num);
+
+    d_partial_put_byte_count = 0;
+}
+
+/**
+ * Close a vector when its values are written using put_vector_part().
+ *
+ * @see put_vector_start()
+ * @see put_vector_part()
+ */
+void XDRStreamMarshaller::put_vector_end()
+{
+#ifdef USE_POSIX_THREADS
+    Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+#endif
+
+    // Compute the trailing (padding) bytes
+
+    // Note that the XDR standard pads values to 4 byte boundaries.
+    //unsigned int pad = (d_partial_put_byte_count % 4) == 0 ? 0: 4 - (d_partial_put_byte_count % 4);
+    unsigned int mod_4 = d_partial_put_byte_count & 0x03;
+    unsigned int pad = (mod_4 == 0) ? 0: 4 - mod_4;
+
+    if (pad) {
+        vector<char> padding(4, 0); // 4 zeros
+
+        d_out.write(&padding[0], pad);
+        if (d_out.fail()) throw Error("Network I/O Error. Could not send vector data padding");
+    }
 }
 
+// Start of parallel I/O support. jhrg 8/19/15
+void XDRStreamMarshaller::put_vector(char *val, int num, Vector &)
+{
+    if (!val) throw InternalErr(__FILE__, __LINE__, "Could not send byte vector data. Buffer pointer is not set.");
+
+    // write the number of members of the array being written and then set the position to 0
+    put_int(num);
+
+    // this is the word boundary for writing xdr bytes in a vector.
+    const unsigned int add_to = 8;
+    // switch to memory on the heap since the thread will need to access it
+    // after this code returns.
+    char *byte_buf = new char[num + add_to];
+    XDR byte_sink;
+    try {
+        xdrmem_create(&byte_sink, byte_buf, num + add_to, XDR_ENCODE);
+        if (!xdr_setpos(&byte_sink, 0))
+            throw Error("Network I/O Error. Could not send byte vector data - unable to set stream position.");
+
+        if (!xdr_bytes(&byte_sink, (char **) &val, (unsigned int *) &num, num + add_to))
+            throw Error("Network I/O Error(2). Could not send byte vector data - unable to encode data.");
+
+        unsigned int bytes_written = xdr_getpos(&byte_sink);
+        if (!bytes_written)
+            throw Error("Network I/O Error. Could not send byte vector data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+        Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+        tm->increment_child_thread_count();
+        tm->start_thread(MarshallerThread::write_thread, d_out, byte_buf, bytes_written);
+        xdr_destroy(&byte_sink);
+#else
+        d_out.write(byte_buf, bytes_written);
+        xdr_destroy(&byte_sink);
+        delete byte_buf;
+#endif
+
+    }
+    catch (...) {
+        DBG(cerr << "Caught an exception in put_vector_thread" << endl);
+        xdr_destroy(&byte_sink);
+        delete byte_buf;
+        throw;
+    }
+}
 
+// private
+/**
+ * Write elements of a Vector (i.e. an Array) to the stream using XDR encoding.
+ * Encoding is performed on 'num' values that use 'width' bytes. The parameter
+ * 'type' is used to choose the XDR encoding function.
+ *
+ * @param val Pointer to the values to write
+ * @param num The number of elements in the memory referenced by 'val'
+ * @param width The number of bytes in each element
+ * @param type The DAP type of the elements
+ */
 void XDRStreamMarshaller::put_vector(char *val, unsigned int num, int width, Type type)
 {
-	if (!val) throw InternalErr(__FILE__, __LINE__, "Buffer pointer is not set.");
-#if CHECKSUM
-	if (_MD_CTX)
-	checksum_update(val, num * width);
+    if (!val) throw InternalErr(__FILE__, __LINE__, "Buffer pointer is not set.");
+
+    // write the number of array members being written, then set the position back to 0
+    put_int(num);
+
+    int use_width = width;
+    if (use_width < 4) use_width = 4;
+
+    // the size is the number of elements num times the width of each
+    // element, then add 4 bytes for the number of elements
+    int size = (num * use_width) + 4;
+
+    // allocate enough memory for the elements
+    //vector<char> vec_buf(size);
+    char *vec_buf = new char[size];
+    XDR vec_sink;
+    try {
+        xdrmem_create(&vec_sink, vec_buf, size, XDR_ENCODE);
+
+        // set the position of the sink to 0, we're starting at the beginning
+        if (!xdr_setpos(&vec_sink, 0))
+            throw Error("Network I/O Error. Could not send vector data - unable to set stream position.");
+
+        // write the array to the buffer
+        if (!xdr_array(&vec_sink, (char **) &val, (unsigned int *) &num, size, width, XDRUtils::xdr_coder(type)))
+            throw Error("Network I/O Error(2). Could not send vector data - unable to encode.");
+
+        // how much was written to the buffer
+        unsigned int bytes_written = xdr_getpos(&vec_sink);
+        if (!bytes_written)
+            throw Error("Network I/O Error. Could not send vector data - unable to get stream position.");
+
+#ifdef USE_POSIX_THREADS
+        Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+        tm->increment_child_thread_count();
+        tm->start_thread(MarshallerThread::write_thread, d_out, vec_buf, bytes_written);
+        xdr_destroy(&vec_sink);
+#else
+        d_out.write(vec_buf, bytes_written);
+        xdr_destroy(&vec_sink);
+        delete vec_buf;
 #endif
-	// write the number of array members being written, then set the position back to 0
-	put_int(num);
+    }
+    catch (...) {
+        xdr_destroy(&vec_sink);
+        delete vec_buf;
+        throw;
+    }
+}
 
-	int use_width = width;
-	if (use_width < 4) use_width = 4;
+/**
+ * Write num values for an Array/Vector.
+ *
+ * @param val The values to write
+ * @param num the number of values to write
+ * @param width The width of the values
+ * @param type The DAP2 type of the values.
+ *
+ * @see put_vector_start()
+ * @see put_vector_end()
+ */
+void XDRStreamMarshaller::put_vector_part(char *val, unsigned int num, int width, Type type)
+{
+    if (width == 1) {
+        // Add space for the 4 bytes of length info and 4 bytes for padding, even though
+        // we will not send either of those.
+        const unsigned int add_to = 8;
+        unsigned int bufsiz = num + add_to;
+        //vector<char> byte_buf(bufsiz);
+        char *byte_buf = new char[bufsiz];
+        XDR byte_sink;
+        try {
+            xdrmem_create(&byte_sink, byte_buf, bufsiz, XDR_ENCODE);
+            if (!xdr_setpos(&byte_sink, 0))
+                throw Error("Network I/O Error. Could not send byte vector data - unable to set stream position.");
+
+            if (!xdr_bytes(&byte_sink, (char **) &val, (unsigned int *) &num, bufsiz))
+                throw Error("Network I/O Error(2). Could not send byte vector data - unable to encode data.");
+
+#ifdef USE_POSIX_THREADS
+            Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+            tm->increment_child_thread_count();
+
+            // Increment the element count so we can figure out about the padding in put_vector_last()
+            d_partial_put_byte_count += num;
+
+            tm->start_thread(MarshallerThread::write_thread_part, d_out, byte_buf, num);
+            xdr_destroy(&byte_sink);
+#else
+            // Only send the num bytes that follow the 4 bytes of length info - we skip the
+            // length info because it's already been sent and we don't send any trailing padding
+            // bytes in this method (see put_vector_last() for that).
+            d_out.write(byte_buf + 4, num);
 
-	// the size is the number of elements num times the width of each
-	// element, then add 4 bytes for the number of elements
-	int size = (num * use_width) + 4;
+            if (d_out.fail())
+            throw Error ("Network I/O Error. Could not send initial part of byte vector data");
 
-	// allocate enough memory for the elements
-#if 0
-	char *vec_buf = (char *) malloc(size);
-	if (!vec_buf)
-	throw Error("Failed to allocate memory for vector data serialization.");
+            // Now increment the element count so we can figure out about the padding in put_vector_last()
+            d_partial_put_byte_count += num;
+
+            xdr_destroy(&byte_sink);
+            delete byte_buf;
 #endif
-	vector<char> vec_buf(size);
-	XDR vec_sink;
-	try {
-		xdrmem_create(&vec_sink, &vec_buf[0], size, XDR_ENCODE);
-
-		// set the position of the sink to 0, we're starting at the beginning
-		if (!xdr_setpos( &vec_sink, 0 ))
-			throw Error(
-					"Network I/O Error. Could not send vector data - unable to set stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
-
-		// write the array to the buffer
-		if (!xdr_array(&vec_sink, (char **) &val, (unsigned int *) &num, size, width, XDRUtils::xdr_coder(type)))
-			throw Error(
-					"Network I/O Error(2). Could not send vector data.\nThis may be due to a bug in libdap or a\nproblem with the network connection.");
-
-		// how much was written to the buffer
-		unsigned int bytes_written = xdr_getpos( &vec_sink );
-		if (!bytes_written)
-			throw Error(
-					"Network I/O Error. Could not send vector data - unable to get stream position.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
-
-		// write that much out to the output stream
-		d_out.write(&vec_buf[0], bytes_written);
-
-		xdr_destroy(&vec_sink);
-	}
-	catch (...) {
-		xdr_destroy(&vec_sink);
-		throw;
-	}
+        }
+        catch (...) {
+            xdr_destroy(&byte_sink);
+            delete byte_buf;
+            throw;
+        }
+    }
+    else {
+        int use_width = (width < 4) ? 4 : width;
+
+        // the size is the number of elements num times the width of each
+        // element, then add 4 bytes for the (int) number of elements
+        int size = (num * use_width) + 4;
+
+        // allocate enough memory for the elements
+        //vector<char> vec_buf(size);
+        char *vec_buf = new char[size];
+        XDR vec_sink;
+        try {
+            xdrmem_create(&vec_sink, vec_buf, size, XDR_ENCODE);
+
+            // set the position of the sink to 0, we're starting at the beginning
+            if (!xdr_setpos(&vec_sink, 0))
+                throw Error("Network I/O Error. Could not send vector data - unable to set stream position.");
+
+            // write the array to the buffer
+            if (!xdr_array(&vec_sink, (char **) &val, (unsigned int *) &num, size, width, XDRUtils::xdr_coder(type)))
+                throw Error("Network I/O Error(2). Could not send vector data -unable to encode data.");
+
+#ifdef USE_POSIX_THREADS
+            Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
+            tm->increment_child_thread_count();
+
+            // Increment the element count so we can figure out about the padding in put_vector_last()
+            d_partial_put_byte_count += (size - 4);
+            tm->start_thread(MarshallerThread::write_thread_part, d_out, vec_buf, size - 4);
+            xdr_destroy(&vec_sink);
+#else
+            // write that much out to the output stream, skipping the length data that
+            // XDR writes since we have already written the length info using put_vector_start()
+            d_out.write(vec_buf + 4, size - 4);
+
+            if (d_out.fail())
+                throw Error ("Network I/O Error. Could not send part of vector data");
+
+            // Now increment the element count so we can figure out about the padding in put_vector_last()
+            d_partial_put_byte_count += (size - 4);
+
+            xdr_destroy(&vec_sink);
+            delete vec_buf;
+#endif
+        }
+        catch (...) {
+            xdr_destroy(&vec_sink);
+            delete vec_buf;
+            throw;
+        }
+    }
 }
 
 void XDRStreamMarshaller::dump(ostream &strm) const
diff --git a/XDRStreamMarshaller.h b/XDRStreamMarshaller.h
index 036887c..ea7998b 100644
--- a/XDRStreamMarshaller.h
+++ b/XDRStreamMarshaller.h
@@ -30,80 +30,76 @@
 // Authors:
 //      pwest       Patrick West <pwest at ucar.edu>
 
+// Hacked massively to add all kinds of things, including pthred support.
+// jhrg 8/21/15
+
 #ifndef I_XDRStreamMarshaller_h
 #define I_XDRStreamMarshaller_h 1
 
 #include <iostream>
 
-// #include <openssl/evp.h>
-
-using std::ostream ;
-using std::cout ;
-
 #include "Marshaller.h"
 #include "XDRUtils.h"
-#include "BaseType.h"
 
-namespace libdap
-{
 
-/** @brief marshaller that knows how to marshal/serialize dap data objects
- * to a C++ iostream using XDR
+namespace libdap {
+
+class BaseType;
+class MarshallerThread;
+
+/**
+ * @brief Marshaller that knows how serialize dap data objects to a C++ iostream using XDR
  *
- * @note This class can now compute checksums for data that will be marshalled.
- * jhrg 1/18/2012
  */
-class XDRStreamMarshaller : public Marshaller
-{
+class XDRStreamMarshaller: public Marshaller {
 private:
-    static char *	d_buf ;
-    XDR 			d_sink ;
-    ostream &		d_out ;
-#if 0
-    EVP_MD_CTX *    _MD_CTX;    // jhrg 4/24/12
-    bool            _write_data ; // jhrg 1/27/12
-    bool            _checksum_ctx_valid ;
-    string          _checksum ; // jhrg 4/24/12
-#endif
-    				XDRStreamMarshaller() ;
-    				XDRStreamMarshaller( const XDRStreamMarshaller &m ) ;
-    XDRStreamMarshaller &operator=( const XDRStreamMarshaller & ) ;
+    static char * d_buf;
+    XDR d_sink;
+    ostream & d_out;
 
-public:
-    				XDRStreamMarshaller( ostream &out) ; //, bool checksum = false, bool write_data = true) ;
-    virtual			~XDRStreamMarshaller() ;
+    int d_partial_put_byte_count;
 
-#if 0
-    virtual bool    checksums() { return _MD_CTX != 0; }
-    virtual void    reset_checksum() ;
-    virtual string  get_checksum() ;
-    virtual void    checksum_update(const void *data, unsigned long len) ;
-#endif
+    MarshallerThread *tm;
+
+    XDRStreamMarshaller();
+    XDRStreamMarshaller(const XDRStreamMarshaller &m);
+    XDRStreamMarshaller &operator=(const XDRStreamMarshaller &);
+
+    void put_vector(char *val, unsigned int num, int width, Type type);
+
+    friend class MarshallerTest;
+    friend class MarshallerThread;
+
+public:
+    XDRStreamMarshaller(ostream &out); //, bool checksum = false, bool write_data = true) ;
+    virtual ~XDRStreamMarshaller();
 
-    virtual void	put_byte( dods_byte val ) ;
+    virtual void put_byte(dods_byte val);
 
-    virtual void	put_int16( dods_int16 val ) ;
-    virtual void	put_int32( dods_int32 val ) ;
+    virtual void put_int16(dods_int16 val);
+    virtual void put_int32(dods_int32 val);
 
-    virtual void	put_float32( dods_float32 val ) ;
-    virtual void	put_float64( dods_float64 val ) ;
+    virtual void put_float32(dods_float32 val);
+    virtual void put_float64(dods_float64 val);
 
-    virtual void	put_uint16( dods_uint16 val ) ;
-    virtual void	put_uint32( dods_uint32 val ) ;
+    virtual void put_uint16(dods_uint16 val);
+    virtual void put_uint32(dods_uint32 val);
 
-    virtual void	put_str( const string &val ) ;
-    virtual void	put_url( const string &val ) ;
+    virtual void put_str(const string &val);
+    virtual void put_url(const string &val);
 
-    virtual void	put_opaque( char *val, unsigned int len ) ;
-    virtual void	put_int( int val ) ;
+    virtual void put_opaque(char *val, unsigned int len);
+    virtual void put_int(int val);
 
-    virtual void	put_vector( char *val, int num, Vector &vec ) ;
-    virtual void    put_vector( char *val, int num, int width, Vector &vec) ;
+    virtual void put_vector(char *val, int num, Vector &vec);
+    virtual void put_vector(char *val, int num, int width, Vector &vec);
 
-    virtual void put_vector(char *val, unsigned int num, int width, Type type);
+    virtual void put_vector_start(int num);
+    virtual void put_vector_part(char *val, unsigned int num, int width, Type type);
+    virtual void put_vector_end();
 
-    virtual void	dump(ostream &strm) const ;
-} ;
+    virtual void dump(ostream &strm) const;
+};
 
 } // namespace libdap
 
diff --git a/aclocal.m4 b/aclocal.m4
index 8b14627..931ce08 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,8 +1,7 @@
-# generated automatically by aclocal 1.12 -*- Autoconf -*-
+# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
-# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -12,6 +11,7 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
@@ -20,24 +20,22 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 8
-
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.12'
+[am__api_version='1.14'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.12], [],
+m4_if([$1], [1.14.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -53,21 +51,19 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.12])dnl
+[AM_AUTOMAKE_VERSION([1.14.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
 # '$srcdir', '$srcdir/..', or '$srcdir/../..'.
@@ -115,14 +111,12 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
-
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
@@ -148,13 +142,12 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 16
 
 # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -166,7 +159,7 @@ fi])])
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -182,6 +175,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl
 m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
       [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
       [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
       [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
       [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
                     [depcc="$$1"   am_compiler_list=])
@@ -339,19 +333,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -380,7 +373,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
@@ -416,17 +409,21 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 18
-
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
 # -----------------------------------------------
@@ -439,7 +436,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
+[AC_PREREQ([2.65])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -468,7 +465,9 @@ AC_SUBST([CYGPATH_W])
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
@@ -494,7 +493,12 @@ AM_MISSING_PROG([AUTOHEADER], [autoheader])
 AM_MISSING_PROG([MAKEINFO], [makeinfo])
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
@@ -506,25 +510,70 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
 		  [_AM_DEPENDENCIES([CC])],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
 		  [_AM_DEPENDENCIES([CXX])],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
 		  [_AM_DEPENDENCIES([OBJC])],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
-dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
@@ -532,7 +581,6 @@ dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
 m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
 
-
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
 # that is generated.  The stamp files are numbered to have different names.
@@ -554,14 +602,12 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 8
-
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -577,14 +623,12 @@ if test x"${install_sh}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
@@ -598,14 +642,12 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1998-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
-
 # AM_PROG_LEX
 # -----------
 # Autoconf leaves LEX=: if lex or flex can't be found.  Change that to a
@@ -620,14 +662,12 @@ fi])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -670,50 +710,14 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-dnl Make sure AC_PROG_CC is never called again, or it will override our
-dnl setting of CC.
-m4_define([AC_PROG_CC],
-          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
-])
-
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 7
-
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
 AC_DEFUN([AM_MISSING_PROG],
@@ -721,11 +725,10 @@ AC_DEFUN([AM_MISSING_PROG],
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
-
 # AM_MISSING_HAS_RUN
 # ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
@@ -738,52 +741,22 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
   AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# Copyright (C) 2003-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for 'mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
-
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
@@ -807,15 +780,77 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_SANITY_CHECK
 # ---------------
@@ -892,13 +927,71 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_PROG_INSTALL_STRIP
 # ---------------------
@@ -922,14 +1015,12 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
-
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
@@ -943,14 +1034,12 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
-
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
@@ -964,81 +1053,120 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # Substitute a variable $(am__untar) that extract such
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
+#
 AC_DEFUN([_AM_PROG_TAR],
 [# Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AC_SUBST([AMTAR], ['$${TAR-tar}'])
-m4_if([$1], [v7],
-     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
+
+# We'll loop over all known methods to create a tar archive until one works.
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of '-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
 
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
 
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
   rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
 
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
 AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([gl/m4/00gnulib.m4])
+m4_include([gl/m4/absolute-header.m4])
 m4_include([gl/m4/alloca.m4])
 m4_include([gl/m4/btowc.m4])
 m4_include([gl/m4/byteswap.m4])
@@ -1065,7 +1193,6 @@ m4_include([gl/m4/locale_h.m4])
 m4_include([gl/m4/localeconv.m4])
 m4_include([gl/m4/lock.m4])
 m4_include([gl/m4/longlong.m4])
-m4_include([gl/m4/malloc.m4])
 m4_include([gl/m4/mbrtowc.m4])
 m4_include([gl/m4/mbsinit.m4])
 m4_include([gl/m4/mbstate_t.m4])
diff --git a/conf/._compile b/conf/._compile
index 77b39d4..79bcbdd 100755
Binary files a/conf/._compile and b/conf/._compile differ
diff --git a/conf/._config.guess b/conf/._config.guess
index 77b39d4..79bcbdd 100755
Binary files a/conf/._config.guess and b/conf/._config.guess differ
diff --git a/conf/._config.sub b/conf/._config.sub
index 77b39d4..79bcbdd 100755
Binary files a/conf/._config.sub and b/conf/._config.sub differ
diff --git a/conf/._depcomp b/conf/._depcomp
index 77b39d4..79bcbdd 100755
Binary files a/conf/._depcomp and b/conf/._depcomp differ
diff --git a/conf/._install-sh b/conf/._install-sh
index 77b39d4..79bcbdd 100755
Binary files a/conf/._install-sh and b/conf/._install-sh differ
diff --git a/conf/._missing b/conf/._missing
index 77b39d4..79bcbdd 100755
Binary files a/conf/._missing and b/conf/._missing differ
diff --git a/conf/._test-driver b/conf/._test-driver
new file mode 100755
index 0000000..79bcbdd
Binary files /dev/null and b/conf/._test-driver differ
diff --git a/conf/compile b/conf/compile
index 7b4a9a7..531136b 100755
--- a/conf/compile
+++ b/conf/compile
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2012-03-05.13; # UTC
+scriptversion=2012-10-14.11; # UTC
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey at cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -112,6 +112,11 @@ func_cl_dashl ()
       lib=$dir/$lib.lib
       break
     fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
   done
   IFS=$save_IFS
 
diff --git a/conf/config.guess b/conf/config.guess
index d622a44..9afd676 100755
--- a/conf/config.guess
+++ b/conf/config.guess
@@ -1,14 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2012-02-10'
+timestamp='2013-11-29'
 
 # This file 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 2 of the License, or
+# 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
@@ -22,19 +20,17 @@ timestamp='2012-02-10'
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches at gnu.org> and include a ChangeLog
-# entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# Originally written by Per Bothner.
 #
 # You can get the latest version of this script from:
 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -54,9 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -200,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
 	exit ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -302,7 +321,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
 	echo arm-unknown-riscos
 	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -801,6 +820,9 @@ EOF
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
@@ -852,21 +874,21 @@ EOF
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
     aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     aarch64_be:Linux:*:*)
 	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -879,59 +901,54 @@ EOF
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
 	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
-	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	else
 	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
 		| grep -q __ARM_PCS_VFP
 	    then
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
 	    else
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
 	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     i*86:Linux:*:*)
-	LIBC=gnu
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
@@ -950,54 +967,63 @@ EOF
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
+    or1k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     or32:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     padre:Linux:*:*)
-	echo sparc-unknown-linux-gnu
+	echo sparc-unknown-linux-${LIBC}
 	exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+	echo hppa64-unknown-linux-${LIBC}
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
 	esac
 	exit ;;
     ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
+	echo powerpc64-unknown-linux-${LIBC}
 	exit ;;
     ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
     sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1201,6 +1227,9 @@ EOF
     BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
 	echo i586-pc-haiku
 	exit ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
@@ -1227,19 +1256,31 @@ EOF
 	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    i386)
-		eval $set_cc_for_build
-		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		      grep IS_64BIT_ARCH >/dev/null
-		  then
-		      UNAME_PROCESSOR="x86_64"
-		  fi
-		fi ;;
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		    grep IS_64BIT_ARCH >/dev/null
+		then
+		    case $UNAME_PROCESSOR in
+			i386) UNAME_PROCESSOR=x86_64 ;;
+			powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		    esac
+		fi
+	    fi
+	elif test "$UNAME_PROCESSOR" = i386 ; then
+	    # Avoid executing cc on OS X 10.9, as it ships with a stub
+	    # that puts up a graphical alert prompting to install
+	    # developer tools.  Any system running Mac OS X 10.7 or
+	    # later (Darwin 11 and later) is required to have a 64-bit
+	    # processor. This is not true of the ARM version of Darwin
+	    # that Apple uses in portable devices.
+	    UNAME_PROCESSOR=x86_64
+	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1256,7 +1297,7 @@ EOF
     NEO-?:NONSTOP_KERNEL:*:*)
 	echo neo-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1330,9 +1371,6 @@ EOF
 	exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
diff --git a/conf/config.rpath b/conf/config.rpath
index c38b914..a3e25c8 100755
--- a/conf/config.rpath
+++ b/conf/config.rpath
@@ -2,7 +2,7 @@
 # Output a system dependent set of variables, describing how to set the
 # run time search path of shared libraries in an executable.
 #
-#   Copyright 1996-2013 Free Software Foundation, Inc.
+#   Copyright 1996-2015 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 #
@@ -367,11 +367,7 @@ else
     dgux*)
       hardcode_libdir_flag_spec='-L$libdir'
       ;;
-    freebsd2.2*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    freebsd2*)
+    freebsd2.[01]*)
       hardcode_direct=yes
       hardcode_minus_L=yes
       ;;
@@ -548,13 +544,11 @@ case "$host_os" in
   dgux*)
     library_names_spec='$libname$shrext'
     ;;
+  freebsd[23].*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
   freebsd* | dragonfly*)
-    case "$host_os" in
-      freebsd[123]*)
-        library_names_spec='$libname$shrext$versuffix' ;;
-      *)
-        library_names_spec='$libname$shrext' ;;
-    esac
+    library_names_spec='$libname$shrext'
     ;;
   gnu*)
     library_names_spec='$libname$shrext'
diff --git a/conf/config.sub b/conf/config.sub
index c894da4..61cb4bc 100755
--- a/conf/config.sub
+++ b/conf/config.sub
@@ -1,24 +1,18 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2012-02-10'
+timestamp='2013-10-01'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file 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 2 of the License, or
+# This file 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.
+# 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/>.
@@ -26,11 +20,12 @@ timestamp='2012-02-10'
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -73,9 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -123,7 +116,7 @@ esac
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
@@ -156,7 +149,7 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze)
+	-apple | -axis | -knuth | -cray | -microblaze*)
 		os=
 		basic_machine=$1
 		;;
@@ -225,6 +218,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -253,10 +252,12 @@ case $basic_machine in
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-        | be32 | be64 \
+	| arc | arceb \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| be32 | be64 \
 	| bfin \
-	| c4x | clipper \
+	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
 	| epiphany \
 	| fido | fr30 | frv \
@@ -264,10 +265,11 @@ case $basic_machine in
 	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| k1om \
 	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | mcore | mep | metag \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -285,16 +287,17 @@ case $basic_machine in
 	| mipsisa64r2 | mipsisa64r2el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
 	| moxie \
 	| mt \
 	| msp430 \
 	| nds32 | nds32le | nds32be \
-	| nios | nios2 \
+	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
 	| open8 \
-	| or32 \
+	| or1k | or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
@@ -322,7 +325,7 @@ case $basic_machine in
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -364,13 +367,13 @@ case $basic_machine in
 	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| clipper-* | craynv-* | cydra-* \
+	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -379,11 +382,13 @@ case $basic_machine in
 	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| k1om-* \
 	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -401,12 +406,13 @@ case $basic_machine in
 	| mipsisa64r2-* | mipsisa64r2el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
 	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* \
+	| nios-* | nios2-* | nios2eb-* | nios2el-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| open8-* \
 	| orion-* \
@@ -782,11 +788,15 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
-	microblaze)
+	microblaze*)
 		basic_machine=microblaze-xilinx
 		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
 	mingw32)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-mingw32
 		;;
 	mingw32ce)
@@ -822,7 +832,7 @@ case $basic_machine in
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
 	msys)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-msys
 		;;
 	mvs)
@@ -1013,7 +1023,11 @@ case $basic_machine in
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
-	rdos)
+	rdos | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
 		basic_machine=i386-pc
 		os=-rdos
 		;;
@@ -1340,21 +1354,21 @@ case $os in
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* \
+	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
 	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -openbsd* | -solidbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-uclibc* \
+	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1486,9 +1500,6 @@ case $os in
 	-aros*)
 		os=-aros
 		;;
-	-kaos*)
-		os=-kaos
-		;;
 	-zvmoe)
 		os=-zvmoe
 		;;
@@ -1537,6 +1548,12 @@ case $basic_machine in
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
+	c8051-*)
+		os=-elf
+		;;
+	hexagon-*)
+		os=-elf
+		;;
 	tic54x-*)
 		os=-coff
 		;;
@@ -1577,6 +1594,9 @@ case $basic_machine in
 	mips*-*)
 		os=-elf
 		;;
+	or1k-*)
+		os=-elf
+		;;
 	or32-*)
 		os=-coff
 		;;
diff --git a/conf/depcomp b/conf/depcomp
index debb6ff..4ebd5b3 100755
--- a/conf/depcomp
+++ b/conf/depcomp
@@ -1,9 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2012-03-27.16; # UTC
+scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 
 # 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
@@ -27,9 +27,9 @@ scriptversion=2012-03-27.16; # UTC
 
 case $1 in
   '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -56,11 +56,65 @@ EOF
     ;;
 esac
 
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
 # A tabulation character.
 tab='	'
 # A newline character.
 nl='
 '
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
 
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
@@ -74,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
 rm -f "$tmpdepfile"
 
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
@@ -85,32 +142,32 @@ if test "$depmode" = hp; then
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
 fi
 
 cygpath_u="cygpath -u -f -"
 if test "$depmode" = msvcmsys; then
-   # This is just like msvisualcpp but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u='sed s,\\\\,/,g'
-   depmode=msvisualcpp
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
 fi
 
 if test "$depmode" = msvc7msys; then
-   # This is just like msvc7 but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u='sed s,\\\\,/,g'
-   depmode=msvc7
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
 fi
 
 if test "$depmode" = xlc; then
-   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
-   gccflag=-qmakedep=gcc,-MF
-   depmode=gcc
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
@@ -133,8 +190,7 @@ gcc3)
   done
   "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -142,13 +198,17 @@ gcc3)
   ;;
 
 gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
@@ -156,15 +216,14 @@ gcc)
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
 ## This next piece of magic avoids the "deleted header file" problem.
@@ -173,15 +232,15 @@ gcc)
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' "$nl" < "$tmpdepfile" |
 ## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
 ## well.  hp depmode also adds that space, but also prefixes the VPATH
 ## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-      | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -199,8 +258,7 @@ sgi)
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -208,7 +266,6 @@ sgi)
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
-
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
@@ -216,19 +273,15 @@ sgi)
     # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
     tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr "$nl" ' ' >> "$depfile"
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
-
     # The second pass generates a dummy entry for each header file.
     tr ' ' "$nl" < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> "$depfile"
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
@@ -246,9 +299,8 @@ aix)
   # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.u
     tmpdepfile2=$base.u
@@ -261,9 +313,7 @@ aix)
     "$@" -M
   fi
   stat=$?
-
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
@@ -272,65 +322,113 @@ aix)
   do
     test -f "$tmpdepfile" && break
   done
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form 'foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # '$object: dependent.h' and one to simply 'dependent.h:'.
-    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
   fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
-icc)
-  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
-  # However on
-  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using '\':
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
-  # tcc 0.9.26 (FIXME still under development at the moment of writing)
-  # will emit a similar output, but also prepend the continuation lines
-  # with horizontal tabulation characters.
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
-  # Each line is of the form 'foo.o: dependent.h',
-  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
   # Do two passes, one to just change these to
-  # '$object: dependent.h' and one to simply 'dependent.h:'.
-  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
-    < "$tmpdepfile" > "$depfile"
-  sed '
-    s/[ '"$tab"'][ '"$tab"']*/ /g
-    s/^ *//
-    s/ *\\*$//
-    s/^[^:]*: *//
-    /^$/d
-    /:$/d
-    s/$/ :/
-  ' < "$tmpdepfile" >> "$depfile"
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -341,9 +439,8 @@ hp2)
   # 'foo.d', which lands next to the object file, wherever that
   # happens to be.
   # Much of this is similar to the tru64 case; see comments there.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from  "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
@@ -354,8 +451,7 @@ hp2)
     "$@" +Maked
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
@@ -365,76 +461,61 @@ hp2)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
     # Add 'dependent.h:' lines.
     sed -ne '2,${
-	       s/^ *//
-	       s/ \\*$//
-	       s/$/:/
-	       p
-	     }' "$tmpdepfile" >> "$depfile"
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
   else
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile" "$tmpdepfile2"
   ;;
 
 tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in 'foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
 
 msvc7)
   if test "$libtool" = yes; then
@@ -445,8 +526,7 @@ msvc7)
   "$@" $showIncludes > "$tmpdepfile"
   stat=$?
   grep -v '^Note: including file: ' "$tmpdepfile"
-  if test "$stat" = 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -472,6 +552,7 @@ $ {
   G
   p
 }' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
   rm -f "$tmpdepfile"
   ;;
 
@@ -523,13 +604,14 @@ dashmstdout)
   # in the target name.  This is to cope with DOS-style filenames:
   # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' "$nl" < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -582,10 +664,12 @@ makedepend)
   # makedepend may prepend the VPATH from the source file name to the object.
   # No need to regex-escape $object, excess matching of '.' is harmless.
   sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
@@ -621,10 +705,10 @@ cpp)
     esac
   done
 
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
+  "$@" -E \
+    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    | sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
@@ -656,15 +740,15 @@ msvisualcpp)
       shift
       ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
   "$@" -E 2>/dev/null |
diff --git a/conf/gcov_valgrind.m4 b/conf/gcov_valgrind.m4
index e1ccbb3..98aa35a 100644
--- a/conf/gcov_valgrind.m4
+++ b/conf/gcov_valgrind.m4
@@ -4,33 +4,35 @@
 AC_DEFUN([DODS_GCOV_VALGRIND],
 [
                
-coverage=no
 AC_ARG_ENABLE(coverage,
-[  --enable-coverage       Enable coverage testing. ],
-[ coverage=yes ])
-              
-if [[ "$coverage" = "yes" ]]; then
-    if [[ "$GCC" = "yes" ]]; then
-        CFLAGS="-fprofile-arcs -ftest-coverage $CFLAGS"
-    else
-        AC_MSG_ERROR([Can only enable coverage when using gcc.])
-    fi
-fi
+    [AS_HELP_STRING([--enable-coverage],
+                    [Collect coverage data (default is no)]) ],
+    [coverage=$enableval],
+    [coverage=no])
+ 
+AS_IF([test x$coverage = xyes], 
+    [ AS_IF([test x$GCC = xyes],
+            [ CFLAGS="-fprofile-arcs -ftest-coverage -pg $CFLAGS"
+              CXXFLAGS="-fprofile-arcs -ftest-coverage -pg $CXXFLAGS"
+              LDFLAGS="-pg $LDFLAGS"
+	          AC_MSG_NOTICE([Building coverage reporting.]) ],
+            [ AC_MSG_ERROR([Can only enable coverage when using gcc.]) ]) ])
                
 # Support for running test cases using valgrind:
                
-use_valgrind=false
+use_valgrind=no
 AC_ARG_ENABLE(valgrind,
-[  --enable-valgrind       Use valgrind when running unit tests. ],
-[ use_valgrind=true ])
-               
-if [[ "$use_valgrind" = "true" ]]; then
-    AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
-             
-    if [[ "$HAVE_VALGRIND" = "no" ]]; then
-        AC_MSG_ERROR([Valgrind not found in PATH. ])
-    fi
-fi
+    [AS_HELP_STRING([--enable-valgrind], 
+    	            [Use valgrind when running unit tests. (default is no)])],
+    [use_valgrind=$enableval],
+    [use_valgrind=no])
                
-AM_CONDITIONAL(USE_VALGRIND, $use_valgrind)
+AS_IF([test x$use_valgrind = xyes ],
+      [ AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
+        AS_IF([test x$HAVE_VALGRIND = xyes ],
+	          [AC_MSG_NOTICE([Using valgrind with unit tests.])],
+	          [AC_MSG_ERROR([Valgrind not found in PATH.])])])
+
+AM_CONDITIONAL(USE_VALGRIND, [test x$use_valgrind = xyes])
+
 ])
\ No newline at end of file
diff --git a/conf/missing b/conf/missing
index 9a55648..db98974 100755
--- a/conf/missing
+++ b/conf/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2012-01-06.18; # UTC
+scriptversion=2013-10-28.13; # UTC
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # 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
@@ -29,61 +29,33 @@ if test $# -eq 0; then
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, 'missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
+case $1 in
 
-msg="missing on your system"
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file 'aclocal.m4'
-  autoconf     touch file 'configure'
-  autoheader   touch file 'config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all 'Makefile.in' files
-  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
-  flex         create 'lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create 'lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
 
 Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
 'g' are ignored when checking the name.
@@ -98,228 +70,141 @@ Send bug reports to <bug-automake at gnu.org>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "$0: unknown '$1' option"
     echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running '$TOOL --version' or '$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
-         to install the Automake and Perl packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified '${configure_ac}'.  You might want to install the
-         Autoconf and GNU m4 packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acconfig.h' or '${configure_ac}'.  You might want
-         to install the Autoconf and GNU m4 packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
-         You might want to install the Automake and Perl packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: '$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get '$1' as part of Autoconf from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: '$1' $msg.  You should only need it if
-         you modified a '.y' file.  You may need the Bison package
-         in order for those modifications to take effect.  You can get
-         Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.l' file.  You may need the Flex package
-         in order for those modifications to take effect.  You can get
-         Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 Help2man package in order for those modifications to take
-	 effect.  You can get Help2man from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.texi' or '.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy 'make' (AIX,
-         DU, IRIX).  You might want to install the Texinfo package or
-         the GNU make package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-	/^@setfilename/{
-	  s/.* \([^ ]*\) *$/\1/
-	  p
-	  q
-	}' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
 
-  *)
-    echo 1>&2 "\
-WARNING: '$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the 'README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing '$1' program."
-    exit 1
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
     ;;
-esac
-
-exit 0
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/conf/snippet/arg-nonnull.h b/conf/snippet/arg-nonnull.h
index 8ea2a47..0d55e2b 100644
--- a/conf/snippet/arg-nonnull.h
+++ b/conf/snippet/arg-nonnull.h
@@ -1,5 +1,5 @@
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/conf/snippet/c++defs.h b/conf/snippet/c++defs.h
index b35b933..585b38a 100644
--- a/conf/snippet/c++defs.h
+++ b/conf/snippet/c++defs.h
@@ -1,5 +1,5 @@
 /* C++ compatible function declaration macros.
-   Copyright (C) 2010-2013 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/conf/snippet/warn-on-use.h b/conf/snippet/warn-on-use.h
index 1736a1b..90f4985 100644
--- a/conf/snippet/warn-on-use.h
+++ b/conf/snippet/warn-on-use.h
@@ -1,5 +1,5 @@
 /* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2013 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/conf/test-driver b/conf/test-driver
new file mode 100755
index 0000000..d306056
--- /dev/null
+++ b/conf/test-driver
@@ -0,0 +1,139 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# 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 2, 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 to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  estatus=1
+fi
+
+case $estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.h.in b/config.h.in
index ea70a98..2f91366 100644
--- a/config.h.in
+++ b/config.h.in
@@ -90,19 +90,12 @@
    whether the gnulib module lock shall be considered present. */
 #undef GNULIB_LOCK
 
-/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
-   whether the gnulib module malloc-gnu shall be considered present. */
-#undef GNULIB_MALLOC_GNU
-
 /* Define to 1 when the gnulib module btowc should be tested. */
 #undef GNULIB_TEST_BTOWC
 
 /* Define to 1 when the gnulib module localeconv should be tested. */
 #undef GNULIB_TEST_LOCALECONV
 
-/* Define to 1 when the gnulib module malloc-posix should be tested. */
-#undef GNULIB_TEST_MALLOC_POSIX
-
 /* Define to 1 when the gnulib module mbrtowc should be tested. */
 #undef GNULIB_TEST_MBRTOWC
 
@@ -218,16 +211,9 @@
 /* Define to 1 if the system has the type 'long long int'. */
 #undef HAVE_LONG_LONG_INT
 
-/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and
-   to 0 otherwise. */
-#undef HAVE_MALLOC_GNU
-
 /* Define to 1 if you have the <malloc.h> header file. */
 #undef HAVE_MALLOC_H
 
-/* Define if the 'malloc' function is POSIX compliant. */
-#undef HAVE_MALLOC_POSIX
-
 /* Define to 1 if you have the `mbrtowc' function. */
 #undef HAVE_MBRTOWC
 
@@ -261,6 +247,9 @@
 /* Define to 1 if you have the `pow' function. */
 #undef HAVE_POW
 
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
 /* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
 #undef HAVE_PTHREAD_MUTEX_RECURSIVE
 
@@ -726,6 +715,9 @@
 /* Define to 1 if the system has the type 'unsigned long long int'. */
 #undef HAVE_UNSIGNED_LONG_LONG_INT
 
+/* Define to 1 if you have the <uuid.h> header file. */
+#undef HAVE_UUID_H
+
 /* Define to 1 if you have the <uuid/uuid.h> header file. */
 #undef HAVE_UUID_UUID_H
 
@@ -738,9 +730,6 @@
 /* Define to 1 if you have the `wcrtomb' function. */
 #undef HAVE_WCRTOMB
 
-/* Define to 1 if you have the `wcscoll' function. */
-#undef HAVE_WCSCOLL
-
 /* Define to 1 if you have the <wctype.h> header file. */
 #undef HAVE_WCTYPE_H
 
@@ -769,6 +758,10 @@
 /* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
 #undef MALLOC_0_IS_NONNULL
 
+/* Define if the mbrtowc function does not return (size_t) -2 for empty input.
+   */
+#undef MBRTOWC_EMPTY_INPUT_BUG
+
 /* Define if the mbrtowc function has the NULL pwc argument bug. */
 #undef MBRTOWC_NULL_ARG1_BUG
 
@@ -784,9 +777,6 @@
 /* Define this to suppres assert() calls. */
 #undef NDEBUG
 
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
 /* Name of package */
 #undef PACKAGE
 
@@ -906,6 +896,10 @@
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
+/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
 /* Enable threading extensions on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
@@ -1025,29 +1019,49 @@
    'reference to static identifier "f" in extern inline function'.
    This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
 
-   Suppress the use of extern inline on problematic Apple configurations, as
-   Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if (defined __APPLE__ \
-     && ((! defined _DONT_USE_CTYPE_INLINE_ \
-          && (defined __GNUC__ || defined __cplusplus)) \
-         || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
-             && defined __GNUC__ && ! defined __cplusplus)))
-# define _GL_EXTERN_INLINE_APPLE_BUG
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions.  This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <http://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.  */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
 #endif
 #if ((__GNUC__ \
       ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
       : (199901L <= __STDC_VERSION__ \
          && !defined __HP_cc \
          && !(defined __SUNPRO_C && __STDC__))) \
-     && !defined _GL_EXTERN_INLINE_APPLE_BUG)
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
 # define _GL_INLINE inline
 # define _GL_EXTERN_INLINE extern inline
 # define _GL_EXTERN_INLINE_IN_USE
 #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
-       && !defined _GL_EXTERN_INLINE_APPLE_BUG)
-# if __GNUC_GNU_INLINE__
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
    /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
 #  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
 # else
@@ -1060,17 +1074,19 @@
 # define _GL_EXTERN_INLINE static _GL_UNUSED
 #endif
 
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
 # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
 #  define _GL_INLINE_HEADER_CONST_PRAGMA
 # else
 #  define _GL_INLINE_HEADER_CONST_PRAGMA \
      _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
 # endif
-  /* Suppress GCC's bogus "no previous prototype for 'FOO'"
-     and "no previous declaration for 'FOO'"  diagnostics,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.  */
 # define _GL_INLINE_HEADER_BEGIN \
     _Pragma ("GCC diagnostic push") \
     _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
@@ -1185,6 +1201,16 @@
    is a misnomer outside of parameter lists.  */
 #define _UNUSED_PARAMETER_ _GL_UNUSED
 
+/* gcc supports the "unused" attribute on possibly unused labels, and
+   g++ has since version 4.5.  Note to support C++ as well as C,
+   _GL_UNUSED_LABEL should be used with a trailing ;  */
+#if !defined __cplusplus || __GNUC__ > 4 \
+    || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define _GL_UNUSED_LABEL _GL_UNUSED
+#else
+# define _GL_UNUSED_LABEL
+#endif
+
 /* The __pure__ attribute was added in gcc 2.96.  */
 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
diff --git a/configure b/configure
index 5f84860..747b3ea 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libdap 3.14.0.
+# Generated by GNU Autoconf 2.69 for libdap 3.15.1.
 #
 # Report bugs to <opendap-tech at opendap.org>.
 #
@@ -650,8 +650,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libdap'
 PACKAGE_TARNAME='libdap'
-PACKAGE_VERSION='3.14.0'
-PACKAGE_STRING='libdap 3.14.0'
+PACKAGE_VERSION='3.15.1'
+PACKAGE_STRING='libdap 3.15.1'
 PACKAGE_BUGREPORT='opendap-tech at opendap.org'
 PACKAGE_URL=''
 
@@ -693,8 +693,8 @@ ac_includes_default="\
 #endif"
 
 gl_use_threads_default=
-ac_func_list=
 ac_header_list=
+ac_func_list=
 ac_subst_vars='gltests_LTLIBOBJS
 gltests_LIBOBJS
 gl_LTLIBOBJS
@@ -757,9 +757,11 @@ REPLACE_USLEEP
 REPLACE_UNLINKAT
 REPLACE_UNLINK
 REPLACE_TTYNAME_R
+REPLACE_SYMLINKAT
 REPLACE_SYMLINK
 REPLACE_SLEEP
 REPLACE_RMDIR
+REPLACE_READLINKAT
 REPLACE_READLINK
 REPLACE_READ
 REPLACE_PWRITE
@@ -907,9 +909,6 @@ GL_GENERATE_STDBOOL_H_FALSE
 GL_GENERATE_STDBOOL_H_TRUE
 STDBOOL_H
 APPLE_UNIVERSAL_BUILD
-LOCALE_FR_UTF8
-LOCALE_ZH_CN
-LOCALE_JA
 REPLACE_WCTOMB
 REPLACE_UNSETENV
 REPLACE_STRTOD
@@ -917,6 +916,7 @@ REPLACE_SETENV
 REPLACE_REALPATH
 REPLACE_REALLOC
 REPLACE_RANDOM_R
+REPLACE_QSORT_R
 REPLACE_PUTENV
 REPLACE_PTSNAME_R
 REPLACE_PTSNAME
@@ -968,6 +968,7 @@ GNULIB_REALPATH
 GNULIB_REALLOC_POSIX
 GNULIB_RANDOM_R
 GNULIB_RANDOM
+GNULIB_QSORT_R
 GNULIB_PUTENV
 GNULIB_PTSNAME_R
 GNULIB_PTSNAME
@@ -986,6 +987,9 @@ GNULIB_CANONICALIZE_FILE_NAME
 GNULIB_CALLOC_POSIX
 GNULIB_ATOLL
 GNULIB__EXIT
+LOCALE_FR_UTF8
+LOCALE_ZH_CN
+LOCALE_JA
 LTLIBMULTITHREAD
 LIBMULTITHREAD
 LTLIBTHREAD
@@ -1002,6 +1006,7 @@ GL_GENERATE_STDDEF_H_FALSE
 GL_GENERATE_STDDEF_H_TRUE
 STDDEF_H
 HAVE_WCHAR_T
+HAVE_MAX_ALIGN_T
 REPLACE_NULL
 REPLACE_STRUCT_LCONV
 REPLACE_DUPLOCALE
@@ -1212,6 +1217,10 @@ PACKAGE_SUBMINOR_VERSION
 PACKAGE_MINOR_VERSION
 PACKAGE_MAJOR_VERSION
 DVR
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 am__untar
 am__tar
 AMTAR
@@ -1277,6 +1286,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_silent_rules
 enable_dependency_tracking
 enable_threads
 enable_shared
@@ -1858,7 +1868,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libdap 3.14.0 to adapt to many kinds of systems.
+\`configure' configures libdap 3.15.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1928,7 +1938,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libdap 3.14.0:";;
+     short | recursive ) echo "Configuration of libdap 3.15.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1936,6 +1946,8 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
   --enable-dependency-tracking
                           do not reject slow dependency extractors
   --disable-dependency-tracking
@@ -1957,8 +1969,9 @@ Optional Features:
   --enable-dap4           Enable DAP4 types and responses (default is Yes)
   --enable-developer      Build a debug (-g3 -O0) version of this code and
                           include assert() calls in the code (default is no)
-  --enable-coverage       Enable coverage testing.
-  --enable-valgrind       Use valgrind when running unit tests.
+  --enable-coverage       Collect coverage data (default is no)
+  --enable-valgrind       Use valgrind when running unit tests. (default is
+                          no)
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -2064,7 +2077,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libdap configure 3.14.0
+libdap configure 3.15.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2894,7 +2907,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libdap $as_me 3.14.0, which was
+It was created by libdap $as_me 3.15.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3174,9 +3187,20 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
+as_fn_append ac_header_list " fcntl.h"
+as_fn_append ac_header_list " malloc.h"
+as_fn_append ac_header_list " memory.h"
+as_fn_append ac_header_list " stddef.h"
+as_fn_append ac_header_list " stdlib.h"
+as_fn_append ac_header_list " string.h"
+as_fn_append ac_header_list " strings.h"
+as_fn_append ac_header_list " unistd.h"
+as_fn_append ac_header_list " pthread.h"
+as_fn_append ac_header_list " sys/param.h"
+as_fn_append ac_header_list " sys/time.h"
+as_fn_append ac_header_list " netinet/in.h"
 as_fn_append ac_func_list " btowc"
 as_fn_append ac_header_list " langinfo.h"
-as_fn_append ac_header_list " unistd.h"
 as_fn_append ac_func_list " symlink"
 as_fn_append ac_header_list " xlocale.h"
 as_fn_append ac_func_list " mbsinit"
@@ -3184,7 +3208,6 @@ as_fn_append ac_func_list " mbrtowc"
 as_fn_append ac_func_list " nl_langinfo"
 as_fn_append ac_func_list " isblank"
 as_fn_append ac_func_list " iswctype"
-as_fn_append ac_func_list " wcscoll"
 as_fn_append ac_header_list " wchar.h"
 as_fn_append ac_header_list " stdint.h"
 as_fn_append ac_header_list " features.h"
@@ -3298,7 +3321,7 @@ ac_config_headers="$ac_config_headers config.h dods-datatypes-config.h xdr-datat
 
 
 
-am__api_version='1.12'
+am__api_version='1.14'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -3482,8 +3505,8 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
@@ -3641,12 +3664,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -3729,6 +3746,45 @@ else
 fi
 rmdir .tst 2>/dev/null
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 if test "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
@@ -3751,7 +3807,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libdap'
- VERSION='3.14.0'
+ VERSION='3.15.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3779,18 +3835,70 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
 
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
 am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
 
 
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
 ac_config_commands="$ac_config_commands tests/atconfig"
 
 
@@ -3898,9 +4006,10 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 
-DAPLIB_CURRENT=18
-DAPLIB_AGE=1
-DAPLIB_REVISION=0
+
+DAPLIB_CURRENT=20
+DAPLIB_AGE=3
+DAPLIB_REVISION=1
 
 
 
@@ -3910,7 +4019,7 @@ LIBDAP_VERSION="$DAPLIB_CURRENT:$DAPLIB_REVISION:$DAPLIB_AGE"
 
 CLIENTLIB_CURRENT=7
 CLIENTLIB_AGE=1
-CLIENTLIB_REVISION=0
+CLIENTLIB_REVISION=1
 
 
 
@@ -3920,7 +4029,7 @@ CLIENTLIB_VERSION="$CLIENTLIB_CURRENT:$CLIENTLIB_REVISION:$CLIENTLIB_AGE"
 
 SERVERLIB_CURRENT=13
 SERVERLIB_AGE=6
-SERVERLIB_REVISION=0
+SERVERLIB_REVISION=1
 
 
 
@@ -5207,6 +5316,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
@@ -5733,12 +5901,12 @@ else
 fi
 
       if test -z "$ARFLAGS"; then
-        ARFLAGS='cru'
+        ARFLAGS='cr'
       fi
     fi
   else
     if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
+      ARFLAGS='cr'
     fi
   fi
 
@@ -5843,131 +6011,6 @@ fi
   fi
 
 
-if test "x$CC" != xcc; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
-$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
-$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
-fi
-set dummy $CC; ac_cc=`$as_echo "$2" |
-		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-   test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-then
-  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-  if test "x$CC" != xcc; then
-    # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.$ac_ext >&5'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-      rm -f conftest2.*
-      if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-      then
-	# cc works too.
-	:
-      else
-	# cc exists but doesn't like -o.
-	eval ac_cv_prog_cc_${ac_cc}_c_o=no
-      fi
-    fi
-  fi
-else
-  eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
-
-fi
-
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
@@ -6159,6 +6202,8 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
 
   $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
 
+  $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
+
   $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
   $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
@@ -6269,6 +6314,7 @@ fi
 
 
 
+  # Code from module absolute-header:
   # Code from module alloca-opt:
   # Code from module btowc:
   # Code from module byteswap:
@@ -6284,8 +6330,6 @@ fi
   # Code from module locale:
   # Code from module localeconv:
   # Code from module lock:
-  # Code from module malloc-gnu:
-  # Code from module malloc-posix:
   # Code from module mbrtowc:
   # Code from module mbsinit:
   # Code from module mbtowc:
@@ -6314,9 +6358,8 @@ fi
   # Code from module wctype-h:
 
 
-if test "$CC" = "gcc"
-then
-     if true; then
+if test x$CC = xgcc; then :
+   if true; then
   COMPILER_IS_GCC_TRUE=
   COMPILER_IS_GCC_FALSE='#'
 else
@@ -6325,7 +6368,7 @@ else
 fi
 
 else
-     if false; then
+   if false; then
   COMPILER_IS_GCC_TRUE=
   COMPILER_IS_GCC_FALSE='#'
 else
@@ -17219,10 +17262,14 @@ $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
 fi
 
 
-for ac_header in fcntl.h malloc.h memory.h netinet/in.h stddef.h stdlib.h string.h strings.h sys/param.h sys/time.h unistd.h uuid/uuid.h
+
+
+
+  for ac_header in $ac_header_list
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
 if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
@@ -17233,6 +17280,68 @@ fi
 done
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in uuid/uuid.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default"
+if test "x$ac_cv_header_uuid_uuid_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_UUID_UUID_H 1
+_ACEOF
+ found_uuid_uuid_h=true
+else
+  found_uuid_uuid_h=false
+fi
+
+done
+
+for ac_header in uuid.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "$ac_includes_default"
+if test "x$ac_cv_header_uuid_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_UUID_H 1
+_ACEOF
+ found_uuid_h=true
+else
+  found_uuid_h=false
+fi
+
+done
+
+
+if test $found_uuid_uuid_h = true -o $found_uuid_h = true; then :
+
+else
+  as_fn_error $? "Could not find uuid.h" "$LINENO" 5
+fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
 if ${ac_cv_c_const+:} false; then :
@@ -19230,25 +19339,6 @@ $as_echo "$gl_cv_pragma_columns" >&6; }
 
 
 
-  for ac_header in $ac_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
 
 
 
@@ -19456,6 +19546,7 @@ $as_echo "$ac_cv_gnu_library_2_1" >&6; }
 
 
     REPLACE_NULL=0;
+  HAVE_MAX_ALIGN_T=1;
   HAVE_WCHAR_T=1;
 
 
@@ -19495,6 +19586,15 @@ $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
 
 
   STDDEF_H=
+  ac_fn_c_check_type "$LINENO" "max_align_t" "ac_cv_type_max_align_t" "#include <stddef.h>
+
+"
+if test "x$ac_cv_type_max_align_t" = xyes; then :
+
+else
+  HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h
+fi
+
   if test $gt_cv_c_wchar_t = no; then
     HAVE_WCHAR_T=0
     STDDEF_H=stddef.h
@@ -19557,36 +19657,40 @@ if ${gl_cv_next_stddef_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stddef.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stddef.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
 
-               gl_header_literal_regex=`echo 'stddef.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+        gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stddef_h
+           gl_cv_next_stddef_h='"'$gl_header'"'
 
 
 fi
@@ -19936,26 +20040,42 @@ fi
         # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
         # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
         # the second one only in libpthread, and lock.c needs it.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        #
+        # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+        # needs -pthread for some reason.  See:
+        # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html
+        save_LIBS=$LIBS
+        for gl_pthread in '' '-pthread'; do
+          LIBS="$LIBS $gl_pthread"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
+                 pthread_mutex_t m;
+                 pthread_mutexattr_t ma;
+
 int
 main ()
 {
-pthread_mutex_lock((pthread_mutex_t*)0);
-               pthread_mutexattr_init((pthread_mutexattr_t*)0);
+pthread_mutex_lock (&m);
+                 pthread_mutexattr_init (&ma);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   gl_have_pthread=yes
+             LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread
+             LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+          LIBS=$save_LIBS
+          test -n "$gl_have_pthread" && break
+        done
+
         # Test for libpthread by looking for pthread_kill. (Not pthread_self,
         # since it is defined as a macro on OSF/1.)
-        if test -n "$gl_have_pthread"; then
+        if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then
           # The program links fine without libpthread. But it may actually
           # need to link with libpthread in order to create multiple threads.
           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
@@ -20009,7 +20129,7 @@ $as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
 
 fi
 
-        else
+        elif test -z "$gl_have_pthread"; then
           # Some library is needed. Try libpthread and libc_r.
           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
@@ -20749,116 +20869,6 @@ $as_echo "$gl_threads_api" >&6; }
 
 
 
-  GNULIB__EXIT=0;
-  GNULIB_ATOLL=0;
-  GNULIB_CALLOC_POSIX=0;
-  GNULIB_CANONICALIZE_FILE_NAME=0;
-  GNULIB_GETLOADAVG=0;
-  GNULIB_GETSUBOPT=0;
-  GNULIB_GRANTPT=0;
-  GNULIB_MALLOC_POSIX=0;
-  GNULIB_MBTOWC=0;
-  GNULIB_MKDTEMP=0;
-  GNULIB_MKOSTEMP=0;
-  GNULIB_MKOSTEMPS=0;
-  GNULIB_MKSTEMP=0;
-  GNULIB_MKSTEMPS=0;
-  GNULIB_POSIX_OPENPT=0;
-  GNULIB_PTSNAME=0;
-  GNULIB_PTSNAME_R=0;
-  GNULIB_PUTENV=0;
-  GNULIB_RANDOM=0;
-  GNULIB_RANDOM_R=0;
-  GNULIB_REALLOC_POSIX=0;
-  GNULIB_REALPATH=0;
-  GNULIB_RPMATCH=0;
-  GNULIB_SECURE_GETENV=0;
-  GNULIB_SETENV=0;
-  GNULIB_STRTOD=0;
-  GNULIB_STRTOLL=0;
-  GNULIB_STRTOULL=0;
-  GNULIB_SYSTEM_POSIX=0;
-  GNULIB_UNLOCKPT=0;
-  GNULIB_UNSETENV=0;
-  GNULIB_WCTOMB=0;
-    HAVE__EXIT=1;
-  HAVE_ATOLL=1;
-  HAVE_CANONICALIZE_FILE_NAME=1;
-  HAVE_DECL_GETLOADAVG=1;
-  HAVE_GETSUBOPT=1;
-  HAVE_GRANTPT=1;
-  HAVE_MKDTEMP=1;
-  HAVE_MKOSTEMP=1;
-  HAVE_MKOSTEMPS=1;
-  HAVE_MKSTEMP=1;
-  HAVE_MKSTEMPS=1;
-  HAVE_POSIX_OPENPT=1;
-  HAVE_PTSNAME=1;
-  HAVE_PTSNAME_R=1;
-  HAVE_RANDOM=1;
-  HAVE_RANDOM_H=1;
-  HAVE_RANDOM_R=1;
-  HAVE_REALPATH=1;
-  HAVE_RPMATCH=1;
-  HAVE_SECURE_GETENV=1;
-  HAVE_SETENV=1;
-  HAVE_DECL_SETENV=1;
-  HAVE_STRTOD=1;
-  HAVE_STRTOLL=1;
-  HAVE_STRTOULL=1;
-  HAVE_STRUCT_RANDOM_DATA=1;
-  HAVE_SYS_LOADAVG_H=0;
-  HAVE_UNLOCKPT=1;
-  HAVE_DECL_UNSETENV=1;
-  REPLACE_CALLOC=0;
-  REPLACE_CANONICALIZE_FILE_NAME=0;
-  REPLACE_MALLOC=0;
-  REPLACE_MBTOWC=0;
-  REPLACE_MKSTEMP=0;
-  REPLACE_PTSNAME=0;
-  REPLACE_PTSNAME_R=0;
-  REPLACE_PUTENV=0;
-  REPLACE_RANDOM_R=0;
-  REPLACE_REALLOC=0;
-  REPLACE_REALPATH=0;
-  REPLACE_SETENV=0;
-  REPLACE_STRTOD=0;
-  REPLACE_UNSETENV=0;
-  REPLACE_WCTOMB=0;
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5
-$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; }
-if ${gl_cv_func_malloc_posix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-             choke me
-             #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_func_malloc_posix=yes
-else
-  gl_cv_func_malloc_posix=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5
-$as_echo "$gl_cv_func_malloc_posix" >&6; }
-
-
 
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
 $as_echo_n "checking for mbstate_t... " >&6; }
@@ -21308,6 +21318,86 @@ $as_echo "$gt_cv_locale_fr_utf8" >&6; }
 
 
 
+  GNULIB__EXIT=0;
+  GNULIB_ATOLL=0;
+  GNULIB_CALLOC_POSIX=0;
+  GNULIB_CANONICALIZE_FILE_NAME=0;
+  GNULIB_GETLOADAVG=0;
+  GNULIB_GETSUBOPT=0;
+  GNULIB_GRANTPT=0;
+  GNULIB_MALLOC_POSIX=0;
+  GNULIB_MBTOWC=0;
+  GNULIB_MKDTEMP=0;
+  GNULIB_MKOSTEMP=0;
+  GNULIB_MKOSTEMPS=0;
+  GNULIB_MKSTEMP=0;
+  GNULIB_MKSTEMPS=0;
+  GNULIB_POSIX_OPENPT=0;
+  GNULIB_PTSNAME=0;
+  GNULIB_PTSNAME_R=0;
+  GNULIB_PUTENV=0;
+  GNULIB_QSORT_R=0;
+  GNULIB_RANDOM=0;
+  GNULIB_RANDOM_R=0;
+  GNULIB_REALLOC_POSIX=0;
+  GNULIB_REALPATH=0;
+  GNULIB_RPMATCH=0;
+  GNULIB_SECURE_GETENV=0;
+  GNULIB_SETENV=0;
+  GNULIB_STRTOD=0;
+  GNULIB_STRTOLL=0;
+  GNULIB_STRTOULL=0;
+  GNULIB_SYSTEM_POSIX=0;
+  GNULIB_UNLOCKPT=0;
+  GNULIB_UNSETENV=0;
+  GNULIB_WCTOMB=0;
+    HAVE__EXIT=1;
+  HAVE_ATOLL=1;
+  HAVE_CANONICALIZE_FILE_NAME=1;
+  HAVE_DECL_GETLOADAVG=1;
+  HAVE_GETSUBOPT=1;
+  HAVE_GRANTPT=1;
+  HAVE_MKDTEMP=1;
+  HAVE_MKOSTEMP=1;
+  HAVE_MKOSTEMPS=1;
+  HAVE_MKSTEMP=1;
+  HAVE_MKSTEMPS=1;
+  HAVE_POSIX_OPENPT=1;
+  HAVE_PTSNAME=1;
+  HAVE_PTSNAME_R=1;
+  HAVE_RANDOM=1;
+  HAVE_RANDOM_H=1;
+  HAVE_RANDOM_R=1;
+  HAVE_REALPATH=1;
+  HAVE_RPMATCH=1;
+  HAVE_SECURE_GETENV=1;
+  HAVE_SETENV=1;
+  HAVE_DECL_SETENV=1;
+  HAVE_STRTOD=1;
+  HAVE_STRTOLL=1;
+  HAVE_STRTOULL=1;
+  HAVE_STRUCT_RANDOM_DATA=1;
+  HAVE_SYS_LOADAVG_H=0;
+  HAVE_UNLOCKPT=1;
+  HAVE_DECL_UNSETENV=1;
+  REPLACE_CALLOC=0;
+  REPLACE_CANONICALIZE_FILE_NAME=0;
+  REPLACE_MALLOC=0;
+  REPLACE_MBTOWC=0;
+  REPLACE_MKSTEMP=0;
+  REPLACE_PTSNAME=0;
+  REPLACE_PTSNAME_R=0;
+  REPLACE_PUTENV=0;
+  REPLACE_QSORT_R=0;
+  REPLACE_RANDOM_R=0;
+  REPLACE_REALLOC=0;
+  REPLACE_REALPATH=0;
+  REPLACE_SETENV=0;
+  REPLACE_STRTOD=0;
+  REPLACE_UNSETENV=0;
+  REPLACE_WCTOMB=0;
+
+
     gl_cv_c_multiarch=no
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -21372,17 +21462,19 @@ else
    for ac_kw in __restrict __restrict__ _Restrict restrict; do
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-typedef int * int_ptr;
-	int foo (int_ptr $ac_kw ip) {
-	return ip[0];
-       }
+typedef int *int_ptr;
+	   int foo (int_ptr $ac_kw ip) { return ip[0]; }
+	   int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+	   int bar (int ip[$ac_kw]) { return ip[0]; }
+
 int
 main ()
 {
 int s[1];
-	int * $ac_kw t = s;
-	t[0] = 0;
-	return foo(t)
+	   int *$ac_kw t = s;
+	   t[0] = 0;
+	   return foo (t) + bar (t);
+
   ;
   return 0;
 }
@@ -21409,8 +21501,7 @@ _ACEOF
  esac
 
 
-
-      for ac_header in stdlib.h
+  for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
 if test "x$ac_cv_header_stdlib_h" = xyes; then :
@@ -21422,29 +21513,21 @@ fi
 
 done
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
 $as_echo_n "checking for GNU libc compatible malloc... " >&6; }
 if ${ac_cv_func_malloc_0_nonnull+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  case "$host_os" in
-          # Guess yes on platforms where we know the result.
-          *-gnu* | freebsd* | netbsd* | openbsd* \
-          | hpux* | solaris* | cygwin* | mingw*)
-            ac_cv_func_malloc_0_nonnull=yes ;;
-          # If we don't know, assume the worst.
-          *) ac_cv_func_malloc_0_nonnull=no ;;
-        esac
-
+  ac_cv_func_malloc_0_nonnull=no
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined STDC_HEADERS || defined HAVE_STDLIB_H
-            # include <stdlib.h>
-            #else
-            char *malloc ();
-            #endif
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
 
 int
 main ()
@@ -21453,7 +21536,6 @@ return ! malloc (0);
   ;
   return 0;
 }
-
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_malloc_0_nonnull=yes
@@ -21464,11 +21546,10 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
-  if test $ac_cv_func_malloc_0_nonnull = yes; then :
+if test $ac_cv_func_malloc_0_nonnull = yes; then :
   gl_cv_func_malloc_0_nonnull=1
 else
   gl_cv_func_malloc_0_nonnull=0
@@ -21484,8 +21565,6 @@ _ACEOF
 
 
 
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
 if ${ac_cv_header_stdbool_h+:} false; then :
@@ -21754,36 +21833,40 @@ else
              if test $ac_cv_header_stdint_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdint.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'stdint.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stdint.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdint_h
+           gl_cv_next_stdint_h='"'$gl_header'"'
           else
                gl_cv_next_stdint_h='<'stdint.h'>'
              fi
@@ -22468,36 +22551,40 @@ if ${gl_cv_next_sys_types_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'sys/types.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
 
-               gl_header_literal_regex=`echo 'sys/types.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_sys_types_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+           gl_header=$gl_cv_absolute_sys_types_h
+           gl_cv_next_sys_types_h='"'$gl_header'"'
 
 
 fi
@@ -22637,9 +22724,11 @@ $as_echo "$gl_cv_next_sys_types_h" >&6; }
   REPLACE_PWRITE=0;
   REPLACE_READ=0;
   REPLACE_READLINK=0;
+  REPLACE_READLINKAT=0;
   REPLACE_RMDIR=0;
   REPLACE_SLEEP=0;
   REPLACE_SYMLINK=0;
+  REPLACE_SYMLINKAT=0;
   REPLACE_TTYNAME_R=0;
   REPLACE_UNLINK=0;
   REPLACE_UNLINKAT=0;
@@ -23049,36 +23138,40 @@ else
              if test $ac_cv_header_langinfo_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <langinfo.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'langinfo.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_langinfo_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'langinfo.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_langinfo_h
+           gl_cv_next_langinfo_h='"'$gl_header'"'
           else
                gl_cv_next_langinfo_h='<'langinfo.h'>'
              fi
@@ -23429,36 +23522,40 @@ if ${gl_cv_next_locale_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <locale.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'locale.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
 
-               gl_header_literal_regex=`echo 'locale.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_locale_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+           gl_header=$gl_cv_absolute_locale_h
+           gl_cv_next_locale_h='"'$gl_header'"'
 
 
 fi
@@ -23628,136 +23725,6 @@ _ACEOF
 
 
 
-      for ac_header in stdlib.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STDLIB_H 1
-_ACEOF
-
-fi
-
-done
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
-$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-if ${ac_cv_func_malloc_0_nonnull+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  case "$host_os" in
-          # Guess yes on platforms where we know the result.
-          *-gnu* | freebsd* | netbsd* | openbsd* \
-          | hpux* | solaris* | cygwin* | mingw*)
-            ac_cv_func_malloc_0_nonnull=yes ;;
-          # If we don't know, assume the worst.
-          *) ac_cv_func_malloc_0_nonnull=no ;;
-        esac
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-            # include <stdlib.h>
-            #else
-            char *malloc ();
-            #endif
-
-int
-main ()
-{
-return ! malloc (0);
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_malloc_0_nonnull=yes
-else
-  ac_cv_func_malloc_0_nonnull=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
-$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
-  if test $ac_cv_func_malloc_0_nonnull = yes; then :
-
-$as_echo "#define HAVE_MALLOC_GNU 1" >>confdefs.h
-
-else
-  $as_echo "#define HAVE_MALLOC_GNU 0" >>confdefs.h
-
-     REPLACE_MALLOC=1
-
-fi
-
-
-  if test $REPLACE_MALLOC = 1; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
-
-  fi
-
-
-cat >>confdefs.h <<_ACEOF
-#define GNULIB_MALLOC_GNU 1
-_ACEOF
-
-
-
-
-
-  if test $gl_cv_func_malloc_posix = yes; then
-
-$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h
-
-  else
-    REPLACE_MALLOC=1
-  fi
-
-  if test $REPLACE_MALLOC = 1; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
-
-  fi
-
-
-
-
-
-          GNULIB_MALLOC_POSIX=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h
-
-
-
-
-
-
 
 
 
@@ -24283,6 +24250,49 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5
 $as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; }
 
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5
+$as_echo_n "checking whether mbrtowc works on empty input... " >&6; }
+if ${gl_cv_func_mbrtowc_empty_input+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                     # Guess no on AIX and glibc systems.
+        aix* | *-gnu*)
+                    gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+        *)          gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+      esac
+      if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+           #include <wchar.h>
+           static wchar_t wc;
+           static mbstate_t mbs;
+           int
+           main (void)
+           {
+             return mbrtowc (&wc, "", 0, &mbs) == (size_t) -2;
+           }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_empty_input=no
+else
+  gl_cv_func_mbrtowc_empty_input=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5
+$as_echo "$gl_cv_func_mbrtowc_empty_input" >&6; }
+
       case "$gl_cv_func_mbrtowc_null_arg1" in
         *yes) ;;
         *)
@@ -24315,6 +24325,14 @@ $as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h
            REPLACE_MBRTOWC=1
            ;;
       esac
+      case "$gl_cv_func_mbrtowc_empty_input" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
     fi
   fi
 
@@ -24722,6 +24740,7 @@ fi
     # If cross compiling, assume the test would fail and use the included
     # regex.c.
 
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5
 $as_echo_n "checking for working re_compile_pattern... " >&6; }
 if ${gl_cv_func_re_compile_pattern_working+:} false; then :
@@ -24737,9 +24756,19 @@ else
             #include <locale.h>
             #include <limits.h>
             #include <string.h>
-            #if HAVE_DECL_ALARM
-            # include <unistd.h>
+
+            #if defined M_CHECK_ACTION || HAVE_DECL_ALARM
             # include <signal.h>
+            # include <unistd.h>
+            #endif
+
+            #if HAVE_MALLOC_H
+            # include <malloc.h>
+            #endif
+
+            #ifdef M_CHECK_ACTION
+            /* Exit with distinguishable exit code.  */
+            static void sigabrt_no_core (int sig) { raise (SIGTERM); }
             #endif
 
 int
@@ -24752,11 +24781,18 @@ int result = 0;
             const char *s;
             struct re_registers regs;
 
+            /* Some builds of glibc go into an infinite loop on this
+               test.  Use alarm to force death, and mallopt to avoid
+               malloc recursion in diagnosing the corrupted heap. */
 #if HAVE_DECL_ALARM
-            /* Some builds of glibc go into an infinite loop on this test.  */
             signal (SIGALRM, SIG_DFL);
             alarm (2);
 #endif
+#ifdef M_CHECK_ACTION
+            signal (SIGABRT, sigabrt_no_core);
+            mallopt (M_CHECK_ACTION, 2);
+#endif
+
             if (setlocale (LC_ALL, "en_US.UTF-8"))
               {
                 {
@@ -25097,6 +25133,15 @@ fi
 
 
   STDDEF_H=
+  ac_fn_c_check_type "$LINENO" "max_align_t" "ac_cv_type_max_align_t" "#include <stddef.h>
+
+"
+if test "x$ac_cv_type_max_align_t" = xyes; then :
+
+else
+  HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h
+fi
+
   if test $gt_cv_c_wchar_t = no; then
     HAVE_WCHAR_T=0
     STDDEF_H=stddef.h
@@ -25159,36 +25204,40 @@ if ${gl_cv_next_stddef_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stddef.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stddef.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
 
-               gl_header_literal_regex=`echo 'stddef.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+        gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stddef_h
+           gl_cv_next_stddef_h='"'$gl_header'"'
 
 
 fi
@@ -25231,36 +25280,40 @@ if ${gl_cv_next_stdlib_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stdlib.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
 
-               gl_header_literal_regex=`echo 'stdlib.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+        gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdlib_h
+           gl_cv_next_stdlib_h='"'$gl_header'"'
 
 
 fi
@@ -25359,36 +25412,40 @@ else
              if test $ac_cv_header_unistd_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <unistd.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'unistd.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'unistd.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_unistd_h
+           gl_cv_next_unistd_h='"'$gl_header'"'
           else
                gl_cv_next_unistd_h='<'unistd.h'>'
              fi
@@ -25500,36 +25557,40 @@ else
              if test $ac_cv_header_wchar_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <wchar.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'wchar.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'wchar.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wchar_h
+           gl_cv_next_wchar_h='"'$gl_header'"'
           else
                gl_cv_next_wchar_h='<'wchar.h'>'
              fi
@@ -25959,36 +26020,40 @@ else
              if test $ac_cv_header_wctype_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <wctype.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
 
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'wctype.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'wctype.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wctype_h
+           gl_cv_next_wctype_h='"'$gl_header'"'
           else
                gl_cv_next_wctype_h='<'wctype.h'>'
              fi
@@ -26994,8 +27059,7 @@ $as_echo "#define DODS_DEBUG2 /**/" >>confdefs.h
       ;;
     esac
 
-if test "$prefix" = "NONE"
-then
+if test "$prefix" = "NONE"; then :
 
 $as_echo "#define LIBDAP_ROOT \"/usr/local\"" >>confdefs.h
 
@@ -27009,13 +27073,13 @@ fi
 
 # Check whether --enable-dap4 was given.
 if test "${enable_dap4+set}" = set; then :
-  enableval=$enable_dap4;
+  enableval=$enable_dap4; enable_dap4=${enableval}
 else
-  enable_dap4="yes"
+  enable_dap4=yes
 fi
 
 
-if test "x$enable_dap4" = "xyes"; then :
+if test x$enable_dap4 = xyes; then :
 
 
 $as_echo "#define DAP4 1" >>confdefs.h
@@ -27042,27 +27106,27 @@ fi
 
 # Check whether --enable-developer was given.
 if test "${enable_developer+set}" = set; then :
-  enableval=$enable_developer; case "${enableval}" in
-       yes) build_developer=true ;;
-       no)  build_developer=false ;;
-       *) as_fn_error $? "bad value ${enableval} for --enable-developer" "$LINENO" 5 ;;
-     esac
+  enableval=$enable_developer; build_developer=${enableval}
 else
-  build_developer=false
+  build_developer=no
 fi
 
 
-if test "x$build_developer" = "xtrue"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: \"Building developer version\"" >&5
-$as_echo "$as_me: \"Building developer version\"" >&6;}
+if test x$build_developer = xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Building developer version" >&5
+$as_echo "$as_me: Building developer version" >&6;}
+        if true; then
+  BUILD_DEVELOPER_TRUE=
+  BUILD_DEVELOPER_FALSE='#'
 else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: \"Not building developer version\"" >&5
-$as_echo "$as_me: \"Not building developer version\"" >&6;}
-
-$as_echo "#define NDEBUG 1" >>confdefs.h
-
+  BUILD_DEVELOPER_TRUE='#'
+  BUILD_DEVELOPER_FALSE=
 fi
- if test "x$build_developer" = "xtrue"; then
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Not building developer version" >&5
+$as_echo "$as_me: Not building developer version" >&6;}
+        if false; then
   BUILD_DEVELOPER_TRUE=
   BUILD_DEVELOPER_FALSE='#'
 else
@@ -27071,34 +27135,45 @@ else
 fi
 
 
+$as_echo "#define NDEBUG 1" >>confdefs.h
+
+fi
+
 
 
-coverage=no
 # Check whether --enable-coverage was given.
 if test "${enable_coverage+set}" = set; then :
-  enableval=$enable_coverage;  coverage=yes
+  enableval=$enable_coverage; coverage=$enableval
+else
+  coverage=no
 fi
 
 
-if [ "$coverage" = "yes" ]; then
-    if [ "$GCC" = "yes" ]; then
-        CFLAGS="-fprofile-arcs -ftest-coverage $CFLAGS"
-    else
-        as_fn_error $? "Can only enable coverage when using gcc." "$LINENO" 5
-    fi
+if test x$coverage = xyes; then :
+   if test x$GCC = xyes; then :
+   CFLAGS="-fprofile-arcs -ftest-coverage -pg $CFLAGS"
+              CXXFLAGS="-fprofile-arcs -ftest-coverage -pg $CXXFLAGS"
+              LDFLAGS="-pg $LDFLAGS"
+	          { $as_echo "$as_me:${as_lineno-$LINENO}: Building coverage reporting." >&5
+$as_echo "$as_me: Building coverage reporting." >&6;}
+else
+   as_fn_error $? "Can only enable coverage when using gcc." "$LINENO" 5
+fi
 fi
 
 # Support for running test cases using valgrind:
 
-use_valgrind=false
+use_valgrind=no
 # Check whether --enable-valgrind was given.
 if test "${enable_valgrind+set}" = set; then :
-  enableval=$enable_valgrind;  use_valgrind=true
+  enableval=$enable_valgrind; use_valgrind=$enableval
+else
+  use_valgrind=no
 fi
 
 
-if [ "$use_valgrind" = "true" ]; then
-    # Extract the first word of "valgrind", so it can be a program name with args.
+if test x$use_valgrind = xyes ; then :
+   # Extract the first word of "valgrind", so it can be a program name with args.
 set dummy valgrind; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
@@ -27136,13 +27211,15 @@ $as_echo "no" >&6; }
 fi
 
 
-
-    if [ "$HAVE_VALGRIND" = "no" ]; then
-        as_fn_error $? "Valgrind not found in PATH. " "$LINENO" 5
-    fi
+        if test x$HAVE_VALGRIND = xyes ; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using valgrind with unit tests." >&5
+$as_echo "$as_me: Using valgrind with unit tests." >&6;}
+else
+  as_fn_error $? "Valgrind not found in PATH." "$LINENO" 5
+fi
 fi
 
- if $use_valgrind; then
+ if test x$use_valgrind = xyes; then
   USE_VALGRIND_TRUE=
   USE_VALGRIND_FALSE='#'
 else
@@ -27157,7 +27234,8 @@ fi
 
 
 
-ac_config_files="$ac_config_files Makefile libdap.pc libdapclient.pc libdapserver.pc main_page.doxygen doxy.conf abi_checker.xml gl/Makefile d4_ce/Makefile tests/Makefile tests/atlocal unit-tests/Makefile unit-tests/cache-testsuite/Makefile"
+
+ac_config_files="$ac_config_files Makefile libdap.pc libdapclient.pc libdapserver.pc main_page.doxygen doxy.conf abi_checker.xml gl/Makefile d4_ce/Makefile d4_function/Makefile tests/Makefile tests/atlocal unit-tests/Makefile unit-tests/cache-testsuite/Makefile"
 
 
 ac_config_files="$ac_config_files dap-config"
@@ -27393,6 +27471,10 @@ if test -z "${BUILD_DEVELOPER_TRUE}" && test -z "${BUILD_DEVELOPER_FALSE}"; then
   as_fn_error $? "conditional \"BUILD_DEVELOPER\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_DEVELOPER_TRUE}" && test -z "${BUILD_DEVELOPER_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_DEVELOPER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_VALGRIND_TRUE}" && test -z "${USE_VALGRIND_FALSE}"; then
   as_fn_error $? "conditional \"USE_VALGRIND\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -27794,7 +27876,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libdap $as_me 3.14.0, which was
+This file was extended by libdap $as_me 3.15.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -27860,7 +27942,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libdap config.status 3.14.0
+libdap config.status 3.15.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -28380,6 +28462,7 @@ do
     "abi_checker.xml") CONFIG_FILES="$CONFIG_FILES abi_checker.xml" ;;
     "gl/Makefile") CONFIG_FILES="$CONFIG_FILES gl/Makefile" ;;
     "d4_ce/Makefile") CONFIG_FILES="$CONFIG_FILES d4_ce/Makefile" ;;
+    "d4_function/Makefile") CONFIG_FILES="$CONFIG_FILES d4_function/Makefile" ;;
     "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
     "tests/atlocal") CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;;
     "unit-tests/Makefile") CONFIG_FILES="$CONFIG_FILES unit-tests/Makefile" ;;
@@ -29004,7 +29087,7 @@ SHELL=\${CONFIG_SHELL-'$SHELL'}
 ATEOF
  ;;
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -29055,7 +29138,7 @@ $as_echo X"$mf" |
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
diff --git a/configure.ac b/configure.ac
index 61745bd..b8037ab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.63)
 dnl Update version here and below at LIB_CURRENT, ..., if needed.
-AC_INIT(libdap, 3.14.0, opendap-tech at opendap.org)
+AC_INIT(libdap, 3.15.1, opendap-tech at opendap.org)
 AC_DEFINE(DAP_PROTOCOL_VERSION, ["4.0"], [Highest DAP version implemented?])
 AC_SUBST(DAP_PROTOCOL_VERSION)
 
@@ -31,8 +31,9 @@ AC_SUBST(PACKAGE_MAJOR_VERSION)
 AC_SUBST(PACKAGE_MINOR_VERSION)
 AC_SUBST(PACKAGE_SUBMINOR_VERSION)
 
-dnl Removed this; only the Array and Sequence classes ever have constraints that 
-dnl need to be evaluated at run time (DAP4) or only Sequences (DAP2). jhrg 9/4/13
+dnl Removed this; only the Array and Sequence classes ever have
+dnl constraints that need to be evaluated at run time (DAP4) or only
+dnl Sequences (DAP2). jhrg 9/4/13
 
 dnl AC_DEFINE(EVAL, 1, [Should all the classes run ConstraintEvaluator::eval()?])
 dnl AC_SUBST(EVAL)
@@ -44,9 +45,16 @@ dnl to default values otherwise.
 AC_CANONICAL_HOST
 AC_SUBST(host)
 
-DAPLIB_CURRENT=18
-DAPLIB_AGE=1
-DAPLIB_REVISION=0
+dnl How to set these SO variables:
+dnl No interfaces changed, only implementations (good): ==> Increment REVISION.
+dnl Interfaces added, none removed (good): ==> Increment CURRENT,
+dnl increment AGE, set REVISION to 0.
+dnl Interfaces removed or changed (BAD, breaks upward compatibility):
+dnl ==> Increment CURRENT, set AGE and REVISION to 0.
+
+DAPLIB_CURRENT=20
+DAPLIB_AGE=3
+DAPLIB_REVISION=1
 AC_SUBST(DAPLIB_CURRENT)
 AC_SUBST(DAPLIB_AGE)
 AC_SUBST(DAPLIB_REVISION)
@@ -56,7 +64,7 @@ AC_SUBST(LIBDAP_VERSION)
 
 CLIENTLIB_CURRENT=7
 CLIENTLIB_AGE=1
-CLIENTLIB_REVISION=0
+CLIENTLIB_REVISION=1
 AC_SUBST(CLIENTLIB_CURRENT)
 AC_SUBST(CLIENTLIB_AGE)
 AC_SUBST(CLIENTLIB_REVISION)
@@ -66,7 +74,7 @@ AC_SUBST(CLIENTLIB_VERSION)
 
 SERVERLIB_CURRENT=13
 SERVERLIB_AGE=6
-SERVERLIB_REVISION=0
+SERVERLIB_REVISION=1
 AC_SUBST(SERVERLIB_CURRENT)
 AC_SUBST(SERVERLIB_AGE)
 AC_SUBST(SERVERLIB_REVISION)
@@ -83,12 +91,9 @@ dnl Call this gnulib macro right after a working C Compiler is found
 gl_EARLY
 
 dnl echo "CC = $CC"
-if test "$CC" = "gcc"
-then
-    AM_CONDITIONAL([COMPILER_IS_GCC],[true])
-else
-    AM_CONDITIONAL([COMPILER_IS_GCC],[false])
-fi
+AS_IF([test x$CC = xgcc],
+      [AM_CONDITIONAL([COMPILER_IS_GCC],[true])],
+      [AM_CONDITIONAL([COMPILER_IS_GCC],[false])])
 
 dnl AC_PROG_YACC
 dnl AC_PROG_LEX
@@ -129,7 +134,16 @@ AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 
-AC_CHECK_HEADERS([fcntl.h malloc.h memory.h netinet/in.h stddef.h stdlib.h string.h strings.h sys/param.h sys/time.h unistd.h uuid/uuid.h])
+AC_CHECK_HEADERS_ONCE([fcntl.h malloc.h memory.h stddef.h stdlib.h string.h strings.h unistd.h pthread.h])
+AC_CHECK_HEADERS_ONCE([sys/param.h sys/time.h])
+AC_CHECK_HEADERS_ONCE([netinet/in.h])
+
+dnl AC_CHECK_HEADERS_ONCE([uuid/uuid.h uuid.h])
+dnl Do this because we have had a number of problems with the UUID header/library
+AC_CHECK_HEADERS([uuid/uuid.h],[found_uuid_uuid_h=true],[found_uuid_uuid_h=false])
+AC_CHECK_HEADERS([uuid.h],[found_uuid_h=true],[found_uuid_h=false])
+
+AS_IF([test $found_uuid_uuid_h = true -o $found_uuid_h = true], [], [AC_MSG_ERROR([Could not find uuid.h])])
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
@@ -297,18 +311,16 @@ AM_PATH_CPPUNIT(1.12.0,
 DODS_DEBUG_OPTION
 
 dnl See util.cc:dods_root()
-if test "$prefix" = "NONE"
-then
-AC_DEFINE([LIBDAP_ROOT], ["/usr/local"], [Set to the prefix directory])
-else
-AC_DEFINE_UNQUOTED([LIBDAP_ROOT], ["$prefix"], [Set to the prefix directory])
-fi
+AS_IF([test "$prefix" = "NONE"],
+      [AC_DEFINE([LIBDAP_ROOT], ["/usr/local"], [Set to the prefix directory])],
+	  [AC_DEFINE_UNQUOTED([LIBDAP_ROOT], ["$prefix"], [Set to the prefix directory])])
 
+dnl By default, DAP4 is enabled. Use this to disable. jhrg 5/12/15
 AC_ARG_ENABLE([dap4], 
-    AC_HELP_STRING([--enable-dap4], [Enable DAP4 types and responses (default is Yes)]),
-    [], [enable_dap4="yes"])
+    [AC_HELP_STRING([--enable-dap4], [Enable DAP4 types and responses (default is Yes)])],
+    [enable_dap4=${enableval}], [enable_dap4=yes])
 
-AS_IF([test "x$enable_dap4" = "xyes"], [
+AS_IF([test x$enable_dap4 = xyes], [
     dnl Do the stuff needed for enabling the feature
     dnl echo "Defining DAP4! "
     AC_DEFINE([DAP4], 1, [Should DAP4 support be enabled?])
@@ -318,22 +330,17 @@ AS_IF([test "x$enable_dap4" = "xyes"], [
 ])
 
 AC_ARG_ENABLE([developer],
-[AS_HELP_STRING([--enable-developer],
-[Build a debug (-g3 -O0) version of this code and include assert() calls in the code (default is no)])],
-[case "${enableval}" in
-       yes) build_developer=true ;;
-       no)  build_developer=false ;;
-       *) AC_MSG_ERROR([bad value ${enableval} for --enable-developer]) ;;
-     esac],
-[build_developer=false])
-
-if test "x$build_developer" = "xtrue"; then
-   AC_MSG_NOTICE(["Building developer version"])
-else
-   AC_MSG_NOTICE(["Not building developer version"])
-   AC_DEFINE([NDEBUG], [1], [Define this to suppres assert() calls.])
-fi
-AM_CONDITIONAL([BUILD_DEVELOPER], [test "x$build_developer" = "xtrue"])
+	[AS_HELP_STRING([--enable-developer],
+				    [Build a debug (-g3 -O0) version of this code and include assert() calls in the code (default is no)])],
+    [build_developer=${enableval}],
+    [build_developer=no])
+
+AS_IF([test x$build_developer = xyes],
+      [AC_MSG_NOTICE([Building developer version])
+       AM_CONDITIONAL([BUILD_DEVELOPER], [true])],
+      [AC_MSG_NOTICE([Not building developer version])
+       AM_CONDITIONAL([BUILD_DEVELOPER], [false])
+       AC_DEFINE([NDEBUG], [1], [Define this to suppres assert() calls.])])
 
 DODS_GCOV_VALGRIND
 
@@ -354,6 +361,7 @@ AC_CONFIG_FILES([Makefile
 
                  gl/Makefile
                  d4_ce/Makefile
+                 d4_function/Makefile
                  
                  tests/Makefile
                  tests/atlocal
diff --git a/d4_ce/D4ConstraintEvaluator.cc b/d4_ce/D4ConstraintEvaluator.cc
index 5bcfc6a..c58f800 100644
--- a/d4_ce/D4ConstraintEvaluator.cc
+++ b/d4_ce/D4ConstraintEvaluator.cc
@@ -209,14 +209,10 @@ D4ConstraintEvaluator::mark_array_variable(BaseType *btp)
 
         Array::Dim_iter d = a->dim_begin();
         for (vector<index>::iterator i = d_indexes.begin(), e = d_indexes.end(); i != e; ++i) {
-            if ((*i).stride > (unsigned long long) a->dimension_stop(d, false))
-                throw Error(
-                        "For '" + btp->name()
-                                + "', the index stride value is greater than the number of elements in the Array");
-            if (!(*i).rest && ((*i).stop) > (unsigned long long) a->dimension_stop(d, false))
-                throw Error(
-                        "For '" + btp->name()
-                                + "', the index stop value is greater than the number of elements in the Array");
+            if ((*i).stride > (unsigned long long) (a->dimension_stop(d, false) - a->dimension_start(d, false)) + 1)
+                throw Error("For '" + btp->name() + "', the index stride value is greater than the number of elements in the Array");
+            if (!(*i).rest && ((*i).stop) > (unsigned long long) (a->dimension_stop(d, false) - a->dimension_start(d, false)) + 1)
+                throw Error("For '" + btp->name() + "', the index stop value is greater than the number of elements in the Array");
 
             D4Dimension *dim = a->dimension_D4dim(d);
 
diff --git a/d4_ce/D4FunctionEvaluator.h b/d4_ce/D4FunctionEvaluator.h
deleted file mode 100644
index ec65f81..0000000
--- a/d4_ce/D4FunctionEvaluator.h
+++ /dev/null
@@ -1,115 +0,0 @@
-
-// -*- mode: c++; c-basic-offset:4 -*-
-
-// This file is part of libdap, A C++ implementation of the OPeNDAP Data
-// Access Protocol.
-
-// Copyright (c) 2002,2003 OPeNDAP, Inc.
-// Author: James Gallagher <jgallagher at opendap.org>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//
-// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
-
-#ifndef D4_FUNCTION_DRIVER_H_
-#define D4_FUNCTION_DRIVER_H_
-
-#include <string>
-#include <vector>
-#include <stack>
-
-namespace libdap {
-
-class location;
-
-class BaseType;
-class Array;
-class ServerFunctionsList;
-
-class DMR;
-class D4Dimension;
-class D4RValue;
-class D4RValueList;
-
-/**
- * Driver for the DAP4 Functional expression parser.
- */
-class D4FunctionEvaluator {
-	bool d_trace_scanning;
-	bool d_trace_parsing;
-	std::string d_expr;
-
-	DMR *d_dmr;
-	ServerFunctionsList *d_sf_list;
-
-	D4RValueList *d_result;
-
-	std::stack<BaseType*> d_basetype_stack;
-
-	unsigned long long d_arg_length_hint;
-
-	// d_expr should be set by parse! Its value is used by the parser right before
-	// the actual parsing operation starts. jhrg 11/26/13
-	std::string *expression() { return &d_expr; }
-
-	void push_basetype(BaseType *btp) { d_basetype_stack.push(btp); }
-	BaseType *top_basetype() const { return d_basetype_stack.empty() ? 0 : d_basetype_stack.top(); }
-	void pop_basetype() { d_basetype_stack.pop(); }
-
-	D4RValue *build_rvalue(const std::string &id);
-
-	friend class D4FunctionParser;
-
-public:
-	D4FunctionEvaluator() : d_trace_scanning(false), d_trace_parsing(false), d_expr(""), d_dmr(0), d_sf_list(0),
-			d_result(0), d_arg_length_hint(0) { }
-	D4FunctionEvaluator(DMR *dmr, ServerFunctionsList *sf_list) : d_trace_scanning(false), d_trace_parsing(false),
-			d_expr(""), d_dmr(dmr), d_sf_list(sf_list), d_result(0), d_arg_length_hint(0) { }
-
-	virtual ~D4FunctionEvaluator() { }
-
-	bool parse(const std::string &expr);
-
-	bool trace_scanning() const { return d_trace_scanning; }
-	void set_trace_scanning(bool ts) { d_trace_scanning = ts; }
-
-	bool trace_parsing() const { return d_trace_parsing; }
-	void set_trace_parsing(bool tp) { d_trace_parsing = tp; }
-
-	/** Get the result of parsing the function(s)
-	 *
-	 * @return The result(s) packages in a D4RValueList
-	 */
-	D4RValueList *result() const { return d_result; }
-	void set_result(D4RValueList *rv_list) { d_result = rv_list; }
-
-	void eval(DMR *dmr);
-
-	unsigned long long get_arg_length_hint() const { return d_arg_length_hint; }
-	void set_arg_length_hint(unsigned long long alh) { d_arg_length_hint = alh; }
-
-	DMR *dmr() const { return d_dmr; }
-	void set_dmr(DMR *dmr) { d_dmr = dmr; }
-
-	ServerFunctionsList *sf_list() const { return d_sf_list; }
-	void set_sf_list(ServerFunctionsList *sf_list) { d_sf_list = sf_list; }
-
-	template <typename t> std::vector<t> *init_arg_list(t val);
-
-	void error(const libdap::location &l, const std::string &m);
-};
-
-} /* namespace libdap */
-#endif /* D4_FUNCTION_DRIVER_H_ */
diff --git a/d4_ce/Makefile.am b/d4_ce/Makefile.am
index a9ec12c..aa1a070 100644
--- a/d4_ce/Makefile.am
+++ b/d4_ce/Makefile.am
@@ -1,7 +1,11 @@
-# Tests
 
 AUTOMAKE_OPTIONS = foreign
 
+# We need this to make sure that parallel jobs don't fail for 
+# lack of stack.hh, ... because those are built by bison in one
+# shot.
+.NOTPARALLEL:
+
 # Arrange to build with the backward compatibility mode enabled.
 AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/d4_ce -I$(srcdir) $(XML2_CFLAGS)
 AM_CXXFLAGS =  
@@ -29,91 +33,43 @@ AM_CXXFLAGS += $(CXXFLAGS_DEBUG)
 endif
 
 noinst_LTLIBRARIES = libd4_ce_parser.la
-pkginclude_HEADERS = D4ConstraintEvaluator.h D4FunctionEvaluator.h
-
-BUILT_SOURCES = lex.d4_ce.cc lex.d4_function.cc
-# BUILT_SOURCES = d4_ce_parser.hh stack.hh location.hh position.hh d4_function_parser.hh
-
-libd4_ce_parser_la_SOURCES = D4ConstraintEvaluator.cc \
-	D4ConstraintEvaluator.h D4CEScanner.h D4FunctionEvaluator.cc	\
-	D4FunctionEvaluator.h D4FunctionScanner.h d4_ce_parser.tab.cc	\
-	d4_ce_parser.tab.hh lex.d4_ce.cc d4_function_parser.tab.cc	\
-	d4_function_parser.tab.hh lex.d4_function.cc location.hh	\
-	position.hh stack.hh
-
-# d4_ce_parser.yy d4_function_parser.yy d4_ce_scanner.ll d4_function_scanner.ll
-
-# Kludge: If we are not building the scanner/parser from the 
-# grammar sources, make sure to use the scanner class that
-# matches the generated code. This addresses an issue where
-# different versions of flex use 'int' or 'size_t' for some 
-# arguments in the scanner's protected methods. This is not
-# automatically updated to match changes in the gnerated files.
-# jhrg 3/31/15
-#
-# Goog intent behind this idea, but in practice it was not working to
-# build the DAP4 parsers this way. Given more time, it might be
-# something that will work, but for the next release (early April
-# 2015) bison 3.x is going to be a requirement. jhrg 4/5/15
+pkginclude_HEADERS = D4ConstraintEvaluator.h
 
-# if !BISON3
-# libd4_ce_parser_la_SOURCES += FlexLexer.h
-# endif 
+# This line forces make to build the grammar files first, which is
+# important because some of the cc files include the parser headers.
+BUILT_SOURCES = lex.d4_ce.cc d4_ce_parser.tab.hh d4_ce_parser.tab.cc \
+	stack.hh location.hh position.hh
 
-libd4_ce_parser_la_CXXFLAGS=$(AM_CPPFLAGS)
+libd4_ce_parser_la_SOURCES = lex.d4_ce.cc d4_ce_parser.tab.cc	\
+	d4_ce_parser.tab.hh stack.hh location.hh position.hh \
+	D4ConstraintEvaluator.cc  D4ConstraintEvaluator.h D4CEScanner.h   
 
-# Used by both the "have bison 3+'" and "don't have ..." cases
-GEN_GRAM_SRCS=gen_grammar_sources
+libd4_ce_parser_la_CXXFLAGS=$(AM_CPPFLAGS)
 
-EXTRA_DIST = d4_ce_parser.yy d4_ce_scanner.ll d4_function_parser.yy d4_function_scanner.ll
-EXTRA_DIST += $(GEN_GRAM_SRCS)
+EXTRA_DIST = d4_ce_parser.yy d4_ce_scanner.ll
 
 DISTCLEANFILES = 
 
 clean-local:
-	-rm location.hh position.hh stack.hh d4_ce_parser.tab.cc	\
-d4_ce_parser.tab.hh lex.d4_ce.cc d4_function_parser.tab.cc		\
-d4_function_parser.tab.hh lex.d4_function.cc FlexLexer.h
-
-# if BISON3
-# If we have bison3+, use it. Otherwise, use files from git.
-
-lex.d4_ce.cc: d4_ce_scanner.ll d4_ce_parser.tab.cc d4_ce_parser.tab.hh
-	$(LEX) $(LFLAGS) $<
-
-d4_ce_parser.tab.hh d4_ce_parser.tab.cc stack.hh location.hh position.hh: d4_ce_parser.yy
-	$(YACC) $(YFLAGS) $<
-
-lex.d4_function.cc: d4_function_scanner.ll d4_function_parser.tab.cc d4_function_parser.tab.hh
-	$(LEX) $(LFLAGS) $<
+	-rm d4_ce_parser.tab.cc	d4_ce_parser.tab.hh lex.d4_ce.cc stack.hh \
+		location.hh position.hh
 
-d4_function_parser.tab.hh d4_function_parser.tab.cc: d4_function_parser.yy
+%.tab.cc %.tab.hh: %.yy
 	$(YACC) $(YFLAGS) $<
 
-# These rules keep the 'tmp' files up-to-date w/o us having to remember
-# to rule a special target when the grammars change. Including the '.hh'
-# in the rule below is a work-around for the 'FlexLexer.h' which is _not_
-# generated and breaks this scheme otherwise. We could list each file
-# by name, each one prefixed with $(GEN_GRA...). jhrg 3/31/15
-# all-local: $(GEN_GRAM_SRCS)/*.cc.tmp $(GEN_GRAM_SRCS)/*.hh.tmp
-
-# $(GEN_GRAM_SRCS)/%.cc.tmp : %.cc
-# 	cp $< $@
-
-# $(GEN_GRAM_SRCS)/%.hh.tmp: %.hh
-# 	cp $< $@
+#d4_ce_parser.tab.cc d4_ce_parser.tab.hh stack.hh location.hh position.hh: d4_ce_parser.yy
+#	$(YACC) $(YFLAGS) $<
 
-# $(GEN_GRAM_SRCS)/%.h.tmp: %.h
-# 	cp $< $@
+# For now there are two min versions of flex's FlexLexer.h; one that
+# defines the LexerInput() method returning int and one returning size_t.
+# Including the gnerated lex.*.cc code causes a compilation error when
+# the version on the packaging machine differs from the version on the
+# building machine. For now I just remove the generated file. However, 
+# if a fix can be found, then we can remove the flex requirement from
+# a simple (tar.gz) source build. jhrg 7.9.15
+dist-hook:
+	rm $(distdir)/lex.d4_ce.cc
 
-# else
-
-# # The brute force way to get the C++ grammar sources for hosts
-# # w/o bison 3
-
-# % :: $(GEN_GRAM_SRCS)/%.tmp
-# 	cp $< $@
+lex.d4_ce.cc: d4_ce_scanner.ll d4_ce_parser.tab.cc d4_ce_parser.tab.hh
+	$(LEX) $(LFLAGS) $<
 
-# FlexLexer.h: $(GEN_GRAM_SRCS)/FlexLexer.h.tmp
-# 	cp $< $@
-# endif
diff --git a/d4_ce/Makefile.in b/d4_ce/Makefile.in
index 2074af8..715926d 100644
--- a/d4_ce/Makefile.in
+++ b/d4_ce/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,27 +14,53 @@
 
 @SET_MAKE@
 
-# Tests
-
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -56,10 +81,11 @@ host_triplet = @host@
 @COMPILER_IS_GCC_TRUE at am__append_1 = -Wall -W -Wcast-align
 @BUILD_DEVELOPER_TRUE at am__append_2 = $(CXXFLAGS_DEBUG)
 subdir = d4_ce
-DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/conf/depcomp
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/conf/depcomp $(pkginclude_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -80,8 +106,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -112,40 +138,70 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libd4_ce_parser_la_LIBADD =
-am_libd4_ce_parser_la_OBJECTS =  \
-	libd4_ce_parser_la-D4ConstraintEvaluator.lo \
-	libd4_ce_parser_la-D4FunctionEvaluator.lo \
+am_libd4_ce_parser_la_OBJECTS = libd4_ce_parser_la-lex.d4_ce.lo \
 	libd4_ce_parser_la-d4_ce_parser.tab.lo \
-	libd4_ce_parser_la-lex.d4_ce.lo \
-	libd4_ce_parser_la-d4_function_parser.tab.lo \
-	libd4_ce_parser_la-lex.d4_function.lo
+	libd4_ce_parser_la-D4ConstraintEvaluator.lo
 libd4_ce_parser_la_OBJECTS = $(am_libd4_ce_parser_la_OBJECTS)
-libd4_ce_parser_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libd4_ce_parser_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/conf/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(libd4_ce_parser_la_SOURCES)
 DIST_SOURCES = $(libd4_ce_parser_la_SOURCES)
 am__can_run_installinfo = \
@@ -182,6 +238,23 @@ am__uninstall_files_from_dir = { \
   }
 am__installdirs = "$(DESTDIR)$(pkgincludedir)"
 HEADERS = $(pkginclude_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -190,6 +263,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -301,6 +375,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -418,6 +493,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -626,9 +702,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -638,6 +716,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -758,41 +837,19 @@ AM_CXXFLAGS = $(am__append_1) $(am__append_2)
 CXXFLAGS_DEBUG = -g3 -O0 -Wall -W -Wcast-align
 TEST_COV_FLAGS = -ftest-coverage -fprofile-arcs
 noinst_LTLIBRARIES = libd4_ce_parser.la
-pkginclude_HEADERS = D4ConstraintEvaluator.h D4FunctionEvaluator.h
-BUILT_SOURCES = lex.d4_ce.cc lex.d4_function.cc
-# BUILT_SOURCES = d4_ce_parser.hh stack.hh location.hh position.hh d4_function_parser.hh
-libd4_ce_parser_la_SOURCES = D4ConstraintEvaluator.cc \
-	D4ConstraintEvaluator.h D4CEScanner.h D4FunctionEvaluator.cc	\
-	D4FunctionEvaluator.h D4FunctionScanner.h d4_ce_parser.tab.cc	\
-	d4_ce_parser.tab.hh lex.d4_ce.cc d4_function_parser.tab.cc	\
-	d4_function_parser.tab.hh lex.d4_function.cc location.hh	\
-	position.hh stack.hh
-
-
-# d4_ce_parser.yy d4_function_parser.yy d4_ce_scanner.ll d4_function_scanner.ll
-
-# Kludge: If we are not building the scanner/parser from the 
-# grammar sources, make sure to use the scanner class that
-# matches the generated code. This addresses an issue where
-# different versions of flex use 'int' or 'size_t' for some 
-# arguments in the scanner's protected methods. This is not
-# automatically updated to match changes in the gnerated files.
-# jhrg 3/31/15
-#
-# Goog intent behind this idea, but in practice it was not working to
-# build the DAP4 parsers this way. Given more time, it might be
-# something that will work, but for the next release (early April
-# 2015) bison 3.x is going to be a requirement. jhrg 4/5/15
-
-# if !BISON3
-# libd4_ce_parser_la_SOURCES += FlexLexer.h
-# endif 
-libd4_ce_parser_la_CXXFLAGS = $(AM_CPPFLAGS)
+pkginclude_HEADERS = D4ConstraintEvaluator.h
+
+# This line forces make to build the grammar files first, which is
+# important because some of the cc files include the parser headers.
+BUILT_SOURCES = lex.d4_ce.cc d4_ce_parser.tab.hh d4_ce_parser.tab.cc \
+	stack.hh location.hh position.hh
+
+libd4_ce_parser_la_SOURCES = lex.d4_ce.cc d4_ce_parser.tab.cc	\
+	d4_ce_parser.tab.hh stack.hh location.hh position.hh \
+	D4ConstraintEvaluator.cc  D4ConstraintEvaluator.h D4CEScanner.h   
 
-# Used by both the "have bison 3+'" and "don't have ..." cases
-GEN_GRAM_SRCS = gen_grammar_sources
-EXTRA_DIST = d4_ce_parser.yy d4_ce_scanner.ll d4_function_parser.yy \
-	d4_function_scanner.ll $(GEN_GRAM_SRCS)
+libd4_ce_parser_la_CXXFLAGS = $(AM_CPPFLAGS)
+EXTRA_DIST = d4_ce_parser.yy d4_ce_scanner.ll
 DISTCLEANFILES = 
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -840,8 +897,9 @@ clean-noinstLTLIBRARIES:
 	  echo rm -f $${locs}; \
 	  rm -f $${locs}; \
 	}
+
 libd4_ce_parser.la: $(libd4_ce_parser_la_OBJECTS) $(libd4_ce_parser_la_DEPENDENCIES) $(EXTRA_libd4_ce_parser_la_DEPENDENCIES) 
-	$(libd4_ce_parser_la_LINK)  $(libd4_ce_parser_la_OBJECTS) $(libd4_ce_parser_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(libd4_ce_parser_la_LINK)  $(libd4_ce_parser_la_OBJECTS) $(libd4_ce_parser_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -850,74 +908,50 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Plo at am__quote@
 
 .cc.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
-
-libd4_ce_parser_la-D4ConstraintEvaluator.lo: D4ConstraintEvaluator.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-D4ConstraintEvaluator.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Tpo -c -o libd4_ce_parser_la-D4ConstraintEvaluator.lo `test -f 'D4ConstraintEvaluator.cc' || echo '$(srcdir)/'`D4ConstraintEvaluator.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Tpo $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4ConstraintEvaluator.cc' object='libd4_ce_parser_la-D4ConstraintEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-D4ConstraintEvaluator.lo `test -f 'D4ConstraintEvaluator.cc' || echo '$(srcdir)/'`D4ConstraintEvaluator.cc
-
-libd4_ce_parser_la-D4FunctionEvaluator.lo: D4FunctionEvaluator.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-D4FunctionEvaluator.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Tpo -c -o libd4_ce_parser_la-D4FunctionEvaluator.lo `test -f 'D4FunctionEvaluator.cc' || echo '$(srcdir)/'`D4FunctionEvaluator.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Tpo $(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4FunctionEvaluator.cc' object='libd4_ce_parser_la-D4FunctionEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-D4FunctionEvaluator.lo `test -f 'D4FunctionEvaluator.cc' || echo '$(srcdir)/'`D4FunctionEvaluator.cc
-
-libd4_ce_parser_la-d4_ce_parser.tab.lo: d4_ce_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-d4_ce_parser.tab.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Tpo -c -o libd4_ce_parser_la-d4_ce_parser.tab.lo `test -f 'd4_ce_parser.tab.cc' || echo '$(srcdir)/'`d4_ce_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Tpo $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='d4_ce_parser.tab.cc' object='libd4_ce_parser_la-d4_ce_parser.tab.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-d4_ce_parser.tab.lo `test -f 'd4_ce_parser.tab.cc' || echo '$(srcdir)/'`d4_ce_parser.tab.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 libd4_ce_parser_la-lex.d4_ce.lo: lex.d4_ce.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-lex.d4_ce.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Tpo -c -o libd4_ce_parser_la-lex.d4_ce.lo `test -f 'lex.d4_ce.cc' || echo '$(srcdir)/'`lex.d4_ce.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Tpo $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.d4_ce.cc' object='libd4_ce_parser_la-lex.d4_ce.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-lex.d4_ce.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Tpo -c -o libd4_ce_parser_la-lex.d4_ce.lo `test -f 'lex.d4_ce.cc' || echo '$(srcdir)/'`lex.d4_ce.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Tpo $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='lex.d4_ce.cc' object='libd4_ce_parser_la-lex.d4_ce.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-lex.d4_ce.lo `test -f 'lex.d4_ce.cc' || echo '$(srcdir)/'`lex.d4_ce.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-lex.d4_ce.lo `test -f 'lex.d4_ce.cc' || echo '$(srcdir)/'`lex.d4_ce.cc
 
-libd4_ce_parser_la-d4_function_parser.tab.lo: d4_function_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-d4_function_parser.tab.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Tpo -c -o libd4_ce_parser_la-d4_function_parser.tab.lo `test -f 'd4_function_parser.tab.cc' || echo '$(srcdir)/'`d4_function_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Tpo $(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='d4_function_parser.tab.cc' object='libd4_ce_parser_la-d4_function_parser.tab.lo' libtool=yes @AMDEPBACKSLASH@
+libd4_ce_parser_la-d4_ce_parser.tab.lo: d4_ce_parser.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-d4_ce_parser.tab.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Tpo -c -o libd4_ce_parser_la-d4_ce_parser.tab.lo `test -f 'd4_ce_parser.tab.cc' || echo '$(srcdir)/'`d4_ce_parser.tab.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Tpo $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='d4_ce_parser.tab.cc' object='libd4_ce_parser_la-d4_ce_parser.tab.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-d4_function_parser.tab.lo `test -f 'd4_function_parser.tab.cc' || echo '$(srcdir)/'`d4_function_parser.tab.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-d4_ce_parser.tab.lo `test -f 'd4_ce_parser.tab.cc' || echo '$(srcdir)/'`d4_ce_parser.tab.cc
 
-libd4_ce_parser_la-lex.d4_function.lo: lex.d4_function.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-lex.d4_function.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Tpo -c -o libd4_ce_parser_la-lex.d4_function.lo `test -f 'lex.d4_function.cc' || echo '$(srcdir)/'`lex.d4_function.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Tpo $(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.d4_function.cc' object='libd4_ce_parser_la-lex.d4_function.lo' libtool=yes @AMDEPBACKSLASH@
+libd4_ce_parser_la-D4ConstraintEvaluator.lo: D4ConstraintEvaluator.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-D4ConstraintEvaluator.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Tpo -c -o libd4_ce_parser_la-D4ConstraintEvaluator.lo `test -f 'D4ConstraintEvaluator.cc' || echo '$(srcdir)/'`D4ConstraintEvaluator.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Tpo $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4ConstraintEvaluator.cc' object='libd4_ce_parser_la-D4ConstraintEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-lex.d4_function.lo `test -f 'lex.d4_function.cc' || echo '$(srcdir)/'`lex.d4_function.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-D4ConstraintEvaluator.lo `test -f 'D4ConstraintEvaluator.cc' || echo '$(srcdir)/'`D4ConstraintEvaluator.cc
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -946,26 +980,15 @@ uninstall-pkgincludeHEADERS:
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -977,15 +1000,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -994,9 +1013,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -1042,6 +1062,9 @@ distdir: $(DISTFILES)
 	    || exit 1; \
 	  fi; \
 	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
 check-am: all-am
 check: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) check-am
@@ -1156,69 +1179,50 @@ uninstall-am: uninstall-pkgincludeHEADERS
 
 .MAKE: all check install install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-local clean-noinstLTLIBRARIES cscopelist \
-	ctags distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-pkgincludeHEADERS install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-noinstLTLIBRARIES \
+	cscopelist-am ctags ctags-am dist-hook distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkgincludeHEADERS \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am \
 	uninstall-pkgincludeHEADERS
 
 
-clean-local:
-	-rm location.hh position.hh stack.hh d4_ce_parser.tab.cc	\
-d4_ce_parser.tab.hh lex.d4_ce.cc d4_function_parser.tab.cc		\
-d4_function_parser.tab.hh lex.d4_function.cc FlexLexer.h
-
-# if BISON3
-# If we have bison3+, use it. Otherwise, use files from git.
-
-lex.d4_ce.cc: d4_ce_scanner.ll d4_ce_parser.tab.cc d4_ce_parser.tab.hh
-	$(LEX) $(LFLAGS) $<
-
-d4_ce_parser.tab.hh d4_ce_parser.tab.cc stack.hh location.hh position.hh: d4_ce_parser.yy
-	$(YACC) $(YFLAGS) $<
+# We need this to make sure that parallel jobs don't fail for 
+# lack of stack.hh, ... because those are built by bison in one
+# shot.
+.NOTPARALLEL:
 
-lex.d4_function.cc: d4_function_scanner.ll d4_function_parser.tab.cc d4_function_parser.tab.hh
-	$(LEX) $(LFLAGS) $<
+clean-local:
+	-rm d4_ce_parser.tab.cc	d4_ce_parser.tab.hh lex.d4_ce.cc stack.hh \
+		location.hh position.hh
 
-d4_function_parser.tab.hh d4_function_parser.tab.cc: d4_function_parser.yy
+%.tab.cc %.tab.hh: %.yy
 	$(YACC) $(YFLAGS) $<
 
-# These rules keep the 'tmp' files up-to-date w/o us having to remember
-# to rule a special target when the grammars change. Including the '.hh'
-# in the rule below is a work-around for the 'FlexLexer.h' which is _not_
-# generated and breaks this scheme otherwise. We could list each file
-# by name, each one prefixed with $(GEN_GRA...). jhrg 3/31/15
-# all-local: $(GEN_GRAM_SRCS)/*.cc.tmp $(GEN_GRAM_SRCS)/*.hh.tmp
-
-# $(GEN_GRAM_SRCS)/%.cc.tmp : %.cc
-# 	cp $< $@
-
-# $(GEN_GRAM_SRCS)/%.hh.tmp: %.hh
-# 	cp $< $@
+#d4_ce_parser.tab.cc d4_ce_parser.tab.hh stack.hh location.hh position.hh: d4_ce_parser.yy
+#	$(YACC) $(YFLAGS) $<
 
-# $(GEN_GRAM_SRCS)/%.h.tmp: %.h
-# 	cp $< $@
+# For now there are two min versions of flex's FlexLexer.h; one that
+# defines the LexerInput() method returning int and one returning size_t.
+# Including the gnerated lex.*.cc code causes a compilation error when
+# the version on the packaging machine differs from the version on the
+# building machine. For now I just remove the generated file. However, 
+# if a fix can be found, then we can remove the flex requirement from
+# a simple (tar.gz) source build. jhrg 7.9.15
+dist-hook:
+	rm $(distdir)/lex.d4_ce.cc
 
-# else
-
-# # The brute force way to get the C++ grammar sources for hosts
-# # w/o bison 3
-
-# % :: $(GEN_GRAM_SRCS)/%.tmp
-# 	cp $< $@
-
-# FlexLexer.h: $(GEN_GRAM_SRCS)/FlexLexer.h.tmp
-# 	cp $< $@
-# endif
+lex.d4_ce.cc: d4_ce_scanner.ll d4_ce_parser.tab.cc d4_ce_parser.tab.hh
+	$(LEX) $(LFLAGS) $<
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/d4_ce/gen_grammar_sources/FlexLexer.h.tmp b/d4_ce/gen_grammar_sources/FlexLexer.h.tmp
deleted file mode 100644
index a584303..0000000
--- a/d4_ce/gen_grammar_sources/FlexLexer.h.tmp
+++ /dev/null
@@ -1,206 +0,0 @@
-// -*-C++-*-
-// FlexLexer.h -- define interfaces for lexical analyzer classes generated
-// by flex
-
-// Copyright (c) 1993 The Regents of the University of California.
-// All rights reserved.
-//
-// This code is derived from software contributed to Berkeley by
-// Kent Williams and Tom Epperly.
-//
-//  Redistribution and use in source and binary forms, with or without
-//  modification, are permitted provided that the following conditions
-//  are met:
-
-//  1. Redistributions of source code must retain the above copyright
-//  notice, this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright
-//  notice, this list of conditions and the following disclaimer in the
-//  documentation and/or other materials provided with the distribution.
-
-//  Neither the name of the University nor the names of its contributors
-//  may be used to endorse or promote products derived from this software
-//  without specific prior written permission.
-
-//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-//  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-//  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-//  PURPOSE.
-
-// This file defines FlexLexer, an abstract class which specifies the
-// external interface provided to flex C++ lexer objects, and yyFlexLexer,
-// which defines a particular lexer class.
-//
-// If you want to create multiple lexer classes, you use the -P flag
-// to rename each yyFlexLexer to some other xxFlexLexer.  You then
-// include <FlexLexer.h> in your other sources once per lexer class:
-//
-//	#undef yyFlexLexer
-//	#define yyFlexLexer xxFlexLexer
-//	#include <FlexLexer.h>
-//
-//	#undef yyFlexLexer
-//	#define yyFlexLexer zzFlexLexer
-//	#include <FlexLexer.h>
-//	...
-
-#ifndef __FLEX_LEXER_H
-// Never included before - need to define base class.
-#define __FLEX_LEXER_H
-
-#include <iostream>
-#  ifndef FLEX_STD
-#    define FLEX_STD std::
-#  endif
-
-extern "C++" {
-
-struct yy_buffer_state;
-typedef int yy_state_type;
-
-class FlexLexer {
-public:
-	virtual ~FlexLexer()	{ }
-
-	const char* YYText() const	{ return yytext; }
-	size_t YYLeng()	const	{ return yyleng; }
-
-	virtual void
-		yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0;
-	virtual struct yy_buffer_state*
-		yy_create_buffer( FLEX_STD istream* s, int size ) = 0;
-	virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0;
-	virtual void yyrestart( FLEX_STD istream* s ) = 0;
-
-	virtual int yylex() = 0;
-
-	// Call yylex with new input/output sources.
-	int yylex( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 )
-		{
-		switch_streams( new_in, new_out );
-		return yylex();
-		}
-
-	// Switch to new input/output streams.  A nil stream pointer
-	// indicates "keep the current one".
-	virtual void switch_streams( FLEX_STD istream* new_in = 0,
-					FLEX_STD ostream* new_out = 0 ) = 0;
-
-	int lineno() const		{ return yylineno; }
-
-	int debug() const		{ return yy_flex_debug; }
-	void set_debug( int flag )	{ yy_flex_debug = flag; }
-
-protected:
-	char* yytext;
-	size_t yyleng;
-	int yylineno;		// only maintained if you use %option yylineno
-	int yy_flex_debug;	// only has effect with -d or "%option debug"
-};
-
-}
-#endif // FLEXLEXER_H
-
-#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
-// Either this is the first time through (yyFlexLexerOnce not defined),
-// or this is a repeated include to define a different flavor of
-// yyFlexLexer, as discussed in the flex manual.
-#define yyFlexLexerOnce
-
-extern "C++" {
-
-class yyFlexLexer : public FlexLexer {
-public:
-	// arg_yyin and arg_yyout default to the cin and cout, but we
-	// only make that assignment when initializing in yylex().
-	yyFlexLexer( FLEX_STD istream* arg_yyin = 0, FLEX_STD ostream* arg_yyout = 0 );
-
-	virtual ~yyFlexLexer();
-
-	void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
-	struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int size );
-	void yy_delete_buffer( struct yy_buffer_state* b );
-	void yyrestart( FLEX_STD istream* s );
-
-	void yypush_buffer_state( struct yy_buffer_state* new_buffer );
-	void yypop_buffer_state();
-
-	virtual int yylex();
-	virtual void switch_streams( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 );
-	virtual int yywrap();
-
-protected:
-	virtual size_t LexerInput( char* buf, size_t max_size );
-	virtual void LexerOutput( const char* buf, size_t size );
-	virtual void LexerError( const char* msg );
-
-	void yyunput( int c, char* buf_ptr );
-	int yyinput();
-
-	void yy_load_buffer_state();
-	void yy_init_buffer( struct yy_buffer_state* b, FLEX_STD istream* s );
-	void yy_flush_buffer( struct yy_buffer_state* b );
-
-	int yy_start_stack_ptr;
-	int yy_start_stack_depth;
-	int* yy_start_stack;
-
-	void yy_push_state( int new_state );
-	void yy_pop_state();
-	int yy_top_state();
-
-	yy_state_type yy_get_previous_state();
-	yy_state_type yy_try_NUL_trans( yy_state_type current_state );
-	int yy_get_next_buffer();
-
-	FLEX_STD istream* yyin;	// input source for default LexerInput
-	FLEX_STD ostream* yyout;	// output sink for default LexerOutput
-
-	// yy_hold_char holds the character lost when yytext is formed.
-	char yy_hold_char;
-
-	// Number of characters read into yy_ch_buf.
-	size_t yy_n_chars;
-
-	// Points to current character in buffer.
-	char* yy_c_buf_p;
-
-	int yy_init;		// whether we need to initialize
-	int yy_start;		// start state number
-
-	// Flag which is used to allow yywrap()'s to do buffer switches
-	// instead of setting up a fresh yyin.  A bit of a hack ...
-	int yy_did_buffer_switch_on_eof;
-
-
-	size_t yy_buffer_stack_top; /**< index of top of stack. */
-	size_t yy_buffer_stack_max; /**< capacity of stack. */
-	struct yy_buffer_state ** yy_buffer_stack; /**< Stack as an array. */
-	void yyensure_buffer_stack(void);
-
-	// The following are not always needed, but may be depending
-	// on use of certain flex features (like REJECT or yymore()).
-
-	yy_state_type yy_last_accepting_state;
-	char* yy_last_accepting_cpos;
-
-	yy_state_type* yy_state_buf;
-	yy_state_type* yy_state_ptr;
-
-	char* yy_full_match;
-	int* yy_full_state;
-	int yy_full_lp;
-
-	int yy_lp;
-	int yy_looking_for_trail_begin;
-
-	int yy_more_flag;
-	int yy_more_len;
-	int yy_more_offset;
-	int yy_prev_more_offset;
-};
-
-}
-
-#endif // yyFlexLexer || ! yyFlexLexerOnce
-
diff --git a/d4_ce/gen_grammar_sources/d4_ce_parser.tab.cc.tmp b/d4_ce/gen_grammar_sources/d4_ce_parser.tab.cc.tmp
deleted file mode 100644
index 5649cb8..0000000
--- a/d4_ce/gen_grammar_sources/d4_ce_parser.tab.cc.tmp
+++ /dev/null
@@ -1,1861 +0,0 @@
-// A Bison parser, made by GNU Bison 3.0.
-
-// Skeleton implementation for Bison LALR(1) parsers in C++
-
-// Copyright (C) 2002-2013 Free Software Foundation, Inc.
-
-// 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, you may create a larger work that contains
-// part or all of the Bison parser skeleton and distribute that work
-// under terms of your choice, so long as that work isn't itself a
-// parser generator using the skeleton or a modified version thereof
-// as a parser skeleton.  Alternatively, if you modify or redistribute
-// the parser skeleton itself, you may (at your option) remove this
-// special exception, which will cause the skeleton and the resulting
-// Bison output files to be licensed under the GNU General Public
-// License without this special exception.
-
-// This special exception was added by the Free Software Foundation in
-// version 2.2 of Bison.
-
-
-// First part of user declarations.
-
-#line 37 "d4_ce_parser.tab.cc" // lalr1.cc:398
-
-# ifndef YY_NULL
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
-#  else
-#   define YY_NULL 0
-#  endif
-# endif
-
-#include "d4_ce_parser.tab.hh"
-
-// User implementation prologue.
-
-#line 51 "d4_ce_parser.tab.cc" // lalr1.cc:406
-// Unqualified %code blocks.
-#line 74 "d4_ce_parser.yy" // lalr1.cc:407
-
-   #include <iostream>
-   #include <cstdlib>
-   #include <fstream>
-   
-   #include "BaseType.h"
-   #include "DMR.h"
-   #include "D4Group.h"
-
-   /* include for all driver functions */
-   #include "D4ConstraintEvaluator.h"
-
-   /* this is silly, but I can't figure out a way around */
-   static int yylex(libdap::D4CEParser::semantic_type *yylval,
-                    libdap::location *loc,
-                    libdap::D4CEScanner  &scanner,
-                    libdap::D4ConstraintEvaluator   &driver);
-
-
-#line 73 "d4_ce_parser.tab.cc" // lalr1.cc:407
-
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-# ifndef YYLLOC_DEFAULT
-#  define YYLLOC_DEFAULT(Current, Rhs, N)                               \
-    do                                                                  \
-      if (N)                                                            \
-        {                                                               \
-          (Current).begin  = YYRHSLOC (Rhs, 1).begin;                   \
-          (Current).end    = YYRHSLOC (Rhs, N).end;                     \
-        }                                                               \
-      else                                                              \
-        {                                                               \
-          (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
-        }                                                               \
-    while (/*CONSTCOND*/ false)
-# endif
-
-
-// Suppress unused-variable warnings by "using" E.
-#define YYUSE(E) ((void) (E))
-
-// Enable debugging if requested.
-#if YYDEBUG
-
-// A pseudo ostream that takes yydebug_ into account.
-# define YYCDEBUG if (yydebug_) (*yycdebug_)
-
-# define YY_SYMBOL_PRINT(Title, Symbol)         \
-  do {                                          \
-    if (yydebug_)                               \
-    {                                           \
-      *yycdebug_ << Title << ' ';               \
-      yy_print_ (*yycdebug_, Symbol);           \
-      *yycdebug_ << std::endl;                  \
-    }                                           \
-  } while (false)
-
-# define YY_REDUCE_PRINT(Rule)          \
-  do {                                  \
-    if (yydebug_)                       \
-      yy_reduce_print_ (Rule);          \
-  } while (false)
-
-# define YY_STACK_PRINT()               \
-  do {                                  \
-    if (yydebug_)                       \
-      yystack_print_ ();                \
-  } while (false)
-
-#else // !YYDEBUG
-
-# define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE(Symbol)
-# define YY_REDUCE_PRINT(Rule)           static_cast<void>(0)
-# define YY_STACK_PRINT()                static_cast<void>(0)
-
-#endif // !YYDEBUG
-
-#define yyerrok         (yyerrstatus_ = 0)
-#define yyclearin       (yyempty = true)
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-#define YYRECOVERING()  (!!yyerrstatus_)
-
-#line 35 "d4_ce_parser.yy" // lalr1.cc:473
-namespace libdap {
-#line 159 "d4_ce_parser.tab.cc" // lalr1.cc:473
-
-  /* Return YYSTR after stripping away unnecessary quotes and
-     backslashes, so that it's suitable for yyerror.  The heuristic is
-     that double-quoting is unnecessary unless the string contains an
-     apostrophe, a comma, or backslash (other than backslash-backslash).
-     YYSTR is taken from yytname.  */
-  std::string
-  D4CEParser::yytnamerr_ (const char *yystr)
-  {
-    if (*yystr == '"')
-      {
-        std::string yyr = "";
-        char const *yyp = yystr;
-
-        for (;;)
-          switch (*++yyp)
-            {
-            case '\'':
-            case ',':
-              goto do_not_strip_quotes;
-
-            case '\\':
-              if (*++yyp != '\\')
-                goto do_not_strip_quotes;
-              // Fall through.
-            default:
-              yyr += *yyp;
-              break;
-
-            case '"':
-              return yyr;
-            }
-      do_not_strip_quotes: ;
-      }
-
-    return yystr;
-  }
-
-
-  /// Build a parser object.
-  D4CEParser::D4CEParser (D4CEScanner  &scanner_yyarg, D4ConstraintEvaluator  &driver_yyarg)
-    :
-#if YYDEBUG
-      yydebug_ (false),
-      yycdebug_ (&std::cerr),
-#endif
-      scanner (scanner_yyarg),
-      driver (driver_yyarg)
-  {}
-
-  D4CEParser::~D4CEParser ()
-  {}
-
-
-  /*---------------.
-  | Symbol types.  |
-  `---------------*/
-
-  inline
-  D4CEParser::syntax_error::syntax_error (const location_type& l, const std::string& m)
-    : std::runtime_error (m)
-    , location (l)
-  {}
-
-  // basic_symbol.
-  template <typename Base>
-  inline
-  D4CEParser::basic_symbol<Base>::basic_symbol ()
-    : value ()
-  {}
-
-  template <typename Base>
-  inline
-  D4CEParser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
-    : Base (other)
-    , value ()
-    , location (other.location)
-  {
-      switch (other.type_get ())
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        value.copy< bool > (other.value);
-        break;
-
-      case 38: // index
-        value.copy< libdap::D4ConstraintEvaluator::index > (other.value);
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        value.copy< std::string > (other.value);
-        break;
-
-      default:
-        break;
-    }
-
-  }
-
-
-  template <typename Base>
-  inline
-  D4CEParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const semantic_type& v, const location_type& l)
-    : Base (t)
-    , value ()
-    , location (l)
-  {
-    (void) v;
-      switch (this->type_get ())
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        value.copy< bool > (v);
-        break;
-
-      case 38: // index
-        value.copy< libdap::D4ConstraintEvaluator::index > (v);
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        value.copy< std::string > (v);
-        break;
-
-      default:
-        break;
-    }
-}
-
-
-  // Implementation of basic_symbol constructor for each type.
-
-  template <typename Base>
-  D4CEParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
-    : Base (t)
-    , value ()
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4CEParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const bool v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4CEParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const libdap::D4ConstraintEvaluator::index v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4CEParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-
-  template <typename Base>
-  inline
-  D4CEParser::basic_symbol<Base>::~basic_symbol ()
-  {
-    // User destructor.
-    symbol_number_type yytype = this->type_get ();
-    switch (yytype)
-    {
-   default:
-      break;
-    }
-
-    // Type destructor.
-    switch (yytype)
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        value.template destroy< bool > ();
-        break;
-
-      case 38: // index
-        value.template destroy< libdap::D4ConstraintEvaluator::index > ();
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        value.template destroy< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-  }
-
-  template <typename Base>
-  inline
-  void
-  D4CEParser::basic_symbol<Base>::move (basic_symbol& s)
-  {
-    super_type::move(s);
-      switch (this->type_get ())
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        value.move< bool > (s.value);
-        break;
-
-      case 38: // index
-        value.move< libdap::D4ConstraintEvaluator::index > (s.value);
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        value.move< std::string > (s.value);
-        break;
-
-      default:
-        break;
-    }
-
-    location = s.location;
-  }
-
-  // by_type.
-  inline
-  D4CEParser::by_type::by_type ()
-     : type (empty)
-  {}
-
-  inline
-  D4CEParser::by_type::by_type (const by_type& other)
-    : type (other.type)
-  {}
-
-  inline
-  D4CEParser::by_type::by_type (token_type t)
-    : type (yytranslate_ (t))
-  {}
-
-  inline
-  void
-  D4CEParser::by_type::move (by_type& that)
-  {
-    type = that.type;
-    that.type = empty;
-  }
-
-  inline
-  int
-  D4CEParser::by_type::type_get () const
-  {
-    return type;
-  }
-  // Implementation of make_symbol for each symbol type.
-  D4CEParser::symbol_type
-  D4CEParser::make_END (const location_type& l)
-  {
-    return symbol_type (token::END, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_WORD (const std::string& v, const location_type& l)
-  {
-    return symbol_type (token::WORD, v, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_STRING (const std::string& v, const location_type& l)
-  {
-    return symbol_type (token::STRING, v, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_SEMICOLON (const location_type& l)
-  {
-    return symbol_type (token::SEMICOLON, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_PIPE (const location_type& l)
-  {
-    return symbol_type (token::PIPE, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_LBRACKET (const location_type& l)
-  {
-    return symbol_type (token::LBRACKET, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_RBRACKET (const location_type& l)
-  {
-    return symbol_type (token::RBRACKET, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_COLON (const location_type& l)
-  {
-    return symbol_type (token::COLON, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_LBRACE (const location_type& l)
-  {
-    return symbol_type (token::LBRACE, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_RBRACE (const location_type& l)
-  {
-    return symbol_type (token::RBRACE, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_COMMA (const location_type& l)
-  {
-    return symbol_type (token::COMMA, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_ND (const location_type& l)
-  {
-    return symbol_type (token::ND, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_ASSIGN (const location_type& l)
-  {
-    return symbol_type (token::ASSIGN, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_LESS (const location_type& l)
-  {
-    return symbol_type (token::LESS, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_GREATER (const location_type& l)
-  {
-    return symbol_type (token::GREATER, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_LESS_EQUAL (const location_type& l)
-  {
-    return symbol_type (token::LESS_EQUAL, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_GREATER_EQUAL (const location_type& l)
-  {
-    return symbol_type (token::GREATER_EQUAL, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_EQUAL (const location_type& l)
-  {
-    return symbol_type (token::EQUAL, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_NOT_EQUAL (const location_type& l)
-  {
-    return symbol_type (token::NOT_EQUAL, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_REGEX_MATCH (const location_type& l)
-  {
-    return symbol_type (token::REGEX_MATCH, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_LESS_BBOX (const location_type& l)
-  {
-    return symbol_type (token::LESS_BBOX, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_GREATER_BBOX (const location_type& l)
-  {
-    return symbol_type (token::GREATER_BBOX, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_MASK (const location_type& l)
-  {
-    return symbol_type (token::MASK, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_GROUP_SEP (const location_type& l)
-  {
-    return symbol_type (token::GROUP_SEP, l);
-
-  }
-
-  D4CEParser::symbol_type
-  D4CEParser::make_PATH_SEP (const location_type& l)
-  {
-    return symbol_type (token::PATH_SEP, l);
-
-  }
-
-
-
-  // by_state.
-  inline
-  D4CEParser::by_state::by_state ()
-    : state (empty)
-  {}
-
-  inline
-  D4CEParser::by_state::by_state (const by_state& other)
-    : state (other.state)
-  {}
-
-  inline
-  void
-  D4CEParser::by_state::move (by_state& that)
-  {
-    state = that.state;
-    that.state = empty;
-  }
-
-  inline
-  D4CEParser::by_state::by_state (state_type s)
-    : state (s)
-  {}
-
-  inline
-  D4CEParser::symbol_number_type
-  D4CEParser::by_state::type_get () const
-  {
-    return state == empty ? 0 : yystos_[state];
-  }
-
-  inline
-  D4CEParser::stack_symbol_type::stack_symbol_type ()
-  {}
-
-
-  inline
-  D4CEParser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
-    : super_type (s, that.location)
-  {
-      switch (that.type_get ())
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        value.move< bool > (that.value);
-        break;
-
-      case 38: // index
-        value.move< libdap::D4ConstraintEvaluator::index > (that.value);
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        value.move< std::string > (that.value);
-        break;
-
-      default:
-        break;
-    }
-
-    // that is emptied.
-    that.type = empty;
-  }
-
-  inline
-  D4CEParser::stack_symbol_type&
-  D4CEParser::stack_symbol_type::operator= (const stack_symbol_type& that)
-  {
-    state = that.state;
-      switch (that.type_get ())
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        value.copy< bool > (that.value);
-        break;
-
-      case 38: // index
-        value.copy< libdap::D4ConstraintEvaluator::index > (that.value);
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        value.copy< std::string > (that.value);
-        break;
-
-      default:
-        break;
-    }
-
-    location = that.location;
-    return *this;
-  }
-
-
-  template <typename Base>
-  inline
-  void
-  D4CEParser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
-  {
-    if (yymsg)
-      YY_SYMBOL_PRINT (yymsg, yysym);
-  }
-
-#if YYDEBUG
-  template <typename Base>
-  void
-  D4CEParser::yy_print_ (std::ostream& yyo,
-                                     const basic_symbol<Base>& yysym) const
-  {
-    std::ostream& yyoutput = yyo;
-    YYUSE (yyoutput);
-    symbol_number_type yytype = yysym.type_get ();
-    yyo << (yytype < yyntokens_ ? "token" : "nterm")
-        << ' ' << yytname_[yytype] << " ("
-        << yysym.location << ": ";
-    YYUSE (yytype);
-    yyo << ')';
-  }
-#endif
-
-  inline
-  void
-  D4CEParser::yypush_ (const char* m, state_type s, symbol_type& sym)
-  {
-    stack_symbol_type t (s, sym);
-    yypush_ (m, t);
-  }
-
-  inline
-  void
-  D4CEParser::yypush_ (const char* m, stack_symbol_type& s)
-  {
-    if (m)
-      YY_SYMBOL_PRINT (m, s);
-    yystack_.push (s);
-  }
-
-  inline
-  void
-  D4CEParser::yypop_ (unsigned int n)
-  {
-    yystack_.pop (n);
-  }
-
-#if YYDEBUG
-  std::ostream&
-  D4CEParser::debug_stream () const
-  {
-    return *yycdebug_;
-  }
-
-  void
-  D4CEParser::set_debug_stream (std::ostream& o)
-  {
-    yycdebug_ = &o;
-  }
-
-
-  D4CEParser::debug_level_type
-  D4CEParser::debug_level () const
-  {
-    return yydebug_;
-  }
-
-  void
-  D4CEParser::set_debug_level (debug_level_type l)
-  {
-    yydebug_ = l;
-  }
-#endif // YYDEBUG
-
-  inline D4CEParser::state_type
-  D4CEParser::yy_lr_goto_state_ (state_type yystate, int yylhs)
-  {
-    int yyr = yypgoto_[yylhs - yyntokens_] + yystate;
-    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
-      return yytable_[yyr];
-    else
-      return yydefgoto_[yylhs - yyntokens_];
-  }
-
-  inline bool
-  D4CEParser::yy_pact_value_is_default_ (int yyvalue)
-  {
-    return yyvalue == yypact_ninf_;
-  }
-
-  inline bool
-  D4CEParser::yy_table_value_is_error_ (int yyvalue)
-  {
-    return yyvalue == yytable_ninf_;
-  }
-
-  int
-  D4CEParser::parse ()
-  {
-    /// Whether yyla contains a lookahead.
-    bool yyempty = true;
-
-    // State.
-    int yyn;
-    int yylen = 0;
-
-    // Error handling.
-    int yynerrs_ = 0;
-    int yyerrstatus_ = 0;
-
-    /// The lookahead symbol.
-    symbol_type yyla;
-
-    /// The locations where the error started and ended.
-    stack_symbol_type yyerror_range[3];
-
-    /// $$ and @$.
-    stack_symbol_type yylhs;
-
-    /// The return value of parse ().
-    int yyresult;
-
-    // FIXME: This shoud be completely indented.  It is not yet to
-    // avoid gratuitous conflicts when merging into the master branch.
-    try
-      {
-    YYCDEBUG << "Starting parse" << std::endl;
-
-
-    // User initialization code.
-    #line 66 "d4_ce_parser.yy" // lalr1.cc:730
-{
-    // Initialize the initial location. This is printed when the parser builds
-    // its own error messages - when the parse fails as opposed to when the 
-    // CE names a missing variables, ...
-
-    yyla.location.initialize (driver.expression());
-}
-
-#line 896 "d4_ce_parser.tab.cc" // lalr1.cc:730
-
-    /* Initialize the stack.  The initial state will be set in
-       yynewstate, since the latter expects the semantical and the
-       location values to have been already stored, initialize these
-       stacks with a primary value.  */
-    yystack_.clear ();
-    yypush_ (YY_NULL, 0, yyla);
-
-    // A new symbol was pushed on the stack.
-  yynewstate:
-    YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
-
-    // Accept?
-    if (yystack_[0].state == yyfinal_)
-      goto yyacceptlab;
-
-    goto yybackup;
-
-    // Backup.
-  yybackup:
-
-    // Try to take a decision without lookahead.
-    yyn = yypact_[yystack_[0].state];
-    if (yy_pact_value_is_default_ (yyn))
-      goto yydefault;
-
-    // Read a lookahead token.
-    if (yyempty)
-      {
-        YYCDEBUG << "Reading a token: ";
-        try
-          {
-            yyla.type = yytranslate_ (yylex (&yyla.value, &yyla.location, scanner, driver));
-          }
-        catch (const syntax_error& yyexc)
-          {
-            error (yyexc);
-            goto yyerrlab1;
-          }
-        yyempty = false;
-      }
-    YY_SYMBOL_PRINT ("Next token is", yyla);
-
-    /* If the proper action on seeing token YYLA.TYPE is to reduce or
-       to detect an error, take that action.  */
-    yyn += yyla.type_get ();
-    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
-      goto yydefault;
-
-    // Reduce or error.
-    yyn = yytable_[yyn];
-    if (yyn <= 0)
-      {
-        if (yy_table_value_is_error_ (yyn))
-          goto yyerrlab;
-        yyn = -yyn;
-        goto yyreduce;
-      }
-
-    // Discard the token being shifted.
-    yyempty = true;
-
-    // Count tokens shifted since error; after three, turn off error status.
-    if (yyerrstatus_)
-      --yyerrstatus_;
-
-    // Shift the lookahead token.
-    yypush_ ("Shifting", yyn, yyla);
-    goto yynewstate;
-
-  /*-----------------------------------------------------------.
-  | yydefault -- do the default action for the current state.  |
-  `-----------------------------------------------------------*/
-  yydefault:
-    yyn = yydefact_[yystack_[0].state];
-    if (yyn == 0)
-      goto yyerrlab;
-    goto yyreduce;
-
-  /*-----------------------------.
-  | yyreduce -- Do a reduction.  |
-  `-----------------------------*/
-  yyreduce:
-    yylen = yyr2_[yyn];
-    yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
-    /* Variants are always initialized to an empty instance of the
-       correct type. The default $$=$1 action is NOT applied when using
-       variants.  */
-      switch (yyr1_[yyn])
-    {
-      case 29: // dimensions
-      case 30: // dimension
-      case 31: // clauses
-      case 32: // clause
-      case 33: // subset
-      case 36: // indexes
-      case 39: // fields
-      case 40: // filter
-      case 41: // predicate
-        yylhs.value.build< bool > ();
-        break;
-
-      case 38: // index
-        yylhs.value.build< libdap::D4ConstraintEvaluator::index > ();
-        break;
-
-      case 3: // "word"
-      case 4: // "string"
-      case 43: // id
-      case 44: // group
-      case 45: // path
-      case 46: // name
-        yylhs.value.build< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-
-    // Compute the default @$.
-    {
-      slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
-      YYLLOC_DEFAULT (yylhs.location, slice, yylen);
-    }
-
-    // Perform the reduction.
-    YY_REDUCE_PRINT (yyn);
-    try
-      {
-        switch (yyn)
-          {
-  case 2:
-#line 141 "d4_ce_parser.yy" // lalr1.cc:846
-    { driver.set_result(yystack_[0].value.as< bool > ()); }
-#line 1032 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 3:
-#line 142 "d4_ce_parser.yy" // lalr1.cc:846
-    { driver.set_result(yystack_[2].value.as< bool > () && yystack_[0].value.as< bool > ()); }
-#line 1038 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 4:
-#line 145 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[0].value.as< bool > (); }
-#line 1044 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 5:
-#line 146 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[2].value.as< bool > () && yystack_[0].value.as< bool > (); }
-#line 1050 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 6:
-#line 150 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< bool > () = driver.slice_dimension(yystack_[2].value.as< std::string > (), yystack_[0].value.as< libdap::D4ConstraintEvaluator::index > ());
-}
-#line 1058 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 7:
-#line 155 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[0].value.as< bool > (); }
-#line 1064 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 8:
-#line 156 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[2].value.as< bool > () && yystack_[0].value.as< bool > (); }
-#line 1070 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 9:
-#line 159 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[0].value.as< bool > (); }
-#line 1076 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 10:
-#line 160 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[2].value.as< bool > () && yystack_[0].value.as< bool > (); }
-#line 1082 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 11:
-#line 165 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    BaseType *btp = 0;
-    if (driver.top_basetype()) {
-        btp = driver.top_basetype()->var(yystack_[0].value.as< std::string > ());
-    }
-    else {
-        btp = driver.dmr()->root()->find_var(yystack_[0].value.as< std::string > ());
-    }
-    
-    if (!btp)
-        driver.throw_not_found(yystack_[0].value.as< std::string > (), "id");
-
-#if 0    
-    if (btp->type() == dods_array_c)
-        yylhs.value.as< bool > () = driver.mark_variable(btp) && driver.mark_array_variable(btp);   // handle array w/o slice ops
-    else
-#endif
-
-    yylhs.value.as< bool > () = driver.mark_variable(btp);
-}
-#line 1107 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 12:
-#line 187 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    BaseType *btp = 0;
-    if (driver.top_basetype()) {
-        btp = driver.top_basetype()->var(yystack_[1].value.as< std::string > ());
-    }
-    else {
-        btp = driver.dmr()->root()->find_var(yystack_[1].value.as< std::string > ());
-    }
-    
-    if (!btp)
-        driver.throw_not_found(yystack_[1].value.as< std::string > (), "id indexes");
-        
-    if (btp->type() != dods_array_c)
-        driver.throw_not_array(yystack_[1].value.as< std::string > (), "id indexes");
-        
-    yylhs.value.as< bool > () = driver.mark_variable(btp); //  && driver.mark_array_variable(btp);
-}
-#line 1129 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 13:
-#line 206 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    BaseType *btp = 0;
-    if (driver.top_basetype()) {
-        btp = driver.top_basetype()->var(yystack_[0].value.as< std::string > ());
-    }
-    else {
-        btp = driver.dmr()->root()->find_var(yystack_[0].value.as< std::string > ());
-    }
-
-    if (!btp)
-        driver.throw_not_found(yystack_[0].value.as< std::string > (), "id fields");
-    
-    if (btp->type() == dods_array_c) {
-        if (btp->var() && !btp->var()->is_constructor_type())
-            throw Error("The variable " + yystack_[0].value.as< std::string > () + " must be a Structure or Sequence to be used with {}.");
-            
-        // This call also tests the btp to make sure it's an array
-        driver.mark_array_variable(btp);
-    }
-    else {
-        // Don't mark the variable here because only some fields are to be sent and those
-        // will be marked when the fields are parsed
-        if (!btp->is_constructor_type())
-            throw Error("The variable " + yystack_[0].value.as< std::string > () + " must be a Structure or Sequence to be used with {}.");
-    }
-    
-    // push the basetype (a ctor or array of ctor) on the stack so that it is
-    // accessible while the fields are being parsed
-    driver.push_basetype(btp);
-}
-#line 1164 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 14:
-#line 237 "d4_ce_parser.yy" // lalr1.cc:846
-    { 
-    driver.pop_basetype(); 
-    yylhs.value.as< bool > () = true; 
-}
-#line 1173 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 15:
-#line 243 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    BaseType *btp = 0;
-    if (driver.top_basetype()) {
-        btp = driver.top_basetype()->var(yystack_[1].value.as< std::string > ());
-    }
-    else {
-        btp = driver.dmr()->root()->find_var(yystack_[1].value.as< std::string > ());
-    }
-
-    if (!btp)
-        driver.throw_not_found(yystack_[1].value.as< std::string > (), "id indexes fields");
-    
-    if (btp->type() != dods_array_c)
-        driver.throw_not_array(yystack_[1].value.as< std::string > (), "id indexes fields");
-
-    // This call also tests the btp to make sure it's an array
-    driver.mark_array_variable(btp);
-    
-    if (!btp->var()->is_constructor_type())
-        throw Error("The variable " + yystack_[1].value.as< std::string > () + " must be a Structure or Sequence to be used with {}.");
-      
-    driver.push_basetype(btp->var());       
-}
-#line 1201 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 16:
-#line 267 "d4_ce_parser.yy" // lalr1.cc:846
-    { 
-    driver.pop_basetype();
-    yylhs.value.as< bool > () = true; 
-}
-#line 1210 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 17:
-#line 279 "d4_ce_parser.yy" // lalr1.cc:846
-    { 
-    driver.push_index(yystack_[0].value.as< libdap::D4ConstraintEvaluator::index > ()); 
-    yylhs.value.as< bool > () = true; 
-}
-#line 1219 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 18:
-#line 283 "d4_ce_parser.yy" // lalr1.cc:846
-    { driver.push_index(yystack_[0].value.as< libdap::D4ConstraintEvaluator::index > ()); }
-#line 1225 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 19:
-#line 283 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[0].value.as< bool > (); }
-#line 1231 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 20:
-#line 286 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< libdap::D4ConstraintEvaluator::index > () = driver.make_index(); }
-#line 1237 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 21:
-#line 287 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< libdap::D4ConstraintEvaluator::index > () = driver.make_index(yystack_[1].value.as< std::string > ()); }
-#line 1243 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 22:
-#line 288 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< libdap::D4ConstraintEvaluator::index > () = driver.make_index(yystack_[3].value.as< std::string > (), 1, yystack_[1].value.as< std::string > ()); }
-#line 1249 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 23:
-#line 289 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< libdap::D4ConstraintEvaluator::index > () = driver.make_index(yystack_[5].value.as< std::string > (), yystack_[3].value.as< std::string > (), yystack_[1].value.as< std::string > ()); }
-#line 1255 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 24:
-#line 290 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< libdap::D4ConstraintEvaluator::index > () = driver.make_index(yystack_[2].value.as< std::string > (), 1); }
-#line 1261 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 25:
-#line 291 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< libdap::D4ConstraintEvaluator::index > () = driver.make_index(yystack_[4].value.as< std::string > (), yystack_[2].value.as< std::string > ()); }
-#line 1267 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 26:
-#line 294 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = yystack_[1].value.as< bool > (); }
-#line 1273 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 29:
-#line 311 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = true; }
-#line 1279 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 30:
-#line 312 "d4_ce_parser.yy" // lalr1.cc:846
-    { yylhs.value.as< bool > () = true; }
-#line 1285 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 42:
-#line 334 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > () = yystack_[0].value.as< std::string > ();
-}
-#line 1293 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 43:
-#line 338 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ().append("/");
-    yylhs.value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-}
-#line 1302 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 44:
-#line 343 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::string > ().append("/");
-    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
-}
-#line 1312 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 45:
-#line 351 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ().append("/");
-    yylhs.value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-}
-#line 1321 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 46:
-#line 356 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::string > ().append(".");
-    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
-}
-#line 1331 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 47:
-#line 364 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > () = yystack_[0].value.as< std::string > ();
-}
-#line 1339 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 48:
-#line 368 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::string > ().append(".");
-    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
-}
-#line 1349 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 49:
-#line 379 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ()=yystack_[0].value.as< std::string > ();
-}
-#line 1357 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 50:
-#line 383 "d4_ce_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ()=yystack_[0].value.as< std::string > ();
-}
-#line 1365 "d4_ce_parser.tab.cc" // lalr1.cc:846
-    break;
-
-
-#line 1369 "d4_ce_parser.tab.cc" // lalr1.cc:846
-          default:
-            break;
-          }
-      }
-    catch (const syntax_error& yyexc)
-      {
-        error (yyexc);
-        YYERROR;
-      }
-    YY_SYMBOL_PRINT ("-> $$ =", yylhs);
-    yypop_ (yylen);
-    yylen = 0;
-    YY_STACK_PRINT ();
-
-    // Shift the result of the reduction.
-    yypush_ (YY_NULL, yylhs);
-    goto yynewstate;
-
-  /*--------------------------------------.
-  | yyerrlab -- here on detecting error.  |
-  `--------------------------------------*/
-  yyerrlab:
-    // If not already recovering from an error, report this error.
-    if (!yyerrstatus_)
-      {
-        ++yynerrs_;
-        error (yyla.location, yysyntax_error_ (yystack_[0].state,
-                                           yyempty ? yyempty_ : yyla.type_get ()));
-      }
-
-
-    yyerror_range[1].location = yyla.location;
-    if (yyerrstatus_ == 3)
-      {
-        /* If just tried and failed to reuse lookahead token after an
-           error, discard it.  */
-
-        // Return failure if at end of input.
-        if (yyla.type_get () == yyeof_)
-          YYABORT;
-        else if (!yyempty)
-          {
-            yy_destroy_ ("Error: discarding", yyla);
-            yyempty = true;
-          }
-      }
-
-    // Else will try to reuse lookahead token after shifting the error token.
-    goto yyerrlab1;
-
-
-  /*---------------------------------------------------.
-  | yyerrorlab -- error raised explicitly by YYERROR.  |
-  `---------------------------------------------------*/
-  yyerrorlab:
-
-    /* Pacify compilers like GCC when the user code never invokes
-       YYERROR and the label yyerrorlab therefore never appears in user
-       code.  */
-    if (false)
-      goto yyerrorlab;
-    yyerror_range[1].location = yystack_[yylen - 1].location;
-    /* $$ was initialized before running the user action.  */
-    YY_SYMBOL_PRINT ("Error: discarding", yylhs);
-    yylhs.~stack_symbol_type();
-    /* Do not reclaim the symbols of the rule whose action triggered
-       this YYERROR.  */
-    yypop_ (yylen);
-    yylen = 0;
-    goto yyerrlab1;
-
-  /*-------------------------------------------------------------.
-  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
-  `-------------------------------------------------------------*/
-  yyerrlab1:
-    yyerrstatus_ = 3;   // Each real token shifted decrements this.
-    {
-      stack_symbol_type error_token;
-      for (;;)
-        {
-          yyn = yypact_[yystack_[0].state];
-          if (!yy_pact_value_is_default_ (yyn))
-            {
-              yyn += yyterror_;
-              if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
-                {
-                  yyn = yytable_[yyn];
-                  if (0 < yyn)
-                    break;
-                }
-            }
-
-          // Pop the current state because it cannot handle the error token.
-          if (yystack_.size () == 1)
-            YYABORT;
-
-          yyerror_range[1].location = yystack_[0].location;
-          yy_destroy_ ("Error: popping", yystack_[0]);
-          yypop_ ();
-          YY_STACK_PRINT ();
-        }
-
-      yyerror_range[2].location = yyla.location;
-      YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
-
-      // Shift the error token.
-      error_token.state = yyn;
-      yypush_ ("Shifting", error_token);
-    }
-    goto yynewstate;
-
-    // Accept.
-  yyacceptlab:
-    yyresult = 0;
-    goto yyreturn;
-
-    // Abort.
-  yyabortlab:
-    yyresult = 1;
-    goto yyreturn;
-
-  yyreturn:
-    if (!yyempty)
-      yy_destroy_ ("Cleanup: discarding lookahead", yyla);
-
-    /* Do not reclaim the symbols of the rule whose action triggered
-       this YYABORT or YYACCEPT.  */
-    yypop_ (yylen);
-    while (1 < yystack_.size ())
-      {
-        yy_destroy_ ("Cleanup: popping", yystack_[0]);
-        yypop_ ();
-      }
-
-    return yyresult;
-  }
-    catch (...)
-      {
-        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
-                 << std::endl;
-        // Do not try to display the values of the reclaimed symbols,
-        // as their printer might throw an exception.
-        if (!yyempty)
-          yy_destroy_ (YY_NULL, yyla);
-
-        while (1 < yystack_.size ())
-          {
-            yy_destroy_ (YY_NULL, yystack_[0]);
-            yypop_ ();
-          }
-        throw;
-      }
-  }
-
-  void
-  D4CEParser::error (const syntax_error& yyexc)
-  {
-    error (yyexc.location, yyexc.what());
-  }
-
-  // Generate an error message.
-  std::string
-  D4CEParser::yysyntax_error_ (state_type yystate, symbol_number_type yytoken) const
-  {
-    std::string yyres;
-    // Number of reported tokens (one for the "unexpected", one per
-    // "expected").
-    size_t yycount = 0;
-    // Its maximum.
-    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-    // Arguments of yyformat.
-    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-
-    /* There are many possibilities here to consider:
-       - If this state is a consistent state with a default action, then
-         the only way this function was invoked is if the default action
-         is an error action.  In that case, don't check for expected
-         tokens because there are none.
-       - The only way there can be no lookahead present (in yytoken) is
-         if this state is a consistent state with a default action.
-         Thus, detecting the absence of a lookahead is sufficient to
-         determine that there is no unexpected or expected token to
-         report.  In that case, just report a simple "syntax error".
-       - Don't assume there isn't a lookahead just because this state is
-         a consistent state with a default action.  There might have
-         been a previous inconsistent state, consistent state with a
-         non-default action, or user semantic action that manipulated
-         yyla.  (However, yyla is currently not documented for users.)
-       - Of course, the expected token list depends on states to have
-         correct lookahead information, and it depends on the parser not
-         to perform extra reductions after fetching a lookahead from the
-         scanner and before detecting a syntax error.  Thus, state
-         merging (from LALR or IELR) and default reductions corrupt the
-         expected token list.  However, the list is correct for
-         canonical LR with one exception: it will still contain any
-         token that will not be accepted due to an error action in a
-         later state.
-    */
-    if (yytoken != yyempty_)
-      {
-        yyarg[yycount++] = yytname_[yytoken];
-        int yyn = yypact_[yystate];
-        if (!yy_pact_value_is_default_ (yyn))
-          {
-            /* Start YYX at -YYN if negative to avoid negative indexes in
-               YYCHECK.  In other words, skip the first -YYN actions for
-               this state because they are default actions.  */
-            int yyxbegin = yyn < 0 ? -yyn : 0;
-            // Stay within bounds of both yycheck and yytname.
-            int yychecklim = yylast_ - yyn + 1;
-            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
-            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
-              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
-                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
-                {
-                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                    {
-                      yycount = 1;
-                      break;
-                    }
-                  else
-                    yyarg[yycount++] = yytname_[yyx];
-                }
-          }
-      }
-
-    char const* yyformat = YY_NULL;
-    switch (yycount)
-      {
-#define YYCASE_(N, S)                         \
-        case N:                               \
-          yyformat = S;                       \
-        break
-        YYCASE_(0, YY_("syntax error"));
-        YYCASE_(1, YY_("syntax error, unexpected %s"));
-        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-#undef YYCASE_
-      }
-
-    // Argument number.
-    size_t yyi = 0;
-    for (char const* yyp = yyformat; *yyp; ++yyp)
-      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
-        {
-          yyres += yytnamerr_ (yyarg[yyi++]);
-          ++yyp;
-        }
-      else
-        yyres += *yyp;
-    return yyres;
-  }
-
-
-  const signed char D4CEParser::yypact_ninf_ = -19;
-
-  const signed char D4CEParser::yytable_ninf_ = -47;
-
-  const signed char
-  D4CEParser::yypact_[] =
-  {
-       2,   -19,   -19,    17,    22,    28,   -19,    43,   -19,    -2,
-      21,    18,    16,   -19,    16,    27,   -19,     2,     2,     2,
-      29,    46,    44,    45,    49,    17,    17,   -19,    43,   -19,
-      34,    47,   -19,    -6,    38,   -19,   -19,     2,   -19,    44,
-      46,    16,    32,   -19,     2,   -19,   -19,   -19,   -19,   -19,
-     -19,   -19,   -19,   -19,   -19,   -19,     2,   -19,    31,    25,
-     -19,   -19,   -19,    -6,    42,   -19,   -19,     2,   -19,    37,
-     -19,    50,   -19,   -19
-  };
-
-  const unsigned char
-  D4CEParser::yydefact_[] =
-  {
-       0,    49,    50,     0,     0,     0,     4,     2,     7,     9,
-      11,     0,    42,    47,    43,    47,     1,     0,     0,     0,
-       0,     0,     0,    12,    17,     0,     0,     5,     3,     8,
-      11,    10,    27,     0,     0,    20,     6,     0,    14,     0,
-       0,    44,    47,    48,     0,    41,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,     0,    21,     0,     0,
-      16,    19,    28,    29,     0,    24,    26,     0,    22,     0,
-      30,     0,    25,    23
-  };
-
-  const signed char
-  D4CEParser::yypgoto_[] =
-  {
-     -19,   -19,   -19,    48,   -14,    51,   -19,   -19,   -19,    20,
-     -19,    40,    23,   -19,    19,     1,   -18,   -19,     4,    -1
-  };
-
-  const signed char
-  D4CEParser::yydefgoto_[] =
-  {
-      -1,     4,     5,     6,     7,     8,     9,    22,    39,    23,
-      40,    24,    38,    31,    32,    56,    10,    11,    12,    13
-  };
-
-  const signed char
-  D4CEParser::yytable_[] =
-  {
-      30,    33,    15,    28,    19,     1,     2,    14,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    30,
-       1,     2,    16,    59,    42,    43,    33,     3,    20,    41,
-      18,   -13,    34,    17,    64,    21,    66,    35,    63,    65,
-      71,    20,    26,    25,   -13,    72,    57,    58,    18,    70,
-      68,    69,   -45,    20,    37,   -15,   -18,   -46,    73,    44,
-      61,    36,    60,    62,    67,    27,     0,     0,     0,    29
-  };
-
-  const signed char
-  D4CEParser::yycheck_[] =
-  {
-      18,    19,     3,    17,     6,     3,     4,     3,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    37,
-       3,     4,     0,    37,    25,    26,    44,    25,     7,    25,
-       5,    10,     3,     5,     3,    14,    11,     8,    56,     8,
-       3,     7,    26,    25,    10,     8,     8,     9,     5,    67,
-       8,     9,    25,     7,    10,    10,     7,    25,     8,    12,
-      40,    21,    39,    44,    63,    17,    -1,    -1,    -1,    18
-  };
-
-  const unsigned char
-  D4CEParser::yystos_[] =
-  {
-       0,     3,     4,    25,    28,    29,    30,    31,    32,    33,
-      43,    44,    45,    46,    45,    46,     0,     5,     5,     6,
-       7,    14,    34,    36,    38,    25,    26,    30,    31,    32,
-      43,    40,    41,    43,     3,     8,    38,    10,    39,    35,
-      37,    45,    46,    46,    12,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    42,     8,     9,    31,
-      39,    36,    41,    43,     3,     8,    11,    42,     8,     9,
-      43,     3,     8,     8
-  };
-
-  const unsigned char
-  D4CEParser::yyr1_[] =
-  {
-       0,    27,    28,    28,    29,    29,    30,    31,    31,    32,
-      32,    33,    33,    34,    33,    35,    33,    36,    37,    36,
-      38,    38,    38,    38,    38,    38,    39,    40,    40,    41,
-      41,    42,    42,    42,    42,    42,    42,    42,    42,    42,
-      42,    42,    43,    43,    43,    44,    44,    45,    45,    46,
-      46
-  };
-
-  const unsigned char
-  D4CEParser::yyr2_[] =
-  {
-       0,     2,     1,     3,     1,     3,     3,     1,     3,     1,
-       3,     1,     2,     0,     3,     0,     4,     1,     0,     3,
-       2,     3,     5,     7,     4,     6,     3,     1,     3,     3,
-       5,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     3,     2,     3,     1,     3,     1,
-       1
-  };
-
-
-
-  // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-  // First, the terminals, then, starting at \a yyntokens_, nonterminals.
-  const char*
-  const D4CEParser::yytname_[] =
-  {
-  "\"end of file\"", "error", "$undefined", "\"word\"", "\"string\"",
-  "\";\"", "\"|\"", "\"[\"", "\"]\"", "\":\"", "\"{\"", "\"}\"", "\",\"",
-  "\"ND\"", "\"=\"", "\"<\"", "\">\"", "\"<=\"", "\">=\"", "\"==\"",
-  "\"!=\"", "\"~=\"", "\"<<\"", "\">>\"", "\"@=\"", "\"/\"", "\".\"",
-  "$accept", "expression", "dimensions", "dimension", "clauses", "clause",
-  "subset", "$@1", "$@2", "indexes", "$@3", "index", "fields", "filter",
-  "predicate", "op", "id", "group", "path", "name", YY_NULL
-  };
-
-#if YYDEBUG
-  const unsigned short int
-  D4CEParser::yyrline_[] =
-  {
-       0,   141,   141,   142,   145,   146,   149,   155,   156,   159,
-     160,   164,   186,   206,   205,   243,   242,   278,   283,   283,
-     286,   287,   288,   289,   290,   291,   294,   297,   298,   311,
-     312,   317,   318,   319,   320,   321,   322,   323,   325,   326,
-     328,   330,   333,   337,   342,   350,   355,   363,   367,   378,
-     382
-  };
-
-  // Print the state stack on the debug stream.
-  void
-  D4CEParser::yystack_print_ ()
-  {
-    *yycdebug_ << "Stack now";
-    for (stack_type::const_iterator
-           i = yystack_.begin (),
-           i_end = yystack_.end ();
-         i != i_end; ++i)
-      *yycdebug_ << ' ' << i->state;
-    *yycdebug_ << std::endl;
-  }
-
-  // Report on the debug stream that the rule \a yyrule is going to be reduced.
-  void
-  D4CEParser::yy_reduce_print_ (int yyrule)
-  {
-    unsigned int yylno = yyrline_[yyrule];
-    int yynrhs = yyr2_[yyrule];
-    // Print the symbols being reduced, and their result.
-    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
-               << " (line " << yylno << "):" << std::endl;
-    // The symbols being reduced.
-    for (int yyi = 0; yyi < yynrhs; yyi++)
-      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
-                       yystack_[(yynrhs) - (yyi + 1)]);
-  }
-#endif // YYDEBUG
-
-  // Symbol number corresponding to token number t.
-  inline
-  D4CEParser::token_number_type
-  D4CEParser::yytranslate_ (int t)
-  {
-    static
-    const token_number_type
-    translate_table[] =
-    {
-     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26
-    };
-    const unsigned int user_token_number_max_ = 281;
-    const token_number_type undef_token_ = 2;
-
-    if (static_cast<int>(t) <= yyeof_)
-      return yyeof_;
-    else if (static_cast<unsigned int> (t) <= user_token_number_max_)
-      return translate_table[t];
-    else
-      return undef_token_;
-  }
-
-#line 35 "d4_ce_parser.yy" // lalr1.cc:1156
-} // libdap
-#line 1838 "d4_ce_parser.tab.cc" // lalr1.cc:1156
-#line 388 "d4_ce_parser.yy" // lalr1.cc:1157
-
-
-// Forward the error to the driver for handling. The location parameter
-// provides the line number and character position of the error.
-void
-libdap::D4CEParser::error(const location_type &l, const std::string &m)
-{
-    driver.error(l, m);
-}
-
-/* include for access to scanner.yylex */
-#include "D4CEScanner.h"
-
-static int yylex(libdap::D4CEParser::semantic_type *yylval,
-                 libdap::location *loc,
-                 libdap::D4CEScanner &scanner,
-                 libdap::D4ConstraintEvaluator &driver)
-{
-    if (driver.trace_scanning())
-        scanner.set_debug(true);
-    
-    return( scanner.yylex(yylval, loc) );
-}
diff --git a/d4_ce/gen_grammar_sources/d4_ce_parser.tab.hh.tmp b/d4_ce/gen_grammar_sources/d4_ce_parser.tab.hh.tmp
deleted file mode 100644
index dc3ac3e..0000000
--- a/d4_ce/gen_grammar_sources/d4_ce_parser.tab.hh.tmp
+++ /dev/null
@@ -1,731 +0,0 @@
-// A Bison parser, made by GNU Bison 3.0.
-
-// Skeleton interface for Bison LALR(1) parsers in C++
-
-// Copyright (C) 2002-2013 Free Software Foundation, Inc.
-
-// 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, you may create a larger work that contains
-// part or all of the Bison parser skeleton and distribute that work
-// under terms of your choice, so long as that work isn't itself a
-// parser generator using the skeleton or a modified version thereof
-// as a parser skeleton.  Alternatively, if you modify or redistribute
-// the parser skeleton itself, you may (at your option) remove this
-// special exception, which will cause the skeleton and the resulting
-// Bison output files to be licensed under the GNU General Public
-// License without this special exception.
-
-// This special exception was added by the Free Software Foundation in
-// version 2.2 of Bison.
-
-/**
- ** \file d4_ce_parser.tab.hh
- ** Define the libdap::parser class.
- */
-
-// C++ LALR(1) parser skeleton written by Akim Demaille.
-
-#ifndef YY_YY_D4_CE_PARSER_TAB_HH_INCLUDED
-# define YY_YY_D4_CE_PARSER_TAB_HH_INCLUDED
-// //                    "%code requires" blocks.
-#line 48 "d4_ce_parser.yy" // lalr1.cc:386
-
-#include "D4ConstraintEvaluator.h"
-namespace libdap {
-    class D4CEScanner;
-}
-
-
-#line 52 "d4_ce_parser.tab.hh" // lalr1.cc:386
-
-# include <cassert>
-# include <vector>
-# include <iostream>
-# include <stdexcept>
-# include <string>
-# include "stack.hh"
-# include "location.hh"
-#include <typeinfo>
-#ifndef YYASSERT
-# include <cassert>
-# define YYASSERT assert
-#endif
-
-
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-
-#line 35 "d4_ce_parser.yy" // lalr1.cc:386
-namespace libdap {
-#line 75 "d4_ce_parser.tab.hh" // lalr1.cc:386
-
-
-
-  /// A char[S] buffer to store and retrieve objects.
-  ///
-  /// Sort of a variant, but does not keep track of the nature
-  /// of the stored data, since that knowledge is available
-  /// via the current state.
-  template <size_t S>
-  struct variant
-  {
-    /// Type of *this.
-    typedef variant<S> self_type;
-
-    /// Empty construction.
-    variant ()
-      : yytname_ (YY_NULL)
-    {}
-
-    /// Construct and fill.
-    template <typename T>
-    variant (const T& t)
-      : yytname_ (typeid (T).name ())
-    {
-      YYASSERT (sizeof (T) <= S);
-      new (yyas_<T> ()) T (t);
-    }
-
-    /// Destruction, allowed only if empty.
-    ~variant ()
-    {
-      YYASSERT (!yytname_);
-    }
-
-    /// Instantiate an empty \a T in here.
-    template <typename T>
-    T&
-    build ()
-    {
-      YYASSERT (!yytname_);
-      YYASSERT (sizeof (T) <= S);
-      yytname_ = typeid (T).name ();
-      return *new (yyas_<T> ()) T;
-    }
-
-    /// Instantiate a \a T in here from \a t.
-    template <typename T>
-    T&
-    build (const T& t)
-    {
-      YYASSERT (!yytname_);
-      YYASSERT (sizeof (T) <= S);
-      yytname_ = typeid (T).name ();
-      return *new (yyas_<T> ()) T (t);
-    }
-
-    /// Accessor to a built \a T.
-    template <typename T>
-    T&
-    as ()
-    {
-      YYASSERT (yytname_ == typeid (T).name ());
-      YYASSERT (sizeof (T) <= S);
-      return *yyas_<T> ();
-    }
-
-    /// Const accessor to a built \a T (for %printer).
-    template <typename T>
-    const T&
-    as () const
-    {
-      YYASSERT (yytname_ == typeid (T).name ());
-      YYASSERT (sizeof (T) <= S);
-      return *yyas_<T> ();
-    }
-
-    /// Swap the content with \a other, of same type.
-    ///
-    /// Both variants must be built beforehand, because swapping the actual
-    /// data requires reading it (with as()), and this is not possible on
-    /// unconstructed variants: it would require some dynamic testing, which
-    /// should not be the variant's responsability.
-    /// Swapping between built and (possibly) non-built is done with
-    /// variant::move ().
-    template <typename T>
-    void
-    swap (self_type& other)
-    {
-      YYASSERT (yytname_);
-      YYASSERT (yytname_ == other.yytname_);
-      std::swap (as<T> (), other.as<T> ());
-    }
-
-    /// Move the content of \a other to this.
-    ///
-    /// Destroys \a other.
-    template <typename T>
-    void
-    move (self_type& other)
-    {
-      YYASSERT (!yytname_);
-      build<T> ();
-      swap<T> (other);
-      other.destroy<T> ();
-    }
-
-    /// Copy the content of \a other to this.
-    template <typename T>
-    void
-    copy (const self_type& other)
-    {
-      build<T> (other.as<T> ());
-    }
-
-    /// Destroy the stored \a T.
-    template <typename T>
-    void
-    destroy ()
-    {
-      as<T> ().~T ();
-      yytname_ = YY_NULL;
-    }
-
-  private:
-    /// Prohibit blind copies.
-    self_type& operator=(const self_type&);
-    variant (const self_type&);
-
-    /// Accessor to raw memory as \a T.
-    template <typename T>
-    T*
-    yyas_ ()
-    {
-      void *yyp = yybuffer_.yyraw;
-      return static_cast<T*> (yyp);
-     }
-
-    /// Const accessor to raw memory as \a T.
-    template <typename T>
-    const T*
-    yyas_ () const
-    {
-      const void *yyp = yybuffer_.yyraw;
-      return static_cast<const T*> (yyp);
-     }
-
-    union
-    {
-      /// Strongest alignment constraints.
-      long double yyalign_me;
-      /// A buffer large enough to store any of the semantic values.
-      char yyraw[S];
-    } yybuffer_;
-
-    /// Whether the content is built: if defined, the name of the stored type.
-    const char *yytname_;
-  };
-
-
-  /// A Bison parser.
-  class D4CEParser
-  {
-  public:
-#ifndef YYSTYPE
-    /// An auxiliary type to compute the largest semantic type.
-    union union_type
-    {
-      // dimensions
-      // dimension
-      // clauses
-      // clause
-      // subset
-      // indexes
-      // fields
-      // filter
-      // predicate
-      char dummy1[sizeof(bool)];
-
-      // index
-      char dummy2[sizeof(libdap::D4ConstraintEvaluator::index)];
-
-      // "word"
-      // "string"
-      // id
-      // group
-      // path
-      // name
-      char dummy3[sizeof(std::string)];
-};
-
-    /// Symbol semantic values.
-    typedef variant<sizeof(union_type)> semantic_type;
-#else
-    typedef YYSTYPE semantic_type;
-#endif
-    /// Symbol locations.
-    typedef location location_type;
-
-    /// Syntax errors thrown from user actions.
-    struct syntax_error : std::runtime_error
-    {
-      syntax_error (const location_type& l, const std::string& m);
-      location_type location;
-    };
-
-    /// Tokens.
-    struct token
-    {
-      enum yytokentype
-      {
-        END = 0,
-        WORD = 258,
-        STRING = 259,
-        SEMICOLON = 260,
-        PIPE = 261,
-        LBRACKET = 262,
-        RBRACKET = 263,
-        COLON = 264,
-        LBRACE = 265,
-        RBRACE = 266,
-        COMMA = 267,
-        ND = 268,
-        ASSIGN = 269,
-        LESS = 270,
-        GREATER = 271,
-        LESS_EQUAL = 272,
-        GREATER_EQUAL = 273,
-        EQUAL = 274,
-        NOT_EQUAL = 275,
-        REGEX_MATCH = 276,
-        LESS_BBOX = 277,
-        GREATER_BBOX = 278,
-        MASK = 279,
-        GROUP_SEP = 280,
-        PATH_SEP = 281
-      };
-    };
-
-    /// (External) token type, as returned by yylex.
-    typedef token::yytokentype token_type;
-
-    /// Internal symbol number.
-    typedef int symbol_number_type;
-
-    /// Internal symbol number for tokens (subsumed by symbol_number_type).
-    typedef unsigned char token_number_type;
-
-    /// A complete symbol.
-    ///
-    /// Expects its Base type to provide access to the symbol type
-    /// via type_get().
-    ///
-    /// Provide access to semantic value and location.
-    template <typename Base>
-    struct basic_symbol : Base
-    {
-      /// Alias to Base.
-      typedef Base super_type;
-
-      /// Default constructor.
-      basic_symbol ();
-
-      /// Copy constructor.
-      basic_symbol (const basic_symbol& other);
-
-      /// Constructor for valueless symbols, and symbols from each type.
-
-  basic_symbol (typename Base::kind_type t, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const bool v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const libdap::D4ConstraintEvaluator::index v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::string v, const location_type& l);
-
-
-      /// Constructor for symbols with semantic value.
-      basic_symbol (typename Base::kind_type t,
-                    const semantic_type& v,
-                    const location_type& l);
-
-      ~basic_symbol ();
-
-      /// Destructive move, \a s is emptied into this.
-      void move (basic_symbol& s);
-
-      /// The semantic value.
-      semantic_type value;
-
-      /// The location.
-      location_type location;
-
-    private:
-      /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& other);
-    };
-
-    /// Type access provider for token (enum) based symbols.
-    struct by_type
-    {
-      /// Default constructor.
-      by_type ();
-
-      /// Copy constructor.
-      by_type (const by_type& other);
-
-      /// The symbol type as needed by the constructor.
-      typedef token_type kind_type;
-
-      /// Constructor from (external) token numbers.
-      by_type (kind_type t);
-
-      /// Steal the symbol type from \a that.
-      void move (by_type& that);
-
-      /// The (internal) type number (corresponding to \a type).
-      /// -1 when this symbol is empty.
-      symbol_number_type type_get () const;
-
-      /// The token.
-      token_type token () const;
-
-      enum { empty = 0 };
-
-      /// The symbol type.
-      /// -1 when this symbol is empty.
-      token_number_type type;
-    };
-
-    /// "External" symbols: returned by the scanner.
-    typedef basic_symbol<by_type> symbol_type;
-
-    // Symbol constructors declarations.
-    static inline
-    symbol_type
-    make_END (const location_type& l);
-
-    static inline
-    symbol_type
-    make_WORD (const std::string& v, const location_type& l);
-
-    static inline
-    symbol_type
-    make_STRING (const std::string& v, const location_type& l);
-
-    static inline
-    symbol_type
-    make_SEMICOLON (const location_type& l);
-
-    static inline
-    symbol_type
-    make_PIPE (const location_type& l);
-
-    static inline
-    symbol_type
-    make_LBRACKET (const location_type& l);
-
-    static inline
-    symbol_type
-    make_RBRACKET (const location_type& l);
-
-    static inline
-    symbol_type
-    make_COLON (const location_type& l);
-
-    static inline
-    symbol_type
-    make_LBRACE (const location_type& l);
-
-    static inline
-    symbol_type
-    make_RBRACE (const location_type& l);
-
-    static inline
-    symbol_type
-    make_COMMA (const location_type& l);
-
-    static inline
-    symbol_type
-    make_ND (const location_type& l);
-
-    static inline
-    symbol_type
-    make_ASSIGN (const location_type& l);
-
-    static inline
-    symbol_type
-    make_LESS (const location_type& l);
-
-    static inline
-    symbol_type
-    make_GREATER (const location_type& l);
-
-    static inline
-    symbol_type
-    make_LESS_EQUAL (const location_type& l);
-
-    static inline
-    symbol_type
-    make_GREATER_EQUAL (const location_type& l);
-
-    static inline
-    symbol_type
-    make_EQUAL (const location_type& l);
-
-    static inline
-    symbol_type
-    make_NOT_EQUAL (const location_type& l);
-
-    static inline
-    symbol_type
-    make_REGEX_MATCH (const location_type& l);
-
-    static inline
-    symbol_type
-    make_LESS_BBOX (const location_type& l);
-
-    static inline
-    symbol_type
-    make_GREATER_BBOX (const location_type& l);
-
-    static inline
-    symbol_type
-    make_MASK (const location_type& l);
-
-    static inline
-    symbol_type
-    make_GROUP_SEP (const location_type& l);
-
-    static inline
-    symbol_type
-    make_PATH_SEP (const location_type& l);
-
-
-    /// Build a parser object.
-    D4CEParser (D4CEScanner  &scanner_yyarg, D4ConstraintEvaluator  &driver_yyarg);
-    virtual ~D4CEParser ();
-
-    /// Parse.
-    /// \returns  0 iff parsing succeeded.
-    virtual int parse ();
-
-#if YYDEBUG
-    /// The current debugging stream.
-    std::ostream& debug_stream () const;
-    /// Set the current debugging stream.
-    void set_debug_stream (std::ostream &);
-
-    /// Type for debugging levels.
-    typedef int debug_level_type;
-    /// The current debugging level.
-    debug_level_type debug_level () const;
-    /// Set the current debugging level.
-    void set_debug_level (debug_level_type l);
-#endif
-
-    /// Report a syntax error.
-    /// \param loc    where the syntax error is found.
-    /// \param msg    a description of the syntax error.
-    virtual void error (const location_type& loc, const std::string& msg);
-
-    /// Report a syntax error.
-    void error (const syntax_error& err);
-
-  private:
-    /// This class is not copyable.
-    D4CEParser (const D4CEParser&);
-    D4CEParser& operator= (const D4CEParser&);
-
-    /// State numbers.
-    typedef int state_type;
-
-    /// Generate an error message.
-    /// \param yystate   the state where the error occurred.
-    /// \param yytoken   the lookahead token type, or yyempty_.
-    virtual std::string yysyntax_error_ (state_type yystate,
-                                         symbol_number_type yytoken) const;
-
-    /// Compute post-reduction state.
-    /// \param yystate   the current state
-    /// \param yylhs     the nonterminal to push on the stack
-    state_type yy_lr_goto_state_ (state_type yystate, int yylhs);
-
-    /// Whether the given \c yypact_ value indicates a defaulted state.
-    /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue);
-
-    /// Whether the given \c yytable_ value indicates a syntax error.
-    /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue);
-
-    static const signed char yypact_ninf_;
-    static const signed char yytable_ninf_;
-
-    /// Convert a scanner token number \a t to a symbol number.
-    static token_number_type yytranslate_ (int t);
-
-    // Tables.
-  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-  // STATE-NUM.
-  static const signed char yypact_[];
-
-  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-  // Performed when YYTABLE does not specify something else to do.  Zero
-  // means the default is an error.
-  static const unsigned char yydefact_[];
-
-  // YYPGOTO[NTERM-NUM].
-  static const signed char yypgoto_[];
-
-  // YYDEFGOTO[NTERM-NUM].
-  static const signed char yydefgoto_[];
-
-  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-  // positive, shift that token.  If negative, reduce the rule whose
-  // number is the opposite.  If YYTABLE_NINF, syntax error.
-  static const signed char yytable_[];
-
-  static const signed char yycheck_[];
-
-  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-  // symbol of state STATE-NUM.
-  static const unsigned char yystos_[];
-
-  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
-  static const unsigned char yyr1_[];
-
-  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
-  static const unsigned char yyr2_[];
-
-
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    static std::string yytnamerr_ (const char *n);
-
-
-    /// For a symbol, its name in clear.
-    static const char* const yytname_[];
-#if YYDEBUG
-  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
-  static const unsigned short int yyrline_[];
-    /// Report on the debug stream that the rule \a r is going to be reduced.
-    virtual void yy_reduce_print_ (int r);
-    /// Print the state stack on the debug stream.
-    virtual void yystack_print_ ();
-
-    // Debugging.
-    int yydebug_;
-    std::ostream* yycdebug_;
-
-    /// \brief Display a symbol type, value and location.
-    /// \param yyo    The output stream.
-    /// \param yysym  The symbol.
-    template <typename Base>
-    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
-#endif
-
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg     Why this token is reclaimed.
-    ///                  If null, print nothing.
-    /// \param s         The symbol.
-    template <typename Base>
-    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
-
-  private:
-    /// Type access provider for state based symbols.
-    struct by_state
-    {
-      /// Default constructor.
-      by_state ();
-
-      /// The symbol type as needed by the constructor.
-      typedef state_type kind_type;
-
-      /// Constructor.
-      by_state (kind_type s);
-
-      /// Copy constructor.
-      by_state (const by_state& other);
-
-      /// Steal the symbol type from \a that.
-      void move (by_state& that);
-
-      /// The (internal) type number (corresponding to \a state).
-      /// "empty" when empty.
-      symbol_number_type type_get () const;
-
-      enum { empty = 0 };
-
-      /// The state.
-      state_type state;
-    };
-
-    /// "Internal" symbol: element of the stack.
-    struct stack_symbol_type : basic_symbol<by_state>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_state> super_type;
-      /// Construct an empty symbol.
-      stack_symbol_type ();
-      /// Steal the contents from \a sym to build this.
-      stack_symbol_type (state_type s, symbol_type& sym);
-      /// Assignment, needed by push_back.
-      stack_symbol_type& operator= (const stack_symbol_type& that);
-    };
-
-    /// Stack type.
-    typedef stack<stack_symbol_type> stack_type;
-
-    /// The stack.
-    stack_type yystack_;
-
-    /// Push a new state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the symbol
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, stack_symbol_type& s);
-
-    /// Push a new look ahead token on the state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the state
-    /// \param sym  the symbol (for its value and location).
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, state_type s, symbol_type& sym);
-
-    /// Pop \a n symbols the three stacks.
-    void yypop_ (unsigned int n = 1);
-
-    // Constants.
-    enum
-    {
-      yyeof_ = 0,
-      yylast_ = 69,           //< Last index in yytable_.
-      yynnts_ = 20,  //< Number of nonterminal symbols.
-      yyempty_ = -2,
-      yyfinal_ = 16, //< Termination state number.
-      yyterror_ = 1,
-      yyerrcode_ = 256,
-      yyntokens_ = 27    //< Number of tokens.
-    };
-
-
-    // User arguments.
-    D4CEScanner  &scanner;
-    D4ConstraintEvaluator  &driver;
-  };
-
-
-#line 35 "d4_ce_parser.yy" // lalr1.cc:386
-} // libdap
-#line 727 "d4_ce_parser.tab.hh" // lalr1.cc:386
-
-
-
-
-#endif // !YY_YY_D4_CE_PARSER_TAB_HH_INCLUDED
diff --git a/d4_ce/gen_grammar_sources/d4_function_parser.tab.cc.tmp b/d4_ce/gen_grammar_sources/d4_function_parser.tab.cc.tmp
deleted file mode 100644
index c1b91cd..0000000
--- a/d4_ce/gen_grammar_sources/d4_function_parser.tab.cc.tmp
+++ /dev/null
@@ -1,2467 +0,0 @@
-// A Bison parser, made by GNU Bison 3.0.
-
-// Skeleton implementation for Bison LALR(1) parsers in C++
-
-// Copyright (C) 2002-2013 Free Software Foundation, Inc.
-
-// 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, you may create a larger work that contains
-// part or all of the Bison parser skeleton and distribute that work
-// under terms of your choice, so long as that work isn't itself a
-// parser generator using the skeleton or a modified version thereof
-// as a parser skeleton.  Alternatively, if you modify or redistribute
-// the parser skeleton itself, you may (at your option) remove this
-// special exception, which will cause the skeleton and the resulting
-// Bison output files to be licensed under the GNU General Public
-// License without this special exception.
-
-// This special exception was added by the Free Software Foundation in
-// version 2.2 of Bison.
-
-
-// First part of user declarations.
-
-#line 37 "d4_function_parser.tab.cc" // lalr1.cc:398
-
-# ifndef YY_NULL
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
-#  else
-#   define YY_NULL 0
-#  endif
-# endif
-
-#include "d4_function_parser.tab.hh"
-
-// User implementation prologue.
-
-#line 51 "d4_function_parser.tab.cc" // lalr1.cc:406
-// Unqualified %code blocks.
-#line 77 "d4_function_parser.yy" // lalr1.cc:407
-
-    #include "BaseType.h"
-    #include "DMR.h"
-    #include "D4RValue.h"
-    #include "ServerFunctionsList.h"
-   
-    #include "parser-util.h"
-
-    /* include for all driver functions */
-    #include "D4FunctionEvaluator.h"
-
-    using namespace libdap ;
-    
-    /* this is silly, but I can't figure out a way around it */
-    static int yylex(libdap::D4FunctionParser::semantic_type *yylval,
-                     libdap::location *loc,
-                     libdap::D4FunctionScanner  &scanner,
-                     libdap::D4FunctionEvaluator   &evaluator);
-
-#line 73 "d4_function_parser.tab.cc" // lalr1.cc:407
-
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-# ifndef YYLLOC_DEFAULT
-#  define YYLLOC_DEFAULT(Current, Rhs, N)                               \
-    do                                                                  \
-      if (N)                                                            \
-        {                                                               \
-          (Current).begin  = YYRHSLOC (Rhs, 1).begin;                   \
-          (Current).end    = YYRHSLOC (Rhs, N).end;                     \
-        }                                                               \
-      else                                                              \
-        {                                                               \
-          (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
-        }                                                               \
-    while (/*CONSTCOND*/ false)
-# endif
-
-
-// Suppress unused-variable warnings by "using" E.
-#define YYUSE(E) ((void) (E))
-
-// Enable debugging if requested.
-#if YYDEBUG
-
-// A pseudo ostream that takes yydebug_ into account.
-# define YYCDEBUG if (yydebug_) (*yycdebug_)
-
-# define YY_SYMBOL_PRINT(Title, Symbol)         \
-  do {                                          \
-    if (yydebug_)                               \
-    {                                           \
-      *yycdebug_ << Title << ' ';               \
-      yy_print_ (*yycdebug_, Symbol);           \
-      *yycdebug_ << std::endl;                  \
-    }                                           \
-  } while (false)
-
-# define YY_REDUCE_PRINT(Rule)          \
-  do {                                  \
-    if (yydebug_)                       \
-      yy_reduce_print_ (Rule);          \
-  } while (false)
-
-# define YY_STACK_PRINT()               \
-  do {                                  \
-    if (yydebug_)                       \
-      yystack_print_ ();                \
-  } while (false)
-
-#else // !YYDEBUG
-
-# define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE(Symbol)
-# define YY_REDUCE_PRINT(Rule)           static_cast<void>(0)
-# define YY_STACK_PRINT()                static_cast<void>(0)
-
-#endif // !YYDEBUG
-
-#define yyerrok         (yyerrstatus_ = 0)
-#define yyclearin       (yyempty = true)
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-#define YYRECOVERING()  (!!yyerrstatus_)
-
-#line 34 "d4_function_parser.yy" // lalr1.cc:473
-namespace libdap {
-#line 159 "d4_function_parser.tab.cc" // lalr1.cc:473
-
-  /* Return YYSTR after stripping away unnecessary quotes and
-     backslashes, so that it's suitable for yyerror.  The heuristic is
-     that double-quoting is unnecessary unless the string contains an
-     apostrophe, a comma, or backslash (other than backslash-backslash).
-     YYSTR is taken from yytname.  */
-  std::string
-  D4FunctionParser::yytnamerr_ (const char *yystr)
-  {
-    if (*yystr == '"')
-      {
-        std::string yyr = "";
-        char const *yyp = yystr;
-
-        for (;;)
-          switch (*++yyp)
-            {
-            case '\'':
-            case ',':
-              goto do_not_strip_quotes;
-
-            case '\\':
-              if (*++yyp != '\\')
-                goto do_not_strip_quotes;
-              // Fall through.
-            default:
-              yyr += *yyp;
-              break;
-
-            case '"':
-              return yyr;
-            }
-      do_not_strip_quotes: ;
-      }
-
-    return yystr;
-  }
-
-
-  /// Build a parser object.
-  D4FunctionParser::D4FunctionParser (D4FunctionScanner  &scanner_yyarg, D4FunctionEvaluator  &evaluator_yyarg)
-    :
-#if YYDEBUG
-      yydebug_ (false),
-      yycdebug_ (&std::cerr),
-#endif
-      scanner (scanner_yyarg),
-      evaluator (evaluator_yyarg)
-  {}
-
-  D4FunctionParser::~D4FunctionParser ()
-  {}
-
-
-  /*---------------.
-  | Symbol types.  |
-  `---------------*/
-
-  inline
-  D4FunctionParser::syntax_error::syntax_error (const location_type& l, const std::string& m)
-    : std::runtime_error (m)
-    , location (l)
-  {}
-
-  // basic_symbol.
-  template <typename Base>
-  inline
-  D4FunctionParser::basic_symbol<Base>::basic_symbol ()
-    : value ()
-  {}
-
-  template <typename Base>
-  inline
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
-    : Base (other)
-    , value ()
-    , location (other.location)
-  {
-      switch (other.type_get ())
-    {
-      case 7: // "function name"
-      case 44: // fname
-        value.copy< D4Function > (other.value);
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        value.copy< D4RValue* > (other.value);
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        value.copy< D4RValueList* > (other.value);
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        value.copy< std::string > (other.value);
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        value.copy< std::vector<dods_byte>* > (other.value);
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        value.copy< std::vector<dods_float32>* > (other.value);
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        value.copy< std::vector<dods_float64>* > (other.value);
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        value.copy< std::vector<dods_int16>* > (other.value);
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        value.copy< std::vector<dods_int32>* > (other.value);
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        value.copy< std::vector<dods_int64>* > (other.value);
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        value.copy< std::vector<dods_int8>* > (other.value);
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        value.copy< std::vector<dods_uint16>* > (other.value);
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        value.copy< std::vector<dods_uint32>* > (other.value);
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        value.copy< std::vector<dods_uint64>* > (other.value);
-        break;
-
-      default:
-        break;
-    }
-
-  }
-
-
-  template <typename Base>
-  inline
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const semantic_type& v, const location_type& l)
-    : Base (t)
-    , value ()
-    , location (l)
-  {
-    (void) v;
-      switch (this->type_get ())
-    {
-      case 7: // "function name"
-      case 44: // fname
-        value.copy< D4Function > (v);
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        value.copy< D4RValue* > (v);
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        value.copy< D4RValueList* > (v);
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        value.copy< std::string > (v);
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        value.copy< std::vector<dods_byte>* > (v);
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        value.copy< std::vector<dods_float32>* > (v);
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        value.copy< std::vector<dods_float64>* > (v);
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        value.copy< std::vector<dods_int16>* > (v);
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        value.copy< std::vector<dods_int32>* > (v);
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        value.copy< std::vector<dods_int64>* > (v);
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        value.copy< std::vector<dods_int8>* > (v);
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        value.copy< std::vector<dods_uint16>* > (v);
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        value.copy< std::vector<dods_uint32>* > (v);
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        value.copy< std::vector<dods_uint64>* > (v);
-        break;
-
-      default:
-        break;
-    }
-}
-
-
-  // Implementation of basic_symbol constructor for each type.
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
-    : Base (t)
-    , value ()
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const D4Function v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const D4RValue* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const D4RValueList* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_byte>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_float32>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_float64>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int16>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int32>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int64>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int8>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_uint16>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_uint32>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-  template <typename Base>
-  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_uint64>* v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
-
-
-  template <typename Base>
-  inline
-  D4FunctionParser::basic_symbol<Base>::~basic_symbol ()
-  {
-    // User destructor.
-    symbol_number_type yytype = this->type_get ();
-    switch (yytype)
-    {
-   default:
-      break;
-    }
-
-    // Type destructor.
-    switch (yytype)
-    {
-      case 7: // "function name"
-      case 44: // fname
-        value.template destroy< D4Function > ();
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        value.template destroy< D4RValue* > ();
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        value.template destroy< D4RValueList* > ();
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        value.template destroy< std::string > ();
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        value.template destroy< std::vector<dods_byte>* > ();
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        value.template destroy< std::vector<dods_float32>* > ();
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        value.template destroy< std::vector<dods_float64>* > ();
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        value.template destroy< std::vector<dods_int16>* > ();
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        value.template destroy< std::vector<dods_int32>* > ();
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        value.template destroy< std::vector<dods_int64>* > ();
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        value.template destroy< std::vector<dods_int8>* > ();
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        value.template destroy< std::vector<dods_uint16>* > ();
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        value.template destroy< std::vector<dods_uint32>* > ();
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        value.template destroy< std::vector<dods_uint64>* > ();
-        break;
-
-      default:
-        break;
-    }
-
-  }
-
-  template <typename Base>
-  inline
-  void
-  D4FunctionParser::basic_symbol<Base>::move (basic_symbol& s)
-  {
-    super_type::move(s);
-      switch (this->type_get ())
-    {
-      case 7: // "function name"
-      case 44: // fname
-        value.move< D4Function > (s.value);
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        value.move< D4RValue* > (s.value);
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        value.move< D4RValueList* > (s.value);
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        value.move< std::string > (s.value);
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        value.move< std::vector<dods_byte>* > (s.value);
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        value.move< std::vector<dods_float32>* > (s.value);
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        value.move< std::vector<dods_float64>* > (s.value);
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        value.move< std::vector<dods_int16>* > (s.value);
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        value.move< std::vector<dods_int32>* > (s.value);
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        value.move< std::vector<dods_int64>* > (s.value);
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        value.move< std::vector<dods_int8>* > (s.value);
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        value.move< std::vector<dods_uint16>* > (s.value);
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        value.move< std::vector<dods_uint32>* > (s.value);
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        value.move< std::vector<dods_uint64>* > (s.value);
-        break;
-
-      default:
-        break;
-    }
-
-    location = s.location;
-  }
-
-  // by_type.
-  inline
-  D4FunctionParser::by_type::by_type ()
-     : type (empty)
-  {}
-
-  inline
-  D4FunctionParser::by_type::by_type (const by_type& other)
-    : type (other.type)
-  {}
-
-  inline
-  D4FunctionParser::by_type::by_type (token_type t)
-    : type (yytranslate_ (t))
-  {}
-
-  inline
-  void
-  D4FunctionParser::by_type::move (by_type& that)
-  {
-    type = that.type;
-    that.type = empty;
-  }
-
-  inline
-  int
-  D4FunctionParser::by_type::type_get () const
-  {
-    return type;
-  }
-  // Implementation of make_symbol for each symbol type.
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_END (const location_type& l)
-  {
-    return symbol_type (token::END, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_WORD (const std::string& v, const location_type& l)
-  {
-    return symbol_type (token::WORD, v, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_STRING (const std::string& v, const location_type& l)
-  {
-    return symbol_type (token::STRING, v, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_SEMICOLON (const location_type& l)
-  {
-    return symbol_type (token::SEMICOLON, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_COLON (const location_type& l)
-  {
-    return symbol_type (token::COLON, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_LPAREN (const location_type& l)
-  {
-    return symbol_type (token::LPAREN, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_RPAREN (const location_type& l)
-  {
-    return symbol_type (token::RPAREN, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_COMMA (const location_type& l)
-  {
-    return symbol_type (token::COMMA, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_GROUP_SEP (const location_type& l)
-  {
-    return symbol_type (token::GROUP_SEP, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_PATH_SEP (const location_type& l)
-  {
-    return symbol_type (token::PATH_SEP, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_BYTE (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_BYTE, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_UINT8 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_UINT8, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_INT8 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_INT8, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_UINT16 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_UINT16, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_INT16 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_INT16, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_UINT32 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_UINT32, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_INT32 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_INT32, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_UINT64 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_UINT64, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_INT64 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_INT64, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_FLOAT32 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_FLOAT32, l);
-
-  }
-
-  D4FunctionParser::symbol_type
-  D4FunctionParser::make_DOLLAR_FLOAT64 (const location_type& l)
-  {
-    return symbol_type (token::DOLLAR_FLOAT64, l);
-
-  }
-
-
-
-  // by_state.
-  inline
-  D4FunctionParser::by_state::by_state ()
-    : state (empty)
-  {}
-
-  inline
-  D4FunctionParser::by_state::by_state (const by_state& other)
-    : state (other.state)
-  {}
-
-  inline
-  void
-  D4FunctionParser::by_state::move (by_state& that)
-  {
-    state = that.state;
-    that.state = empty;
-  }
-
-  inline
-  D4FunctionParser::by_state::by_state (state_type s)
-    : state (s)
-  {}
-
-  inline
-  D4FunctionParser::symbol_number_type
-  D4FunctionParser::by_state::type_get () const
-  {
-    return state == empty ? 0 : yystos_[state];
-  }
-
-  inline
-  D4FunctionParser::stack_symbol_type::stack_symbol_type ()
-  {}
-
-
-  inline
-  D4FunctionParser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
-    : super_type (s, that.location)
-  {
-      switch (that.type_get ())
-    {
-      case 7: // "function name"
-      case 44: // fname
-        value.move< D4Function > (that.value);
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        value.move< D4RValue* > (that.value);
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        value.move< D4RValueList* > (that.value);
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        value.move< std::string > (that.value);
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        value.move< std::vector<dods_byte>* > (that.value);
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        value.move< std::vector<dods_float32>* > (that.value);
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        value.move< std::vector<dods_float64>* > (that.value);
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        value.move< std::vector<dods_int16>* > (that.value);
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        value.move< std::vector<dods_int32>* > (that.value);
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        value.move< std::vector<dods_int64>* > (that.value);
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        value.move< std::vector<dods_int8>* > (that.value);
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        value.move< std::vector<dods_uint16>* > (that.value);
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        value.move< std::vector<dods_uint32>* > (that.value);
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        value.move< std::vector<dods_uint64>* > (that.value);
-        break;
-
-      default:
-        break;
-    }
-
-    // that is emptied.
-    that.type = empty;
-  }
-
-  inline
-  D4FunctionParser::stack_symbol_type&
-  D4FunctionParser::stack_symbol_type::operator= (const stack_symbol_type& that)
-  {
-    state = that.state;
-      switch (that.type_get ())
-    {
-      case 7: // "function name"
-      case 44: // fname
-        value.copy< D4Function > (that.value);
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        value.copy< D4RValue* > (that.value);
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        value.copy< D4RValueList* > (that.value);
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        value.copy< std::string > (that.value);
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        value.copy< std::vector<dods_byte>* > (that.value);
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        value.copy< std::vector<dods_float32>* > (that.value);
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        value.copy< std::vector<dods_float64>* > (that.value);
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        value.copy< std::vector<dods_int16>* > (that.value);
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        value.copy< std::vector<dods_int32>* > (that.value);
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        value.copy< std::vector<dods_int64>* > (that.value);
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        value.copy< std::vector<dods_int8>* > (that.value);
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        value.copy< std::vector<dods_uint16>* > (that.value);
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        value.copy< std::vector<dods_uint32>* > (that.value);
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        value.copy< std::vector<dods_uint64>* > (that.value);
-        break;
-
-      default:
-        break;
-    }
-
-    location = that.location;
-    return *this;
-  }
-
-
-  template <typename Base>
-  inline
-  void
-  D4FunctionParser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
-  {
-    if (yymsg)
-      YY_SYMBOL_PRINT (yymsg, yysym);
-  }
-
-#if YYDEBUG
-  template <typename Base>
-  void
-  D4FunctionParser::yy_print_ (std::ostream& yyo,
-                                     const basic_symbol<Base>& yysym) const
-  {
-    std::ostream& yyoutput = yyo;
-    YYUSE (yyoutput);
-    symbol_number_type yytype = yysym.type_get ();
-    yyo << (yytype < yyntokens_ ? "token" : "nterm")
-        << ' ' << yytname_[yytype] << " ("
-        << yysym.location << ": ";
-    YYUSE (yytype);
-    yyo << ')';
-  }
-#endif
-
-  inline
-  void
-  D4FunctionParser::yypush_ (const char* m, state_type s, symbol_type& sym)
-  {
-    stack_symbol_type t (s, sym);
-    yypush_ (m, t);
-  }
-
-  inline
-  void
-  D4FunctionParser::yypush_ (const char* m, stack_symbol_type& s)
-  {
-    if (m)
-      YY_SYMBOL_PRINT (m, s);
-    yystack_.push (s);
-  }
-
-  inline
-  void
-  D4FunctionParser::yypop_ (unsigned int n)
-  {
-    yystack_.pop (n);
-  }
-
-#if YYDEBUG
-  std::ostream&
-  D4FunctionParser::debug_stream () const
-  {
-    return *yycdebug_;
-  }
-
-  void
-  D4FunctionParser::set_debug_stream (std::ostream& o)
-  {
-    yycdebug_ = &o;
-  }
-
-
-  D4FunctionParser::debug_level_type
-  D4FunctionParser::debug_level () const
-  {
-    return yydebug_;
-  }
-
-  void
-  D4FunctionParser::set_debug_level (debug_level_type l)
-  {
-    yydebug_ = l;
-  }
-#endif // YYDEBUG
-
-  inline D4FunctionParser::state_type
-  D4FunctionParser::yy_lr_goto_state_ (state_type yystate, int yylhs)
-  {
-    int yyr = yypgoto_[yylhs - yyntokens_] + yystate;
-    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
-      return yytable_[yyr];
-    else
-      return yydefgoto_[yylhs - yyntokens_];
-  }
-
-  inline bool
-  D4FunctionParser::yy_pact_value_is_default_ (int yyvalue)
-  {
-    return yyvalue == yypact_ninf_;
-  }
-
-  inline bool
-  D4FunctionParser::yy_table_value_is_error_ (int yyvalue)
-  {
-    return yyvalue == yytable_ninf_;
-  }
-
-  int
-  D4FunctionParser::parse ()
-  {
-    /// Whether yyla contains a lookahead.
-    bool yyempty = true;
-
-    // State.
-    int yyn;
-    int yylen = 0;
-
-    // Error handling.
-    int yynerrs_ = 0;
-    int yyerrstatus_ = 0;
-
-    /// The lookahead symbol.
-    symbol_type yyla;
-
-    /// The locations where the error started and ended.
-    stack_symbol_type yyerror_range[3];
-
-    /// $$ and @$.
-    stack_symbol_type yylhs;
-
-    /// The return value of parse ().
-    int yyresult;
-
-    // FIXME: This shoud be completely indented.  It is not yet to
-    // avoid gratuitous conflicts when merging into the master branch.
-    try
-      {
-    YYCDEBUG << "Starting parse" << std::endl;
-
-
-    // User initialization code.
-    #line 69 "d4_function_parser.yy" // lalr1.cc:730
-{
-    // Initialize the initial location. This is printed when the parser builds
-    // its own error messages - when the parse fails as opposed to when the 
-    // function(s) name(s) a missing variable, ...
-
-    yyla.location.initialize (evaluator.expression());
-}
-
-#line 1287 "d4_function_parser.tab.cc" // lalr1.cc:730
-
-    /* Initialize the stack.  The initial state will be set in
-       yynewstate, since the latter expects the semantical and the
-       location values to have been already stored, initialize these
-       stacks with a primary value.  */
-    yystack_.clear ();
-    yypush_ (YY_NULL, 0, yyla);
-
-    // A new symbol was pushed on the stack.
-  yynewstate:
-    YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
-
-    // Accept?
-    if (yystack_[0].state == yyfinal_)
-      goto yyacceptlab;
-
-    goto yybackup;
-
-    // Backup.
-  yybackup:
-
-    // Try to take a decision without lookahead.
-    yyn = yypact_[yystack_[0].state];
-    if (yy_pact_value_is_default_ (yyn))
-      goto yydefault;
-
-    // Read a lookahead token.
-    if (yyempty)
-      {
-        YYCDEBUG << "Reading a token: ";
-        try
-          {
-            yyla.type = yytranslate_ (yylex (&yyla.value, &yyla.location, scanner, evaluator));
-          }
-        catch (const syntax_error& yyexc)
-          {
-            error (yyexc);
-            goto yyerrlab1;
-          }
-        yyempty = false;
-      }
-    YY_SYMBOL_PRINT ("Next token is", yyla);
-
-    /* If the proper action on seeing token YYLA.TYPE is to reduce or
-       to detect an error, take that action.  */
-    yyn += yyla.type_get ();
-    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
-      goto yydefault;
-
-    // Reduce or error.
-    yyn = yytable_[yyn];
-    if (yyn <= 0)
-      {
-        if (yy_table_value_is_error_ (yyn))
-          goto yyerrlab;
-        yyn = -yyn;
-        goto yyreduce;
-      }
-
-    // Discard the token being shifted.
-    yyempty = true;
-
-    // Count tokens shifted since error; after three, turn off error status.
-    if (yyerrstatus_)
-      --yyerrstatus_;
-
-    // Shift the lookahead token.
-    yypush_ ("Shifting", yyn, yyla);
-    goto yynewstate;
-
-  /*-----------------------------------------------------------.
-  | yydefault -- do the default action for the current state.  |
-  `-----------------------------------------------------------*/
-  yydefault:
-    yyn = yydefact_[yystack_[0].state];
-    if (yyn == 0)
-      goto yyerrlab;
-    goto yyreduce;
-
-  /*-----------------------------.
-  | yyreduce -- Do a reduction.  |
-  `-----------------------------*/
-  yyreduce:
-    yylen = yyr2_[yyn];
-    yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
-    /* Variants are always initialized to an empty instance of the
-       correct type. The default $$=$1 action is NOT applied when using
-       variants.  */
-      switch (yyr1_[yyn])
-    {
-      case 7: // "function name"
-      case 44: // fname
-        yylhs.value.build< D4Function > ();
-        break;
-
-      case 5: // "argument"
-      case 6: // "function"
-      case 8: // "variable or constant"
-      case 9: // "array constant"
-      case 43: // function
-      case 46: // arg
-      case 47: // variable_or_constant
-      case 48: // array_constant
-        yylhs.value.build< D4RValue* > ();
-        break;
-
-      case 3: // "functions"
-      case 4: // "arguments"
-      case 42: // functions
-      case 45: // args
-        yylhs.value.build< D4RValueList* > ();
-        break;
-
-      case 20: // "word"
-      case 21: // "string"
-      case 60: // id
-      case 61: // group
-      case 62: // path
-      case 63: // name
-        yylhs.value.build< std::string > ();
-        break;
-
-      case 10: // "fast byte arg list"
-      case 50: // fast_byte_arg_list
-        yylhs.value.build< std::vector<dods_byte>* > ();
-        break;
-
-      case 18: // "fast float32 arg list"
-      case 58: // fast_float32_arg_list
-        yylhs.value.build< std::vector<dods_float32>* > ();
-        break;
-
-      case 19: // "fast float64 arg list"
-      case 59: // fast_float64_arg_list
-        yylhs.value.build< std::vector<dods_float64>* > ();
-        break;
-
-      case 13: // "fast int16 arg list"
-      case 53: // fast_int16_arg_list
-        yylhs.value.build< std::vector<dods_int16>* > ();
-        break;
-
-      case 15: // "fast int32 arg list"
-      case 55: // fast_int32_arg_list
-        yylhs.value.build< std::vector<dods_int32>* > ();
-        break;
-
-      case 17: // "fast int64 arg list"
-      case 57: // fast_int64_arg_list
-        yylhs.value.build< std::vector<dods_int64>* > ();
-        break;
-
-      case 11: // "fast int8 arg list"
-      case 51: // fast_int8_arg_list
-        yylhs.value.build< std::vector<dods_int8>* > ();
-        break;
-
-      case 12: // "fast uint16 arg list"
-      case 52: // fast_uint16_arg_list
-        yylhs.value.build< std::vector<dods_uint16>* > ();
-        break;
-
-      case 14: // "fast uint32 arg list"
-      case 54: // fast_uint32_arg_list
-        yylhs.value.build< std::vector<dods_uint32>* > ();
-        break;
-
-      case 16: // "fast uint64 arg list"
-      case 56: // fast_uint64_arg_list
-        yylhs.value.build< std::vector<dods_uint64>* > ();
-        break;
-
-      default:
-        break;
-    }
-
-
-    // Compute the default @$.
-    {
-      slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
-      YYLLOC_DEFAULT (yylhs.location, slice, yylen);
-    }
-
-    // Perform the reduction.
-    YY_REDUCE_PRINT (yyn);
-    try
-      {
-        switch (yyn)
-          {
-  case 2:
-#line 156 "d4_function_parser.yy" // lalr1.cc:846
-    { 
-    evaluator.set_result(yystack_[0].value.as< D4RValueList* > ()); 
-}
-#line 1482 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 3:
-#line 162 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValueList* > () = new D4RValueList(yystack_[0].value.as< D4RValue* > ()); 
-}
-#line 1490 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 4:
-#line 166 "d4_function_parser.yy" // lalr1.cc:846
-    { 
-    yystack_[2].value.as< D4RValueList* > ()->add_rvalue(yystack_[0].value.as< D4RValue* > ());
-    yylhs.value.as< D4RValueList* > () = yystack_[2].value.as< D4RValueList* > (); 
-}
-#line 1499 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 5:
-#line 173 "d4_function_parser.yy" // lalr1.cc:846
-    { 
-    yylhs.value.as< D4RValue* > () = new D4RValue(yystack_[3].value.as< D4Function > (), yystack_[1].value.as< D4RValueList* > ()); // Build a D4RValue from a D4Function pointer and a D4RValueList 
-}
-#line 1507 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 6:
-#line 179 "d4_function_parser.yy" // lalr1.cc:846
-    { 
-    D4Function f;
-    if (!evaluator.sf_list()->find_function(yystack_[0].value.as< std::string > (), &f)) {
-        // ...cloud use @1.{first,last}_column in these error messages.
-        throw Error("'" + yystack_[0].value.as< std::string > () + "' is not a registered DAP4 server function.");
-    }
-
-    yylhs.value.as< D4Function > () = f;
-}
-#line 1521 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 7:
-#line 191 "d4_function_parser.yy" // lalr1.cc:846
-    { 
-    yylhs.value.as< D4RValueList* > () = new D4RValueList(yystack_[0].value.as< D4RValue* > ()); // build a D4RValueList from the D4RValue
-}
-#line 1529 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 8:
-#line 195 "d4_function_parser.yy" // lalr1.cc:846
-    { 
-    yystack_[2].value.as< D4RValueList* > ()->add_rvalue(yystack_[0].value.as< D4RValue* > ());
-    yylhs.value.as< D4RValueList* > () = yystack_[2].value.as< D4RValueList* > (); // Append the D4RValue ($3) to the D4RValueList ($1), then return
-}
-#line 1538 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 9:
-#line 202 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = yystack_[0].value.as< D4RValue* > ();
-}
-#line 1546 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 10:
-#line 206 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = yystack_[0].value.as< D4RValue* > ();
-}
-#line 1554 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 11:
-#line 210 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = yystack_[0].value.as< D4RValue* > ();
-}
-#line 1562 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 12:
-#line 216 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    D4RValue *rvalue = evaluator.build_rvalue(yystack_[0].value.as< std::string > ());
-    if (!rvalue) {
-        throw Error("'" + yystack_[0].value.as< std::string > () + "' is not a variable, number or string.");
-    }
-    
-    yylhs.value.as< D4RValue* > () = rvalue;
-}
-#line 1575 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 13:
-#line 228 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_byte>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_byte>* > ();
-}
-#line 1584 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 14:
-#line 234 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_byte>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_byte>* > ();
-}
-#line 1593 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 15:
-#line 240 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int8>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_int8>* > ();
-}
-#line 1602 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 16:
-#line 246 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_uint16>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_uint16>* > ();
-}
-#line 1611 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 17:
-#line 252 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int16>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_int16>* > ();
-}
-#line 1620 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 18:
-#line 258 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_uint32>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_uint32>* > ();
-}
-#line 1629 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 19:
-#line 264 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int32>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_int32>* > ();
-}
-#line 1638 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 20:
-#line 270 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_uint64>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_uint64>* > ();
-}
-#line 1647 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 21:
-#line 276 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int64>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_int64>* > ();
-}
-#line 1656 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 22:
-#line 282 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_float32>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_float32>* > ();
-}
-#line 1665 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 23:
-#line 288 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_float64>* > ()));
-    delete yystack_[1].value.as< std::vector<dods_float64>* > ();
-}
-#line 1674 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 24:
-#line 300 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    evaluator.set_arg_length_hint(get_ull(yystack_[0].value.as< std::string > ().c_str()));
-}
-#line 1682 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 25:
-#line 306 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_byte>* > () = evaluator.init_arg_list(dods_byte(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1690 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 26:
-#line 310 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_byte>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_byte>* > () = yystack_[2].value.as< std::vector<dods_byte>* > ();
-}
-#line 1699 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 27:
-#line 317 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_int8>* > () = evaluator.init_arg_list(dods_int8(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1707 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 28:
-#line 321 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_int8>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_int8>* > () = yystack_[2].value.as< std::vector<dods_int8>* > ();
-}
-#line 1716 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 29:
-#line 328 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_uint16>* > () = evaluator.init_arg_list(dods_uint16(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1724 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 30:
-#line 332 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_uint16>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_uint16>* > () = yystack_[2].value.as< std::vector<dods_uint16>* > ();
-}
-#line 1733 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 31:
-#line 339 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_int16>* > () = evaluator.init_arg_list(dods_int16(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1741 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 32:
-#line 343 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_int16>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_int16>* > () = yystack_[2].value.as< std::vector<dods_int16>* > ();
-}
-#line 1750 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 33:
-#line 350 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_uint32>* > () = evaluator.init_arg_list(dods_uint32(strtoul(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1758 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 34:
-#line 354 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_uint32>* > ()->push_back(strtoul(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_uint32>* > () = yystack_[2].value.as< std::vector<dods_uint32>* > ();
-}
-#line 1767 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 35:
-#line 360 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_int32>* > () = evaluator.init_arg_list(dods_int32(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1775 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 36:
-#line 364 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_int32>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_int32>* > () = yystack_[2].value.as< std::vector<dods_int32>* > ();
-}
-#line 1784 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 37:
-#line 371 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_uint64>* > () = evaluator.init_arg_list(dods_uint64(strtoull(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1792 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 38:
-#line 375 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_uint64>* > ()->push_back(strtoull(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_uint64>* > () = yystack_[2].value.as< std::vector<dods_uint64>* > ();
-}
-#line 1801 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 39:
-#line 382 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_int64>* > () = evaluator.init_arg_list(dods_int64(strtoll(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
-}
-#line 1809 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 40:
-#line 386 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_int64>* > ()->push_back(strtoll(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
-    yylhs.value.as< std::vector<dods_int64>* > () = yystack_[2].value.as< std::vector<dods_int64>* > ();
-}
-#line 1818 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 41:
-#line 396 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_float32>* > () = evaluator.init_arg_list(dods_float32(strtof(yystack_[0].value.as< std::string > ().c_str(), 0)));
-}
-#line 1826 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 42:
-#line 400 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_float32>* > ()->push_back(strtof(yystack_[0].value.as< std::string > ().c_str(), 0));
-    yylhs.value.as< std::vector<dods_float32>* > () = yystack_[2].value.as< std::vector<dods_float32>* > ();
-}
-#line 1835 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 43:
-#line 407 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::vector<dods_float64>* > () = evaluator.init_arg_list(dods_float64(strtod(yystack_[0].value.as< std::string > ().c_str(), 0)));
-}
-#line 1843 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 44:
-#line 411 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::vector<dods_float64>* > ()->push_back(strtod(yystack_[0].value.as< std::string > ().c_str(), 0));
-    yylhs.value.as< std::vector<dods_float64>* > () = yystack_[2].value.as< std::vector<dods_float64>* > ();
-}
-#line 1852 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 45:
-#line 418 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > () = yystack_[0].value.as< std::string > ();
-}
-#line 1860 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 46:
-#line 422 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ().append("/");
-    yylhs.value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-}
-#line 1869 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 47:
-#line 427 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::string > ().append("/");
-    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
-}
-#line 1879 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 48:
-#line 435 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ().append("/");
-    yylhs.value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-}
-#line 1888 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 49:
-#line 440 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::string > ().append(".");
-    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
-}
-#line 1898 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 50:
-#line 448 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > () = yystack_[0].value.as< std::string > ();
-}
-#line 1906 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 51:
-#line 452 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yystack_[2].value.as< std::string > ().append(".");
-    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
-    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
-}
-#line 1916 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 52:
-#line 463 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ()=yystack_[0].value.as< std::string > ();
-}
-#line 1924 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-  case 53:
-#line 467 "d4_function_parser.yy" // lalr1.cc:846
-    {
-    yylhs.value.as< std::string > ()=yystack_[0].value.as< std::string > ();
-}
-#line 1932 "d4_function_parser.tab.cc" // lalr1.cc:846
-    break;
-
-
-#line 1936 "d4_function_parser.tab.cc" // lalr1.cc:846
-          default:
-            break;
-          }
-      }
-    catch (const syntax_error& yyexc)
-      {
-        error (yyexc);
-        YYERROR;
-      }
-    YY_SYMBOL_PRINT ("-> $$ =", yylhs);
-    yypop_ (yylen);
-    yylen = 0;
-    YY_STACK_PRINT ();
-
-    // Shift the result of the reduction.
-    yypush_ (YY_NULL, yylhs);
-    goto yynewstate;
-
-  /*--------------------------------------.
-  | yyerrlab -- here on detecting error.  |
-  `--------------------------------------*/
-  yyerrlab:
-    // If not already recovering from an error, report this error.
-    if (!yyerrstatus_)
-      {
-        ++yynerrs_;
-        error (yyla.location, yysyntax_error_ (yystack_[0].state,
-                                           yyempty ? yyempty_ : yyla.type_get ()));
-      }
-
-
-    yyerror_range[1].location = yyla.location;
-    if (yyerrstatus_ == 3)
-      {
-        /* If just tried and failed to reuse lookahead token after an
-           error, discard it.  */
-
-        // Return failure if at end of input.
-        if (yyla.type_get () == yyeof_)
-          YYABORT;
-        else if (!yyempty)
-          {
-            yy_destroy_ ("Error: discarding", yyla);
-            yyempty = true;
-          }
-      }
-
-    // Else will try to reuse lookahead token after shifting the error token.
-    goto yyerrlab1;
-
-
-  /*---------------------------------------------------.
-  | yyerrorlab -- error raised explicitly by YYERROR.  |
-  `---------------------------------------------------*/
-  yyerrorlab:
-
-    /* Pacify compilers like GCC when the user code never invokes
-       YYERROR and the label yyerrorlab therefore never appears in user
-       code.  */
-    if (false)
-      goto yyerrorlab;
-    yyerror_range[1].location = yystack_[yylen - 1].location;
-    /* $$ was initialized before running the user action.  */
-    YY_SYMBOL_PRINT ("Error: discarding", yylhs);
-    yylhs.~stack_symbol_type();
-    /* Do not reclaim the symbols of the rule whose action triggered
-       this YYERROR.  */
-    yypop_ (yylen);
-    yylen = 0;
-    goto yyerrlab1;
-
-  /*-------------------------------------------------------------.
-  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
-  `-------------------------------------------------------------*/
-  yyerrlab1:
-    yyerrstatus_ = 3;   // Each real token shifted decrements this.
-    {
-      stack_symbol_type error_token;
-      for (;;)
-        {
-          yyn = yypact_[yystack_[0].state];
-          if (!yy_pact_value_is_default_ (yyn))
-            {
-              yyn += yyterror_;
-              if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
-                {
-                  yyn = yytable_[yyn];
-                  if (0 < yyn)
-                    break;
-                }
-            }
-
-          // Pop the current state because it cannot handle the error token.
-          if (yystack_.size () == 1)
-            YYABORT;
-
-          yyerror_range[1].location = yystack_[0].location;
-          yy_destroy_ ("Error: popping", yystack_[0]);
-          yypop_ ();
-          YY_STACK_PRINT ();
-        }
-
-      yyerror_range[2].location = yyla.location;
-      YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
-
-      // Shift the error token.
-      error_token.state = yyn;
-      yypush_ ("Shifting", error_token);
-    }
-    goto yynewstate;
-
-    // Accept.
-  yyacceptlab:
-    yyresult = 0;
-    goto yyreturn;
-
-    // Abort.
-  yyabortlab:
-    yyresult = 1;
-    goto yyreturn;
-
-  yyreturn:
-    if (!yyempty)
-      yy_destroy_ ("Cleanup: discarding lookahead", yyla);
-
-    /* Do not reclaim the symbols of the rule whose action triggered
-       this YYABORT or YYACCEPT.  */
-    yypop_ (yylen);
-    while (1 < yystack_.size ())
-      {
-        yy_destroy_ ("Cleanup: popping", yystack_[0]);
-        yypop_ ();
-      }
-
-    return yyresult;
-  }
-    catch (...)
-      {
-        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
-                 << std::endl;
-        // Do not try to display the values of the reclaimed symbols,
-        // as their printer might throw an exception.
-        if (!yyempty)
-          yy_destroy_ (YY_NULL, yyla);
-
-        while (1 < yystack_.size ())
-          {
-            yy_destroy_ (YY_NULL, yystack_[0]);
-            yypop_ ();
-          }
-        throw;
-      }
-  }
-
-  void
-  D4FunctionParser::error (const syntax_error& yyexc)
-  {
-    error (yyexc.location, yyexc.what());
-  }
-
-  // Generate an error message.
-  std::string
-  D4FunctionParser::yysyntax_error_ (state_type yystate, symbol_number_type yytoken) const
-  {
-    std::string yyres;
-    // Number of reported tokens (one for the "unexpected", one per
-    // "expected").
-    size_t yycount = 0;
-    // Its maximum.
-    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-    // Arguments of yyformat.
-    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-
-    /* There are many possibilities here to consider:
-       - If this state is a consistent state with a default action, then
-         the only way this function was invoked is if the default action
-         is an error action.  In that case, don't check for expected
-         tokens because there are none.
-       - The only way there can be no lookahead present (in yytoken) is
-         if this state is a consistent state with a default action.
-         Thus, detecting the absence of a lookahead is sufficient to
-         determine that there is no unexpected or expected token to
-         report.  In that case, just report a simple "syntax error".
-       - Don't assume there isn't a lookahead just because this state is
-         a consistent state with a default action.  There might have
-         been a previous inconsistent state, consistent state with a
-         non-default action, or user semantic action that manipulated
-         yyla.  (However, yyla is currently not documented for users.)
-       - Of course, the expected token list depends on states to have
-         correct lookahead information, and it depends on the parser not
-         to perform extra reductions after fetching a lookahead from the
-         scanner and before detecting a syntax error.  Thus, state
-         merging (from LALR or IELR) and default reductions corrupt the
-         expected token list.  However, the list is correct for
-         canonical LR with one exception: it will still contain any
-         token that will not be accepted due to an error action in a
-         later state.
-    */
-    if (yytoken != yyempty_)
-      {
-        yyarg[yycount++] = yytname_[yytoken];
-        int yyn = yypact_[yystate];
-        if (!yy_pact_value_is_default_ (yyn))
-          {
-            /* Start YYX at -YYN if negative to avoid negative indexes in
-               YYCHECK.  In other words, skip the first -YYN actions for
-               this state because they are default actions.  */
-            int yyxbegin = yyn < 0 ? -yyn : 0;
-            // Stay within bounds of both yycheck and yytname.
-            int yychecklim = yylast_ - yyn + 1;
-            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
-            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
-              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
-                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
-                {
-                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                    {
-                      yycount = 1;
-                      break;
-                    }
-                  else
-                    yyarg[yycount++] = yytname_[yyx];
-                }
-          }
-      }
-
-    char const* yyformat = YY_NULL;
-    switch (yycount)
-      {
-#define YYCASE_(N, S)                         \
-        case N:                               \
-          yyformat = S;                       \
-        break
-        YYCASE_(0, YY_("syntax error"));
-        YYCASE_(1, YY_("syntax error, unexpected %s"));
-        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-#undef YYCASE_
-      }
-
-    // Argument number.
-    size_t yyi = 0;
-    for (char const* yyp = yyformat; *yyp; ++yyp)
-      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
-        {
-          yyres += yytnamerr_ (yyarg[yyi++]);
-          ++yyp;
-        }
-      else
-        yyres += *yyp;
-    return yyres;
-  }
-
-
-  const signed char D4FunctionParser::yypact_ninf_ = -20;
-
-  const signed char D4FunctionParser::yytable_ninf_ = -50;
-
-  const signed char
-  D4FunctionParser::yypact_[] =
-  {
-     -10,   -20,     8,    10,   -20,    12,   -20,   -10,   -18,   -20,
-      37,   -20,   -16,    38,    39,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,   -20,   -19,   -20,   -20,   -20,   -20,
-      51,    52,   -20,   -20,    52,    54,    55,    55,    55,    55,
-      55,    55,    55,    55,    55,    55,    55,   -20,   -18,   -16,
-     -16,   -20,    53,    56,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,   -20,    52,    68,   -20,    57,    57,    71,
-      72,    73,    74,    76,    77,    78,   -16,   -16,   -20,     9,
-      16,   -20,    18,   -20,    20,   -20,    22,   -20,    24,   -20,
-      26,   -20,    28,   -20,    30,    32,    52,    34,    52,   -20,
-      79,   -20,   -20,    80,   -20,    81,   -20,    82,   -20,    83,
-     -20,    84,   -20,    86,   -20,    88,   -20,   -16,   -20,   -16,
-     -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,    52,    52
-  };
-
-  const unsigned char
-  D4FunctionParser::yydefact_[] =
-  {
-       0,     6,     0,     2,     3,     0,     1,     0,     0,     4,
-      52,    53,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     9,     0,     7,    10,    11,    12,
-       0,    45,    50,    52,    46,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     5,     0,     0,
-       0,    24,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     8,    47,    50,    51,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    25,     0,
-       0,    27,     0,    29,     0,    31,     0,    33,     0,    35,
-       0,    37,     0,    39,     0,     0,    41,     0,    43,    13,
-       0,    14,    15,     0,    16,     0,    17,     0,    18,     0,
-      19,     0,    20,     0,    21,     0,    22,     0,    23,     0,
-      26,    28,    30,    32,    34,    36,    38,    40,    42,    44
-  };
-
-  const signed char
-  D4FunctionParser::yypgoto_[] =
-  {
-     -20,   -20,   -20,    33,   -20,   -20,    69,   -20,   -20,   -15,
-      41,   -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,
-     -20,   -20,   -12,   -11
-  };
-
-  const signed char
-  D4FunctionParser::yydefgoto_[] =
-  {
-      -1,     2,     3,    24,     5,    25,    26,    27,    28,    52,
-      79,    82,    84,    86,    88,    90,    92,    94,    95,    97,
-      29,    30,    31,    32
-  };
-
-  const short int
-  D4FunctionParser::yytable_[] =
-  {
-      34,    35,    10,    11,    33,    11,    47,    48,     6,    12,
-       1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,     7,     4,    99,   100,     8,    64,    65,    66,
-       9,   101,   100,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,    -6,    36,    37,    96,    98,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    51,    67,    78,    49,    68,
-      50,   -48,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    81,    83,    85,    87,   -49,    89,    91,    93,   120,
-     121,   122,   123,   124,   125,   128,   126,   129,   127,    80,
-       0,     0,     0,     0,     0,     0,     0,    63
-  };
-
-  const signed char
-  D4FunctionParser::yycheck_[] =
-  {
-      12,    12,    20,    21,    20,    21,    25,    26,     0,    27,
-      20,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    22,     0,    25,    26,    24,    49,    49,    50,
-       7,    25,    26,    25,    26,    25,    26,    25,    26,    25,
-      26,    25,    26,    25,    26,    25,    26,    25,    26,    25,
-      26,    24,    24,    24,    76,    77,    24,    24,    24,    24,
-      24,    24,    24,    24,    24,    20,    23,    20,    27,    23,
-      28,    27,    23,    23,    23,    23,    23,    23,    23,    23,
-      23,    20,    20,    20,    20,    27,    20,    20,    20,    20,
-      20,    20,    20,    20,    20,   117,    20,   119,    20,    68,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    48
-  };
-
-  const unsigned char
-  D4FunctionParser::yystos_[] =
-  {
-       0,    20,    41,    42,    43,    44,     0,    22,    24,    43,
-      20,    21,    27,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    43,    45,    46,    47,    48,    60,
-      61,    62,    63,    20,    62,    63,    24,    24,    24,    24,
-      24,    24,    24,    24,    24,    24,    24,    25,    26,    27,
-      28,    20,    49,    49,    49,    49,    49,    49,    49,    49,
-      49,    49,    49,    46,    62,    63,    63,    23,    23,    23,
-      23,    23,    23,    23,    23,    23,    23,    23,    20,    50,
-      50,    20,    51,    20,    52,    20,    53,    20,    54,    20,
-      55,    20,    56,    20,    57,    58,    62,    59,    62,    25,
-      26,    25,    25,    26,    25,    26,    25,    26,    25,    26,
-      25,    26,    25,    26,    25,    26,    25,    26,    25,    26,
-      20,    20,    20,    20,    20,    20,    20,    20,    62,    62
-  };
-
-  const unsigned char
-  D4FunctionParser::yyr1_[] =
-  {
-       0,    40,    41,    42,    42,    43,    44,    45,    45,    46,
-      46,    46,    47,    48,    48,    48,    48,    48,    48,    48,
-      48,    48,    48,    48,    49,    50,    50,    51,    51,    52,
-      52,    53,    53,    54,    54,    55,    55,    56,    56,    57,
-      57,    58,    58,    59,    59,    60,    60,    60,    61,    61,
-      62,    62,    63,    63
-  };
-
-  const unsigned char
-  D4FunctionParser::yyr2_[] =
-  {
-       0,     2,     1,     1,     3,     4,     1,     1,     3,     1,
-       1,     1,     1,     6,     6,     6,     6,     6,     6,     6,
-       6,     6,     6,     6,     1,     1,     3,     1,     3,     1,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     3,     1,     3,     1,     2,     3,     2,     3,
-       1,     3,     1,     1
-  };
-
-
-
-  // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-  // First, the terminals, then, starting at \a yyntokens_, nonterminals.
-  const char*
-  const D4FunctionParser::yytname_[] =
-  {
-  "\"end of file\"", "error", "$undefined", "\"functions\"",
-  "\"arguments\"", "\"argument\"", "\"function\"", "\"function name\"",
-  "\"variable or constant\"", "\"array constant\"",
-  "\"fast byte arg list\"", "\"fast int8 arg list\"",
-  "\"fast uint16 arg list\"", "\"fast int16 arg list\"",
-  "\"fast uint32 arg list\"", "\"fast int32 arg list\"",
-  "\"fast uint64 arg list\"", "\"fast int64 arg list\"",
-  "\"fast float32 arg list\"", "\"fast float64 arg list\"", "\"word\"",
-  "\"string\"", "\";\"", "\":\"", "\"(\"", "\")\"", "\",\"", "\"/\"",
-  "\".\"", "\"$Byte\"", "\"$UInt8\"", "\"$Int8\"", "\"$UInt16\"",
-  "\"$Int16\"", "\"$UInt32\"", "\"$Int32\"", "\"$UInt64\"", "\"$Int64\"",
-  "\"$Float32\"", "\"$Float64\"", "$accept", "program", "functions",
-  "function", "fname", "args", "arg", "variable_or_constant",
-  "array_constant", "arg_length_hint", "fast_byte_arg_list",
-  "fast_int8_arg_list", "fast_uint16_arg_list", "fast_int16_arg_list",
-  "fast_uint32_arg_list", "fast_int32_arg_list", "fast_uint64_arg_list",
-  "fast_int64_arg_list", "fast_float32_arg_list", "fast_float64_arg_list",
-  "id", "group", "path", "name", YY_NULL
-  };
-
-#if YYDEBUG
-  const unsigned short int
-  D4FunctionParser::yyrline_[] =
-  {
-       0,   155,   155,   161,   165,   172,   178,   190,   194,   201,
-     205,   209,   215,   227,   233,   239,   245,   251,   257,   263,
-     269,   275,   281,   287,   299,   305,   309,   316,   320,   327,
-     331,   338,   342,   349,   353,   359,   363,   370,   374,   381,
-     385,   395,   399,   406,   410,   417,   421,   426,   434,   439,
-     447,   451,   462,   466
-  };
-
-  // Print the state stack on the debug stream.
-  void
-  D4FunctionParser::yystack_print_ ()
-  {
-    *yycdebug_ << "Stack now";
-    for (stack_type::const_iterator
-           i = yystack_.begin (),
-           i_end = yystack_.end ();
-         i != i_end; ++i)
-      *yycdebug_ << ' ' << i->state;
-    *yycdebug_ << std::endl;
-  }
-
-  // Report on the debug stream that the rule \a yyrule is going to be reduced.
-  void
-  D4FunctionParser::yy_reduce_print_ (int yyrule)
-  {
-    unsigned int yylno = yyrline_[yyrule];
-    int yynrhs = yyr2_[yyrule];
-    // Print the symbols being reduced, and their result.
-    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
-               << " (line " << yylno << "):" << std::endl;
-    // The symbols being reduced.
-    for (int yyi = 0; yyi < yynrhs; yyi++)
-      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
-                       yystack_[(yynrhs) - (yyi + 1)]);
-  }
-#endif // YYDEBUG
-
-  // Symbol number corresponding to token number t.
-  inline
-  D4FunctionParser::token_number_type
-  D4FunctionParser::yytranslate_ (int t)
-  {
-    static
-    const token_number_type
-    translate_table[] =
-    {
-     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39
-    };
-    const unsigned int user_token_number_max_ = 294;
-    const token_number_type undef_token_ = 2;
-
-    if (static_cast<int>(t) <= yyeof_)
-      return yyeof_;
-    else if (static_cast<unsigned int> (t) <= user_token_number_max_)
-      return translate_table[t];
-    else
-      return undef_token_;
-  }
-
-#line 34 "d4_function_parser.yy" // lalr1.cc:1156
-} // libdap
-#line 2444 "d4_function_parser.tab.cc" // lalr1.cc:1156
-#line 472 "d4_function_parser.yy" // lalr1.cc:1157
-
-
-// Forward the error to the driver for handling. The location parameter
-// provides the line number and character position of the error.
-void
-libdap::D4FunctionParser::error(const location_type &l, const std::string &m)
-{
-    evaluator.error(l, m);
-}
-
-/* include for access to scanner.yylex */
-#include "D4FunctionScanner.h"
-
-static int yylex(libdap::D4FunctionParser::semantic_type *yylval,
-                 libdap::location *loc,
-                 libdap::D4FunctionScanner &scanner,
-                 libdap::D4FunctionEvaluator &evaluator)
-{
-    if (evaluator.trace_scanning())
-        scanner.set_debug(true);
-    
-    return( scanner.yylex(yylval, loc) );
-}
diff --git a/d4_ce/gen_grammar_sources/d4_function_parser.tab.hh.tmp b/d4_ce/gen_grammar_sources/d4_function_parser.tab.hh.tmp
deleted file mode 100644
index bbb3b32..0000000
--- a/d4_ce/gen_grammar_sources/d4_function_parser.tab.hh.tmp
+++ /dev/null
@@ -1,783 +0,0 @@
-// A Bison parser, made by GNU Bison 3.0.
-
-// Skeleton interface for Bison LALR(1) parsers in C++
-
-// Copyright (C) 2002-2013 Free Software Foundation, Inc.
-
-// 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, you may create a larger work that contains
-// part or all of the Bison parser skeleton and distribute that work
-// under terms of your choice, so long as that work isn't itself a
-// parser generator using the skeleton or a modified version thereof
-// as a parser skeleton.  Alternatively, if you modify or redistribute
-// the parser skeleton itself, you may (at your option) remove this
-// special exception, which will cause the skeleton and the resulting
-// Bison output files to be licensed under the GNU General Public
-// License without this special exception.
-
-// This special exception was added by the Free Software Foundation in
-// version 2.2 of Bison.
-
-/**
- ** \file d4_function_parser.tab.hh
- ** Define the libdap::parser class.
- */
-
-// C++ LALR(1) parser skeleton written by Akim Demaille.
-
-#ifndef YY_YY_D4_FUNCTION_PARSER_TAB_HH_INCLUDED
-# define YY_YY_D4_FUNCTION_PARSER_TAB_HH_INCLUDED
-// //                    "%code requires" blocks.
-#line 47 "d4_function_parser.yy" // lalr1.cc:386
-
-
-#include "D4FunctionEvaluator.h"
-#include "D4RValue.h"
-#include "dods-datatypes.h"
-
-namespace libdap {
-    class D4FunctionScanner;
-}
-
-
-#line 56 "d4_function_parser.tab.hh" // lalr1.cc:386
-
-# include <cassert>
-# include <vector>
-# include <iostream>
-# include <stdexcept>
-# include <string>
-# include "stack.hh"
-# include "location.hh"
-#include <typeinfo>
-#ifndef YYASSERT
-# include <cassert>
-# define YYASSERT assert
-#endif
-
-
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-
-#line 34 "d4_function_parser.yy" // lalr1.cc:386
-namespace libdap {
-#line 79 "d4_function_parser.tab.hh" // lalr1.cc:386
-
-
-
-  /// A char[S] buffer to store and retrieve objects.
-  ///
-  /// Sort of a variant, but does not keep track of the nature
-  /// of the stored data, since that knowledge is available
-  /// via the current state.
-  template <size_t S>
-  struct variant
-  {
-    /// Type of *this.
-    typedef variant<S> self_type;
-
-    /// Empty construction.
-    variant ()
-      : yytname_ (YY_NULL)
-    {}
-
-    /// Construct and fill.
-    template <typename T>
-    variant (const T& t)
-      : yytname_ (typeid (T).name ())
-    {
-      YYASSERT (sizeof (T) <= S);
-      new (yyas_<T> ()) T (t);
-    }
-
-    /// Destruction, allowed only if empty.
-    ~variant ()
-    {
-      YYASSERT (!yytname_);
-    }
-
-    /// Instantiate an empty \a T in here.
-    template <typename T>
-    T&
-    build ()
-    {
-      YYASSERT (!yytname_);
-      YYASSERT (sizeof (T) <= S);
-      yytname_ = typeid (T).name ();
-      return *new (yyas_<T> ()) T;
-    }
-
-    /// Instantiate a \a T in here from \a t.
-    template <typename T>
-    T&
-    build (const T& t)
-    {
-      YYASSERT (!yytname_);
-      YYASSERT (sizeof (T) <= S);
-      yytname_ = typeid (T).name ();
-      return *new (yyas_<T> ()) T (t);
-    }
-
-    /// Accessor to a built \a T.
-    template <typename T>
-    T&
-    as ()
-    {
-      YYASSERT (yytname_ == typeid (T).name ());
-      YYASSERT (sizeof (T) <= S);
-      return *yyas_<T> ();
-    }
-
-    /// Const accessor to a built \a T (for %printer).
-    template <typename T>
-    const T&
-    as () const
-    {
-      YYASSERT (yytname_ == typeid (T).name ());
-      YYASSERT (sizeof (T) <= S);
-      return *yyas_<T> ();
-    }
-
-    /// Swap the content with \a other, of same type.
-    ///
-    /// Both variants must be built beforehand, because swapping the actual
-    /// data requires reading it (with as()), and this is not possible on
-    /// unconstructed variants: it would require some dynamic testing, which
-    /// should not be the variant's responsability.
-    /// Swapping between built and (possibly) non-built is done with
-    /// variant::move ().
-    template <typename T>
-    void
-    swap (self_type& other)
-    {
-      YYASSERT (yytname_);
-      YYASSERT (yytname_ == other.yytname_);
-      std::swap (as<T> (), other.as<T> ());
-    }
-
-    /// Move the content of \a other to this.
-    ///
-    /// Destroys \a other.
-    template <typename T>
-    void
-    move (self_type& other)
-    {
-      YYASSERT (!yytname_);
-      build<T> ();
-      swap<T> (other);
-      other.destroy<T> ();
-    }
-
-    /// Copy the content of \a other to this.
-    template <typename T>
-    void
-    copy (const self_type& other)
-    {
-      build<T> (other.as<T> ());
-    }
-
-    /// Destroy the stored \a T.
-    template <typename T>
-    void
-    destroy ()
-    {
-      as<T> ().~T ();
-      yytname_ = YY_NULL;
-    }
-
-  private:
-    /// Prohibit blind copies.
-    self_type& operator=(const self_type&);
-    variant (const self_type&);
-
-    /// Accessor to raw memory as \a T.
-    template <typename T>
-    T*
-    yyas_ ()
-    {
-      void *yyp = yybuffer_.yyraw;
-      return static_cast<T*> (yyp);
-     }
-
-    /// Const accessor to raw memory as \a T.
-    template <typename T>
-    const T*
-    yyas_ () const
-    {
-      const void *yyp = yybuffer_.yyraw;
-      return static_cast<const T*> (yyp);
-     }
-
-    union
-    {
-      /// Strongest alignment constraints.
-      long double yyalign_me;
-      /// A buffer large enough to store any of the semantic values.
-      char yyraw[S];
-    } yybuffer_;
-
-    /// Whether the content is built: if defined, the name of the stored type.
-    const char *yytname_;
-  };
-
-
-  /// A Bison parser.
-  class D4FunctionParser
-  {
-  public:
-#ifndef YYSTYPE
-    /// An auxiliary type to compute the largest semantic type.
-    union union_type
-    {
-      // "function name"
-      // fname
-      char dummy1[sizeof(D4Function)];
-
-      // "argument"
-      // "function"
-      // "variable or constant"
-      // "array constant"
-      // function
-      // arg
-      // variable_or_constant
-      // array_constant
-      char dummy2[sizeof(D4RValue*)];
-
-      // "functions"
-      // "arguments"
-      // functions
-      // args
-      char dummy3[sizeof(D4RValueList*)];
-
-      // "word"
-      // "string"
-      // id
-      // group
-      // path
-      // name
-      char dummy4[sizeof(std::string)];
-
-      // "fast byte arg list"
-      // fast_byte_arg_list
-      char dummy5[sizeof(std::vector<dods_byte>*)];
-
-      // "fast float32 arg list"
-      // fast_float32_arg_list
-      char dummy6[sizeof(std::vector<dods_float32>*)];
-
-      // "fast float64 arg list"
-      // fast_float64_arg_list
-      char dummy7[sizeof(std::vector<dods_float64>*)];
-
-      // "fast int16 arg list"
-      // fast_int16_arg_list
-      char dummy8[sizeof(std::vector<dods_int16>*)];
-
-      // "fast int32 arg list"
-      // fast_int32_arg_list
-      char dummy9[sizeof(std::vector<dods_int32>*)];
-
-      // "fast int64 arg list"
-      // fast_int64_arg_list
-      char dummy10[sizeof(std::vector<dods_int64>*)];
-
-      // "fast int8 arg list"
-      // fast_int8_arg_list
-      char dummy11[sizeof(std::vector<dods_int8>*)];
-
-      // "fast uint16 arg list"
-      // fast_uint16_arg_list
-      char dummy12[sizeof(std::vector<dods_uint16>*)];
-
-      // "fast uint32 arg list"
-      // fast_uint32_arg_list
-      char dummy13[sizeof(std::vector<dods_uint32>*)];
-
-      // "fast uint64 arg list"
-      // fast_uint64_arg_list
-      char dummy14[sizeof(std::vector<dods_uint64>*)];
-};
-
-    /// Symbol semantic values.
-    typedef variant<sizeof(union_type)> semantic_type;
-#else
-    typedef YYSTYPE semantic_type;
-#endif
-    /// Symbol locations.
-    typedef location location_type;
-
-    /// Syntax errors thrown from user actions.
-    struct syntax_error : std::runtime_error
-    {
-      syntax_error (const location_type& l, const std::string& m);
-      location_type location;
-    };
-
-    /// Tokens.
-    struct token
-    {
-      enum yytokentype
-      {
-        END = 0,
-        WORD = 275,
-        STRING = 276,
-        SEMICOLON = 277,
-        COLON = 278,
-        LPAREN = 279,
-        RPAREN = 280,
-        COMMA = 281,
-        GROUP_SEP = 282,
-        PATH_SEP = 283,
-        DOLLAR_BYTE = 284,
-        DOLLAR_UINT8 = 285,
-        DOLLAR_INT8 = 286,
-        DOLLAR_UINT16 = 287,
-        DOLLAR_INT16 = 288,
-        DOLLAR_UINT32 = 289,
-        DOLLAR_INT32 = 290,
-        DOLLAR_UINT64 = 291,
-        DOLLAR_INT64 = 292,
-        DOLLAR_FLOAT32 = 293,
-        DOLLAR_FLOAT64 = 294
-      };
-    };
-
-    /// (External) token type, as returned by yylex.
-    typedef token::yytokentype token_type;
-
-    /// Internal symbol number.
-    typedef int symbol_number_type;
-
-    /// Internal symbol number for tokens (subsumed by symbol_number_type).
-    typedef unsigned char token_number_type;
-
-    /// A complete symbol.
-    ///
-    /// Expects its Base type to provide access to the symbol type
-    /// via type_get().
-    ///
-    /// Provide access to semantic value and location.
-    template <typename Base>
-    struct basic_symbol : Base
-    {
-      /// Alias to Base.
-      typedef Base super_type;
-
-      /// Default constructor.
-      basic_symbol ();
-
-      /// Copy constructor.
-      basic_symbol (const basic_symbol& other);
-
-      /// Constructor for valueless symbols, and symbols from each type.
-
-  basic_symbol (typename Base::kind_type t, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const D4Function v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const D4RValue* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const D4RValueList* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::string v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_byte>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_float32>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_float64>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_int16>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_int32>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_int64>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_int8>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_uint16>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_uint32>* v, const location_type& l);
-
-  basic_symbol (typename Base::kind_type t, const std::vector<dods_uint64>* v, const location_type& l);
-
-
-      /// Constructor for symbols with semantic value.
-      basic_symbol (typename Base::kind_type t,
-                    const semantic_type& v,
-                    const location_type& l);
-
-      ~basic_symbol ();
-
-      /// Destructive move, \a s is emptied into this.
-      void move (basic_symbol& s);
-
-      /// The semantic value.
-      semantic_type value;
-
-      /// The location.
-      location_type location;
-
-    private:
-      /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& other);
-    };
-
-    /// Type access provider for token (enum) based symbols.
-    struct by_type
-    {
-      /// Default constructor.
-      by_type ();
-
-      /// Copy constructor.
-      by_type (const by_type& other);
-
-      /// The symbol type as needed by the constructor.
-      typedef token_type kind_type;
-
-      /// Constructor from (external) token numbers.
-      by_type (kind_type t);
-
-      /// Steal the symbol type from \a that.
-      void move (by_type& that);
-
-      /// The (internal) type number (corresponding to \a type).
-      /// -1 when this symbol is empty.
-      symbol_number_type type_get () const;
-
-      /// The token.
-      token_type token () const;
-
-      enum { empty = 0 };
-
-      /// The symbol type.
-      /// -1 when this symbol is empty.
-      token_number_type type;
-    };
-
-    /// "External" symbols: returned by the scanner.
-    typedef basic_symbol<by_type> symbol_type;
-
-    // Symbol constructors declarations.
-    static inline
-    symbol_type
-    make_END (const location_type& l);
-
-    static inline
-    symbol_type
-    make_WORD (const std::string& v, const location_type& l);
-
-    static inline
-    symbol_type
-    make_STRING (const std::string& v, const location_type& l);
-
-    static inline
-    symbol_type
-    make_SEMICOLON (const location_type& l);
-
-    static inline
-    symbol_type
-    make_COLON (const location_type& l);
-
-    static inline
-    symbol_type
-    make_LPAREN (const location_type& l);
-
-    static inline
-    symbol_type
-    make_RPAREN (const location_type& l);
-
-    static inline
-    symbol_type
-    make_COMMA (const location_type& l);
-
-    static inline
-    symbol_type
-    make_GROUP_SEP (const location_type& l);
-
-    static inline
-    symbol_type
-    make_PATH_SEP (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_BYTE (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_UINT8 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_INT8 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_UINT16 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_INT16 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_UINT32 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_INT32 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_UINT64 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_INT64 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_FLOAT32 (const location_type& l);
-
-    static inline
-    symbol_type
-    make_DOLLAR_FLOAT64 (const location_type& l);
-
-
-    /// Build a parser object.
-    D4FunctionParser (D4FunctionScanner  &scanner_yyarg, D4FunctionEvaluator  &evaluator_yyarg);
-    virtual ~D4FunctionParser ();
-
-    /// Parse.
-    /// \returns  0 iff parsing succeeded.
-    virtual int parse ();
-
-#if YYDEBUG
-    /// The current debugging stream.
-    std::ostream& debug_stream () const;
-    /// Set the current debugging stream.
-    void set_debug_stream (std::ostream &);
-
-    /// Type for debugging levels.
-    typedef int debug_level_type;
-    /// The current debugging level.
-    debug_level_type debug_level () const;
-    /// Set the current debugging level.
-    void set_debug_level (debug_level_type l);
-#endif
-
-    /// Report a syntax error.
-    /// \param loc    where the syntax error is found.
-    /// \param msg    a description of the syntax error.
-    virtual void error (const location_type& loc, const std::string& msg);
-
-    /// Report a syntax error.
-    void error (const syntax_error& err);
-
-  private:
-    /// This class is not copyable.
-    D4FunctionParser (const D4FunctionParser&);
-    D4FunctionParser& operator= (const D4FunctionParser&);
-
-    /// State numbers.
-    typedef int state_type;
-
-    /// Generate an error message.
-    /// \param yystate   the state where the error occurred.
-    /// \param yytoken   the lookahead token type, or yyempty_.
-    virtual std::string yysyntax_error_ (state_type yystate,
-                                         symbol_number_type yytoken) const;
-
-    /// Compute post-reduction state.
-    /// \param yystate   the current state
-    /// \param yylhs     the nonterminal to push on the stack
-    state_type yy_lr_goto_state_ (state_type yystate, int yylhs);
-
-    /// Whether the given \c yypact_ value indicates a defaulted state.
-    /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue);
-
-    /// Whether the given \c yytable_ value indicates a syntax error.
-    /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue);
-
-    static const signed char yypact_ninf_;
-    static const signed char yytable_ninf_;
-
-    /// Convert a scanner token number \a t to a symbol number.
-    static token_number_type yytranslate_ (int t);
-
-    // Tables.
-  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-  // STATE-NUM.
-  static const signed char yypact_[];
-
-  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-  // Performed when YYTABLE does not specify something else to do.  Zero
-  // means the default is an error.
-  static const unsigned char yydefact_[];
-
-  // YYPGOTO[NTERM-NUM].
-  static const signed char yypgoto_[];
-
-  // YYDEFGOTO[NTERM-NUM].
-  static const signed char yydefgoto_[];
-
-  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-  // positive, shift that token.  If negative, reduce the rule whose
-  // number is the opposite.  If YYTABLE_NINF, syntax error.
-  static const short int yytable_[];
-
-  static const signed char yycheck_[];
-
-  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-  // symbol of state STATE-NUM.
-  static const unsigned char yystos_[];
-
-  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
-  static const unsigned char yyr1_[];
-
-  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
-  static const unsigned char yyr2_[];
-
-
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    static std::string yytnamerr_ (const char *n);
-
-
-    /// For a symbol, its name in clear.
-    static const char* const yytname_[];
-#if YYDEBUG
-  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
-  static const unsigned short int yyrline_[];
-    /// Report on the debug stream that the rule \a r is going to be reduced.
-    virtual void yy_reduce_print_ (int r);
-    /// Print the state stack on the debug stream.
-    virtual void yystack_print_ ();
-
-    // Debugging.
-    int yydebug_;
-    std::ostream* yycdebug_;
-
-    /// \brief Display a symbol type, value and location.
-    /// \param yyo    The output stream.
-    /// \param yysym  The symbol.
-    template <typename Base>
-    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
-#endif
-
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg     Why this token is reclaimed.
-    ///                  If null, print nothing.
-    /// \param s         The symbol.
-    template <typename Base>
-    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
-
-  private:
-    /// Type access provider for state based symbols.
-    struct by_state
-    {
-      /// Default constructor.
-      by_state ();
-
-      /// The symbol type as needed by the constructor.
-      typedef state_type kind_type;
-
-      /// Constructor.
-      by_state (kind_type s);
-
-      /// Copy constructor.
-      by_state (const by_state& other);
-
-      /// Steal the symbol type from \a that.
-      void move (by_state& that);
-
-      /// The (internal) type number (corresponding to \a state).
-      /// "empty" when empty.
-      symbol_number_type type_get () const;
-
-      enum { empty = 0 };
-
-      /// The state.
-      state_type state;
-    };
-
-    /// "Internal" symbol: element of the stack.
-    struct stack_symbol_type : basic_symbol<by_state>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_state> super_type;
-      /// Construct an empty symbol.
-      stack_symbol_type ();
-      /// Steal the contents from \a sym to build this.
-      stack_symbol_type (state_type s, symbol_type& sym);
-      /// Assignment, needed by push_back.
-      stack_symbol_type& operator= (const stack_symbol_type& that);
-    };
-
-    /// Stack type.
-    typedef stack<stack_symbol_type> stack_type;
-
-    /// The stack.
-    stack_type yystack_;
-
-    /// Push a new state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the symbol
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, stack_symbol_type& s);
-
-    /// Push a new look ahead token on the state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the state
-    /// \param sym  the symbol (for its value and location).
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, state_type s, symbol_type& sym);
-
-    /// Pop \a n symbols the three stacks.
-    void yypop_ (unsigned int n = 1);
-
-    // Constants.
-    enum
-    {
-      yyeof_ = 0,
-      yylast_ = 117,           //< Last index in yytable_.
-      yynnts_ = 24,  //< Number of nonterminal symbols.
-      yyempty_ = -2,
-      yyfinal_ = 6, //< Termination state number.
-      yyterror_ = 1,
-      yyerrcode_ = 256,
-      yyntokens_ = 40    //< Number of tokens.
-    };
-
-
-    // User arguments.
-    D4FunctionScanner  &scanner;
-    D4FunctionEvaluator  &evaluator;
-  };
-
-
-#line 34 "d4_function_parser.yy" // lalr1.cc:386
-} // libdap
-#line 779 "d4_function_parser.tab.hh" // lalr1.cc:386
-
-
-
-
-#endif // !YY_YY_D4_FUNCTION_PARSER_TAB_HH_INCLUDED
diff --git a/d4_ce/gen_grammar_sources/lex.d4_ce.cc.tmp b/d4_ce/gen_grammar_sources/lex.d4_ce.cc.tmp
deleted file mode 100644
index becb9bd..0000000
--- a/d4_ce/gen_grammar_sources/lex.d4_ce.cc.tmp
+++ /dev/null
@@ -1,2145 +0,0 @@
-
-#line 3 "lex.d4_ce.cc"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-/* %not-for-header */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-/* %ok-for-header */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* %if-c++-only */
-    /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
-     * following macro. This is required in order to pass the c++-multiple-scanners
-     * test in the regression suite. We get reports that it breaks inheritance.
-     * We will address this in a future release of flex, or omit the C++ scanner
-     * altogether.
-     */
-    #define yyFlexLexer d4_ceFlexLexer
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-/* %if-c-only */
-/* %endif */
-
-/* %if-tables-serialization */
-/* %endif */
-/* end standard C headers. */
-
-/* %if-c-or-c++ */
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-typedef uint64_t flex_uint64_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-/* %endif */
-
-/* %if-c++-only */
-/* begin standard C++ headers. */
-#include <iostream> 
-#include <errno.h>
-#include <cstdlib>
-#include <cstring>
-/* end standard C++ headers. */
-/* %endif */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* %not-for-header */
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-/* %ok-for-header */
-
-/* %if-reentrant */
-/* %endif */
-
-/* %if-not-reentrant */
-
-/* %endif */
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-/* %if-not-reentrant */
-extern yy_size_t yyleng;
-/* %endif */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex. 
-     *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
-     *       normally declared as a register variable-- so it is not worth it.
-     */
-    #define  YY_LESS_LINENO(n) \
-            do { \
-                yy_size_t yyl;\
-                for ( yyl = n; yyl < yyleng; ++yyl )\
-                    if ( yytext[yyl] == '\n' )\
-                        --yylineno;\
-            }while(0)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-	std::istream* yy_input_file;
-/* %endif */
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	yy_size_t yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %if-not-reentrant */
-/* %endif */
-/* %ok-for-header */
-
-/* %endif */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* %if-c-only Standard (non-C++) definition */
-/* %if-not-reentrant */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-/* %endif */
-
-void *d4_cealloc (yy_size_t  );
-void *d4_cerealloc (void *,yy_size_t  );
-void d4_cefree (void *  );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
-/* Begin user sect3 */
-#define YY_SKIP_YYWRAP
-
-#define FLEX_DEBUG
-
-typedef unsigned char YY_CHAR;
-
-#define yytext_ptr yytext
-
-#include <FlexLexer.h>
-
-int yyFlexLexer::yywrap() { return 1; }
-int yyFlexLexer::yylex()
-	{
-	LexerError( "yyFlexLexer::yylex invoked but %option yyclass used" );
-	return 0;
-	}
-
-#define YY_DECL int D4CEScanner::yylex()
-
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	(yytext_ptr) -= (yy_more_len); \
-	yyleng = (yy_size_t) (yy_cp - (yytext_ptr)); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
-	(yy_c_buf_p) = yy_cp;
-
-/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 32
-#define YY_END_OF_BUFFER 33
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[46] =
-    {   0,
-        0,    0,   26,   26,   33,   31,   22,   23,   23,   24,
-       25,   24,    4,   10,    9,    3,    5,   16,   11,   14,
-       24,    1,    2,    7,    6,    8,   24,   26,   30,   29,
-       22,   23,   24,   13,   19,   17,   12,   15,   20,   21,
-       18,   26,   27,   28,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    5,    6,    7,    1,    8,    1,    1,    1,
-        1,    8,    8,    9,    8,   10,   11,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,   12,   13,   14,
-       15,   16,    1,   17,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-       18,   19,   20,    1,    8,    1,    8,    8,    8,    8,
-
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,   21,   22,   23,   24,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst flex_int32_t yy_meta[25] =
-    {   0,
-        1,    1,    1,    1,    2,    3,    2,    2,    1,    1,
-        1,    1,    1,    1,    2,    1,    2,    1,    4,    1,
-        1,    1,    1,    2
-    } ;
-
-static yyconst flex_int16_t yy_base[49] =
-    {   0,
-        0,    0,   19,   20,   54,   58,   45,   24,   26,   31,
-       58,   30,   58,   58,   58,   58,   58,   17,   29,   18,
-       28,   58,   58,   58,   58,   58,   27,    0,   58,   29,
-       39,   33,   25,   58,   58,   58,   58,   58,   58,   58,
-       58,    0,   58,   58,   58,   48,   51,   55
-    } ;
-
-static yyconst flex_int16_t yy_def[49] =
-    {   0,
-       45,    1,   46,   46,   45,   45,   45,   45,   45,   47,
-       45,   47,   45,   45,   45,   45,   45,   45,   45,   45,
-       47,   45,   45,   45,   45,   45,   47,   48,   45,   45,
-       45,   45,   47,   45,   45,   45,   45,   45,   45,   45,
-       45,   48,   45,   45,    0,   45,   45,   45
-    } ;
-
-static yyconst flex_int16_t yy_nxt[83] =
-    {   0,
-        6,    7,    8,    9,   10,   11,    6,   12,   13,   14,
-       15,   16,   17,   18,   19,   20,   21,   22,   12,   23,
-       24,   25,   26,   27,   29,   29,   32,   32,   32,   32,
-       35,   36,   38,   39,   43,   32,   32,   30,   30,   45,
-       31,   41,   40,   37,   45,   34,   31,   44,   28,   28,
-       28,   28,   33,   45,   33,   42,   42,    5,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45
-    } ;
-
-static yyconst flex_int16_t yy_chk[83] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    3,    4,    8,    8,    9,    9,
-       18,   18,   20,   20,   30,   32,   32,    3,    4,   33,
-       31,   27,   21,   19,   12,   10,    7,   30,   46,   46,
-       46,   46,   47,    5,   47,   48,   48,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45
-    } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[33] =
-    {   0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,     };
-
-static yyconst flex_int16_t yy_rule_linenum[32] =
-    {   0,
-       94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-      104,  106,  107,  108,  109,  110,  111,  112,  113,  114,
-      115,  117,  119,  121,  125,  127,  129,  131,  133,  140,
-      152
-    } ;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() ((yy_more_flag) = 1)
-#define YY_MORE_ADJ (yy_more_len)
-#define YY_RESTORE_YY_MORE_OFFSET
-#line 1 "d4_ce_scanner.ll"
-/*
- -*- mode: c++; c-basic-offset:4 -*-
-
- This file is part of libdap, A C++ implementation of the OPeNDAP Data
- Access Protocol.
-
- Copyright (c) 2013 OPeNDAP, Inc.
- Author: James Gallagher <jgallagher at opendap.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- 
- This library 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
- Lesser General Public License for more details.
- 
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
-*/ 
-#line 29 "d4_ce_scanner.ll"
-//#include "config.h"
-
-#include <string>
-
-#include "D4CEScanner.h"
-
-/* typedef to make the returns for the tokens shorter */
-typedef libdap::D4CEParser::token token;
-
-/* This was added because of some notes on the net about compiler version
-   issues. I don't know if it's needed when using the C++ mode of flex. */
-#undef yywrap
-#define yywrap() 1
-
-/* define yyterminate as this instead of NULL */
-#define yyterminate() return(token::END)
-
-/* Use this if several scanners are needed. This will cause flex to
-   #define yyFlexLexer to be <prefix>FlexLexer (the yyFlexLexer is defined
-   in lex.<prefix>.cc. jhrg 8/8/13 */
-/* These two options turn on line counting - useful for error messages - 
-   and debugging, respectively. When debugging is on, it's possible to see
-   which scanner rules are used at which points in the input. */
-/* Do not output the default rule (where any unmatched input is echoed to 
-   stdout). When set, nodefault will cause the scanner to exit on an error. */
-/* noyywrap makes the scanner assume that EOF/EOS is the end of the input.
-   If this is not set, the scanner will assume there are more files to 
-   scan. */ 
-/* When set, warn prints a message when the default rule can be matched
-   but nodefault is given (among other warnings). */
-
-/* This pattern just ensures that a word does not start with '#' which
-   is the DAP2 comment character. */
-#line 83 "d4_ce_scanner.ll"
-// Code run each time a pattern is matched
-#define YY_USER_ACTION loc->columns(yyleng);
-#line 609 "lex.d4_ce.cc"
-
-#define INITIAL 0
-#define quote 1
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#include <unistd.h>
-/* %endif */
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-/* %if-c-only Reentrant structure and macros (non-C++). */
-/* %if-reentrant */
-/* %if-c-only */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif End reentrant structures and macros. */
-/* %if-bison-bridge */
-/* %endif */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-#endif
-
-/* %if-c-only */
-/* %endif */
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define ECHO LexerOutput( yytext, yyleng )
-/* %endif */
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
-\
-/* %if-c++-only C++ definition \ */\
-	if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
-		YY_FATAL_ERROR( "input in flex scanner failed" );
-/* %endif */
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#define YY_FATAL_ERROR(msg) LexerError( msg )
-/* %endif */
-#endif
-
-/* %if-tables-serialization structures and prototypes */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* %tables-yydmap generated elements */
-/* %endif */
-/* end tables serialization structures and prototypes */
-
-/* %ok-for-header */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define YY_DECL int yyFlexLexer::yylex()
-/* %endif */
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-/* %% [6.0] YY_RULE_SETUP definition goes here */
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/* %not-for-header */
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-/* %% [7.0] user's declarations go here */
-#line 87 "d4_ce_scanner.ll"
-
-
-
-// Code run each time yylex is called
-loc->step();
-
-
-#line 775 "lex.d4_ce.cc"
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! yyin )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyin = & std::cin;
-/* %endif */
-
-		if ( ! yyout )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyout = & std::cout;
-/* %endif */
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			yyensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
-		}
-
-		yy_load_buffer_state(  );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-/* %% [8.0] yymore()-related code goes here */
-		(yy_more_len) = 0;
-		if ( (yy_more_flag) )
-			{
-			(yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
-			(yy_more_flag) = 0;
-			}
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of yytext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-/* %% [9.0] code to set up and find next match goes here */
-		yy_current_state = (yy_start);
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 46 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_current_state != 45 );
-		yy_cp = (yy_last_accepting_cpos);
-		yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
-/* %% [10.0] code to find the action number goes here */
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-/* %% [11.0] code for yylineno update goes here */
-
-		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-			{
-			yy_size_t yyl;
-			for ( yyl = (yy_more_len); yyl < yyleng; ++yyl )
-				if ( yytext[yyl] == '\n' )
-					   
-    yylineno++;
-;
-			}
-
-do_action:	/* This label is used only to access EOF actions. */
-
-/* %% [12.0] debug code goes here */
-		if ( yy_flex_debug )
-			{
-			if ( yy_act == 0 )
-				std::cerr << "--scanner backing up\n";
-			else if ( yy_act < 32 )
-				std::cerr << "--accepting rule at line " << yy_rule_linenum[yy_act] <<
-				         "(\"" << yytext << "\")\n";
-			else if ( yy_act == 32 )
-				std::cerr << "--accepting default rule (\"" << yytext << "\")\n";
-			else if ( yy_act == 33 )
-				std::cerr << "--(end of buffer or a NUL)\n";
-			else
-				std::cerr << "--EOF (start condition " << YY_START << ")\n";
-			}
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-/* %% [13.0] actions go here */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 94 "d4_ce_scanner.ll"
-return token::LBRACKET;
-	YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 95 "d4_ce_scanner.ll"
-return token::RBRACKET;
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 96 "d4_ce_scanner.ll"
-return token::COLON;
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 97 "d4_ce_scanner.ll"
-return token::COMMA;
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 98 "d4_ce_scanner.ll"
-return token::SEMICOLON;
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 99 "d4_ce_scanner.ll"
-return token::PIPE;
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 100 "d4_ce_scanner.ll"
-return token::LBRACE;
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 101 "d4_ce_scanner.ll"
-return token::RBRACE;
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 102 "d4_ce_scanner.ll"
-return token::GROUP_SEP;
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 103 "d4_ce_scanner.ll"
-return token::PATH_SEP;
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 104 "d4_ce_scanner.ll"
-return token::ASSIGN;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 106 "d4_ce_scanner.ll"
-return token::EQUAL;
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 107 "d4_ce_scanner.ll"
-return token::NOT_EQUAL;
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 108 "d4_ce_scanner.ll"
-return token::GREATER;
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 109 "d4_ce_scanner.ll"
-return token::GREATER_EQUAL;
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 110 "d4_ce_scanner.ll"
-return token::LESS;
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 111 "d4_ce_scanner.ll"
-return token::LESS_EQUAL;
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 112 "d4_ce_scanner.ll"
-return token::REGEX_MATCH;
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 113 "d4_ce_scanner.ll"
-return token::LESS_BBOX;
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 114 "d4_ce_scanner.ll"
-return token::GREATER_BBOX;
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 115 "d4_ce_scanner.ll"
-return token::MASK;
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 117 "d4_ce_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 23:
-/* rule 23 can match eol */
-YY_RULE_SETUP
-#line 119 "d4_ce_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 121 "d4_ce_scanner.ll"
-{ yylval->build<std::string>(yytext); return token::WORD; }
-	YY_BREAK
-case YY_STATE_EOF(INITIAL):
-#line 123 "d4_ce_scanner.ll"
-return token::END;
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 125 "d4_ce_scanner.ll"
-{ BEGIN(quote); yymore(); }
-	YY_BREAK
-case 26:
-/* rule 26 can match eol */
-YY_RULE_SETUP
-#line 127 "d4_ce_scanner.ll"
-yymore(); /* Anything that's not a double quote or a backslash */
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 129 "d4_ce_scanner.ll"
-yymore(); /* This matches the escaped double quote (\") */
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 131 "d4_ce_scanner.ll"
-yymore(); /* This matches an escaped escape (\\) */
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 133 "d4_ce_scanner.ll"
-{
-                    BEGIN(INITIAL);
-                    if (yytext) {
-                        YY_FATAL_ERROR("Inside a string, backslash (\\) can escape a double quote or must itself be escaped (\\\\).");
-                    }
-                }
-	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 140 "d4_ce_scanner.ll"
-{ 
-                /* An unescaped double quote in the 'quote' state indicates the end of the string */
-                BEGIN(INITIAL); 
-                yylval->build<std::string>(yytext); 
-                return token::STRING;
-            }
-	YY_BREAK
-case YY_STATE_EOF(quote):
-#line 147 "d4_ce_scanner.ll"
-{
-                  BEGIN(INITIAL);   /* resetting the state is needed for reentrant parsers */
-                  YY_FATAL_ERROR("Unterminated quote");
-                }
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 152 "d4_ce_scanner.ll"
-{
-        BEGIN(INITIAL);
-        if (yytext) {
-            YY_FATAL_ERROR("Characters found in the input were not recognized.");
-        }
-    }
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 158 "d4_ce_scanner.ll"
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-#line 1088 "lex.d4_ce.cc"
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
-				yy_cp = (yy_last_accepting_cpos);
-				yy_current_state = (yy_last_accepting_state);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( yywrap(  ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of yylex */
-/* %ok-for-header */
-
-/* %if-c++-only */
-/* %not-for-header */
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
-{
-	yyin = arg_yyin;
-	yyout = arg_yyout;
-	yy_c_buf_p = 0;
-	yy_init = 0;
-	yy_start = 0;
-	yy_flex_debug = 0;
-	yylineno = 1;	// this will only get updated if %option yylineno
-
-	yy_did_buffer_switch_on_eof = 0;
-
-	yy_looking_for_trail_begin = 0;
-	yy_more_flag = 0;
-	yy_more_len = 0;
-	yy_more_offset = yy_prev_more_offset = 0;
-
-	yy_start_stack_ptr = yy_start_stack_depth = 0;
-	yy_start_stack = NULL;
-
-	yy_buffer_stack = 0;
-	yy_buffer_stack_top = 0;
-	yy_buffer_stack_max = 0;
-
-	yy_state_buf = 0;
-
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::~yyFlexLexer()
-{
-	delete [] yy_state_buf;
-	d4_cefree(yy_start_stack  );
-	yy_delete_buffer( YY_CURRENT_BUFFER );
-	d4_cefree(yy_buffer_stack  );
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
-{
-	if ( new_in )
-		{
-		yy_delete_buffer( YY_CURRENT_BUFFER );
-		yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  ) );
-		}
-
-	if ( new_out )
-		yyout = new_out;
-}
-
-#ifdef YY_INTERACTIVE
-size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ )
-#else
-size_t yyFlexLexer::LexerInput( char* buf, size_t max_size )
-#endif
-{
-	if ( yyin->eof() || yyin->fail() )
-		return 0;
-
-#ifdef YY_INTERACTIVE
-	yyin->get( buf[0] );
-
-	if ( yyin->eof() )
-		return 0;
-
-	if ( yyin->bad() )
-		return -1;
-
-	return 1;
-
-#else
-	(void) yyin->read( buf, max_size );
-
-	if ( yyin->bad() )
-		return -1;
-	else
-		return yyin->gcount();
-#endif
-}
-
-void yyFlexLexer::LexerOutput( const char* buf, size_t size )
-{
-	(void) yyout->write( buf, size );
-}
-/* %ok-for-header */
-
-/* %endif */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-int yyFlexLexer::yy_get_next_buffer()
-/* %endif */
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			yy_size_t num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				yy_size_t new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					d4_cerealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) d4_cerealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-/* %if-c-only */
-/* %not-for-header */
-
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_get_previous_state()
-/* %endif */
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-/* %% [15.0] code to get the start state into yy_current_state goes here */
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-/* %% [16.0] code to find the next state goes here */
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 46 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
-/* %endif */
-{
-	register int yy_is_jam;
-    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-	register char *yy_cp = (yy_c_buf_p);
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 46 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 45);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyunput( int c, register char* yy_bp)
-/* %endif */
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up yytext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register yy_size_t number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-/* %% [18.0] update yylineno here */
-
-    if ( c == '\n' ){
-        --yylineno;
-    }
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yyinput()
-/* %endif */
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap(  ) )
-						return 0;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve yytext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-/* %% [19.0] update BOL and yylineno */
-	if ( c == '\n' )
-		   
-    yylineno++;
-;
-
-	return c;
-}
-/* %if-c-only */
-/* %endif */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyrestart( std::istream* input_file )
-/* %endif */
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
-	}
-
-	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-	yy_load_buffer_state(  );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-/* %endif */
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		yypop_buffer_state();
-	 *		yypush_buffer_state(new_buffer);
-     */
-	yyensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state(  );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_load_buffer_state()
-/* %endif */
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
-/* %endif */
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) d4_cealloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) d4_cealloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer( b, file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		d4_cefree((void *) b->yy_ch_buf  );
-
-	d4_cefree((void *) b  );
-}
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-
-extern "C" int isatty (int );
-
-/* %endif */
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
-/* %endif */
-
-{
-	int oerrno = errno;
-    
-	yy_flush_buffer( b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-	b->yy_is_interactive = 0;
-/* %endif */
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state(  );
-}
-
-/* %if-c-or-c++ */
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
-/* %endif */
-{
-    	if (new_buffer == NULL)
-		return;
-
-	yyensure_buffer_stack();
-
-	/* This block is copied from yy_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state(  );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypop_buffer_state (void)
-/* %endif */
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	yy_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state(  );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yyensure_buffer_stack(void)
-/* %endif */
-{
-	yy_size_t num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_cealloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_cerealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_push_state( int new_state )
-/* %endif */
-{
-    	if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-		{
-		yy_size_t new_size;
-
-		(yy_start_stack_depth) += YY_START_STACK_INCR;
-		new_size = (yy_start_stack_depth) * sizeof( int );
-
-		if ( ! (yy_start_stack) )
-			(yy_start_stack) = (int *) d4_cealloc(new_size  );
-
-		else
-			(yy_start_stack) = (int *) d4_cerealloc((void *) (yy_start_stack),new_size  );
-
-		if ( ! (yy_start_stack) )
-			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-		}
-
-	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
-
-	BEGIN(new_state);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_pop_state()
-/* %endif */
-{
-    	if ( --(yy_start_stack_ptr) < 0 )
-		YY_FATAL_ERROR( "start-condition stack underflow" );
-
-	BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yy_top_state()
-/* %endif */
-{
-    	return (yy_start_stack)[(yy_start_stack_ptr) - 1];
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::LexerError( yyconst char msg[] )
-{
-    	std::cerr << msg << std::endl;
-	exit( YY_EXIT_FAILURE );
-}
-/* %endif */
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		yytext[yyleng] = (yy_hold_char); \
-		(yy_c_buf_p) = yytext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		yyleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/* %if-c-only */
-/* %if-reentrant */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/* %if-reentrant */
-/* %if-bison-bridge */
-/* %endif */
-/* %endif if-c-only */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *d4_cealloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *d4_cerealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void d4_cefree (void * ptr )
-{
-	free( (char *) ptr );	/* see d4_cerealloc() for (char *) cast */
-}
-
-/* %if-tables-serialization definitions */
-/* %define-yytables   The name for this specific scanner's tables. */
-#define YYTABLES_NAME "yytables"
-/* %endif */
-
-/* %ok-for-header */
-
-#line 158 "d4_ce_scanner.ll"
-
-
-
diff --git a/d4_ce/gen_grammar_sources/lex.d4_function.cc.tmp b/d4_ce/gen_grammar_sources/lex.d4_function.cc.tmp
deleted file mode 100644
index 3f57dbc..0000000
--- a/d4_ce/gen_grammar_sources/lex.d4_function.cc.tmp
+++ /dev/null
@@ -1,2172 +0,0 @@
-
-#line 3 "lex.d4_function.cc"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-/* %not-for-header */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-/* %ok-for-header */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* %if-c++-only */
-    /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
-     * following macro. This is required in order to pass the c++-multiple-scanners
-     * test in the regression suite. We get reports that it breaks inheritance.
-     * We will address this in a future release of flex, or omit the C++ scanner
-     * altogether.
-     */
-    #define yyFlexLexer d4_functionFlexLexer
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-/* %if-c-only */
-/* %endif */
-
-/* %if-tables-serialization */
-/* %endif */
-/* end standard C headers. */
-
-/* %if-c-or-c++ */
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-typedef uint64_t flex_uint64_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-/* %endif */
-
-/* %if-c++-only */
-/* begin standard C++ headers. */
-#include <iostream> 
-#include <errno.h>
-#include <cstdlib>
-#include <cstring>
-/* end standard C++ headers. */
-/* %endif */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* %not-for-header */
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-/* %ok-for-header */
-
-/* %if-reentrant */
-/* %endif */
-
-/* %if-not-reentrant */
-
-/* %endif */
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-/* %if-not-reentrant */
-extern yy_size_t yyleng;
-/* %endif */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex. 
-     *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
-     *       normally declared as a register variable-- so it is not worth it.
-     */
-    #define  YY_LESS_LINENO(n) \
-            do { \
-                yy_size_t yyl;\
-                for ( yyl = n; yyl < yyleng; ++yyl )\
-                    if ( yytext[yyl] == '\n' )\
-                        --yylineno;\
-            }while(0)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-	std::istream* yy_input_file;
-/* %endif */
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	yy_size_t yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %if-not-reentrant */
-/* %endif */
-/* %ok-for-header */
-
-/* %endif */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* %if-c-only Standard (non-C++) definition */
-/* %if-not-reentrant */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-/* %endif */
-
-void *d4_functionalloc (yy_size_t  );
-void *d4_functionrealloc (void *,yy_size_t  );
-void d4_functionfree (void *  );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
-/* Begin user sect3 */
-#define YY_SKIP_YYWRAP
-
-#define FLEX_DEBUG
-
-typedef unsigned char YY_CHAR;
-
-#define yytext_ptr yytext
-
-#include <FlexLexer.h>
-
-int yyFlexLexer::yywrap() { return 1; }
-int yyFlexLexer::yylex()
-	{
-	LexerError( "yyFlexLexer::yylex invoked but %option yyclass used" );
-	return 0;
-	}
-
-#define YY_DECL int D4FunctionScanner::yylex()
-
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	(yytext_ptr) -= (yy_more_len); \
-	yyleng = (yy_size_t) (yy_cp - (yytext_ptr)); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
-	(yy_c_buf_p) = yy_cp;
-
-/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 29
-#define YY_END_OF_BUFFER 30
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[64] =
-    {   0,
-        0,    0,   23,   23,   30,   28,   19,   20,   20,   21,
-       22,   28,    4,    5,    1,    7,    6,    3,    2,   23,
-       27,   26,   19,   20,   21,    0,    0,    0,    0,   23,
-       24,   25,    0,    0,    0,    0,    0,    0,    0,    0,
-        8,    0,    0,    0,    0,   10,    0,    0,   12,   14,
-       16,    0,    0,    0,    9,    0,    0,   11,   13,   15,
-       17,   18,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    5,    6,    5,    7,    5,    1,    1,    8,
-        9,    5,    5,   10,    5,   11,   12,    5,   13,   14,
-       15,   16,    5,   17,    5,   18,    5,   19,   20,    1,
-        1,    1,    1,    5,    5,   21,    5,    5,    5,   22,
-        5,    5,   23,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,   24,    5,    5,    5,    5,    5,
-        1,   25,    1,    1,    5,    1,   26,    5,    5,    5,
-
-       27,    5,    5,    5,    5,    5,    5,   28,    5,   29,
-       30,    5,    5,    5,    5,   31,    5,    5,    5,    5,
-       32,    5,    1,    1,    1,    5,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst flex_int32_t yy_meta[33] =
-    {   0,
-        1,    1,    1,    1,    2,    3,    1,    1,    1,    1,
-        1,    1,    2,    2,    2,    2,    2,    2,    1,    1,
-        2,    2,    2,    2,    4,    2,    2,    2,    2,    2,
-        2,    2
-    } ;
-
-static yyconst flex_int16_t yy_base[67] =
-    {   0,
-        0,    0,   27,   28,   89,   90,   86,   32,   34,    0,
-       90,   18,   90,   90,   90,   90,   90,   90,   90,    0,
-       90,   37,   85,   41,    0,   54,   57,   55,   60,    0,
-       90,   90,   51,   51,   49,   50,   51,   51,   33,   45,
-       90,   44,   57,   59,   56,   90,   41,   32,   90,   90,
-       90,   51,   47,   44,   90,   43,   39,   90,   90,   90,
-       90,   90,   90,   62,   65,   69
-    } ;
-
-static yyconst flex_int16_t yy_def[67] =
-    {   0,
-       63,    1,   64,   64,   63,   63,   63,   63,   63,   65,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   66,
-       63,   63,   63,   63,   65,   63,   63,   63,   63,   66,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,    0,   63,   63,   63
-    } ;
-
-static yyconst flex_int16_t yy_nxt[123] =
-    {   0,
-        6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
-       16,   17,   10,   10,   10,   10,   10,   10,   18,   19,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   21,   21,   24,   24,   24,   24,   26,   27,
-       28,   29,   31,   24,   24,   43,   56,   44,   57,   45,
-       46,   22,   22,   52,   62,   53,   61,   54,   55,   60,
-       59,   32,   20,   20,   20,   20,   25,   58,   25,   30,
-       30,   51,   50,   49,   48,   47,   42,   41,   40,   39,
-       38,   37,   36,   35,   34,   33,   23,   23,   63,    5,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63
-    } ;
-
-static yyconst flex_int16_t yy_chk[123] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    3,    4,    8,    8,    9,    9,   12,   12,
-       12,   12,   22,   24,   24,   39,   48,   39,   48,   39,
-       39,    3,    4,   47,   57,   47,   56,   47,   47,   54,
-       53,   22,   64,   64,   64,   64,   65,   52,   65,   66,
-       66,   45,   44,   43,   42,   40,   38,   37,   36,   35,
-       34,   33,   29,   28,   27,   26,   23,    7,    5,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63
-    } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[30] =
-    {   0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    1, 0, 0, 1, 0, 0, 0, 0, 0, 0,     };
-
-static yyconst flex_int16_t yy_rule_linenum[29] =
-    {   0,
-      121,  122,  123,  125,  126,  128,  129,  131,  132,  133,
-      134,  135,  136,  137,  138,  139,  140,  141,  143,  145,
-      147,  151,  153,  155,  157,  159,  166,  178
-    } ;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() ((yy_more_flag) = 1)
-#define YY_MORE_ADJ (yy_more_len)
-#define YY_RESTORE_YY_MORE_OFFSET
-#line 1 "d4_function_scanner.ll"
-/*
- -*- mode: c++; c-basic-offset:4 -*-
-
- This file is part of libdap, A C++ implementation of the OPeNDAP Data
- Access Protocol.
-
- Copyright (c) 2014 OPeNDAP, Inc.
- Author: James Gallagher <jgallagher at opendap.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- 
- This library 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
- Lesser General Public License for more details.
- 
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
-*/ 
-#line 29 "d4_function_scanner.ll"
-
-//#include "config.h"
-
-#include <string>
-
-#include "D4FunctionScanner.h"
-
-/* typedef to make the returns for the tokens shorter */
-
-/* NB: It would be best to use the same scanner (and maybe parser) for
-   both the D4 CE and Function parameters, but for the initial version 
-   far less complexity is require by the Function expression scanner
-   (since the initial version will just support variables, constants, 
-   functions and the $<type> array special form) and not function arguments
-   that are general expressions (like array slicing and/or filters).
-   
-   This comment is here because this is the first place where there is 
-   coupling between the CE parser and its scanner. I'm not sure, however,
-   if one string can be parsed by two parsers if they are using two scanners,
-   so extending the Function parser to allow function args to be any CE 
-   clause may mean some more serious work with the parsers.
-   
-   jhrg 3/10/14 */
-typedef libdap::D4FunctionParser::token token;
-
-/* This was added because of some notes on the net about compiler version
-   issues. I don't know if it's needed when using the C++ mode of flex. */
-#undef yywrap
-#define yywrap() 1
-
-/* define yyterminate as this instead of NULL */
-#define yyterminate() return(token::END)
-
-/* Use this if several scanners are needed. This will cause flex to
-   #define yyFlexLexer to be <prefix>FlexLexer (the yyFlexLexer is defined
-   in lex.<prefix>.cc. jhrg 8/8/13 */
-/* These two options turn on line counting - useful for error messages - 
-   and debugging, respectively. When debugging is on, it's possible to see
-   which scanner rules are used at which points in the input. */
-/* Do not output the default rule (where any unmatched input is echoed to 
-   stdout). When set, nodefault will cause the scanner to exit on an error. */
-/* noyywrap makes the scanner assume that EOF/EOS is the end of the input.
-   If this is not set, the scanner will assume there are more files to 
-   scan. */ 
-/* When set, warn prints a message when the default rule can be matched
-   but nodefault is given (among other warnings). */
-
-/* This pattern is slightly different from the one used by the CE scanner
-   because it allows a WORD to start with a '#' so that the #<type> 
-   array constant syntax can be used in functions. Otherwise, a WORD must
-   be able to contain this hideous mix of characters because a variable 
-   can. jhrg 3/10/14 */
-/* I added these tokens because floating point values may contain dots and
-   added a '.' to WORD will break the parsing of paths (or make for some 
-   fairly obscure code - where $Float32() takes tokens that match 'path'.
-   Since we have a separate scanner for the function expressions, might as
-   well add a FLOAT token... jhg 3/17/14 
-FLOAT   [-+eE.0-9][-+eE.0-9]*
-*/
-#line 110 "d4_function_scanner.ll"
-// Code run each time a pattern is matched
-#define YY_USER_ACTION loc->columns(yyleng);
-#line 651 "lex.d4_function.cc"
-
-#define INITIAL 0
-#define quote 1
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#include <unistd.h>
-/* %endif */
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-/* %if-c-only Reentrant structure and macros (non-C++). */
-/* %if-reentrant */
-/* %if-c-only */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif End reentrant structures and macros. */
-/* %if-bison-bridge */
-/* %endif */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-#endif
-
-/* %if-c-only */
-/* %endif */
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define ECHO LexerOutput( yytext, yyleng )
-/* %endif */
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
-\
-/* %if-c++-only C++ definition \ */\
-	if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
-		YY_FATAL_ERROR( "input in flex scanner failed" );
-/* %endif */
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#define YY_FATAL_ERROR(msg) LexerError( msg )
-/* %endif */
-#endif
-
-/* %if-tables-serialization structures and prototypes */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* %tables-yydmap generated elements */
-/* %endif */
-/* end tables serialization structures and prototypes */
-
-/* %ok-for-header */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define YY_DECL int yyFlexLexer::yylex()
-/* %endif */
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-/* %% [6.0] YY_RULE_SETUP definition goes here */
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/* %not-for-header */
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-/* %% [7.0] user's declarations go here */
-#line 114 "d4_function_scanner.ll"
-
-
-
-// Code run each time yylex is called
-loc->step();
-
-
-#line 817 "lex.d4_function.cc"
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! yyin )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyin = & std::cin;
-/* %endif */
-
-		if ( ! yyout )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyout = & std::cout;
-/* %endif */
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			yyensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
-		}
-
-		yy_load_buffer_state(  );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-/* %% [8.0] yymore()-related code goes here */
-		(yy_more_len) = 0;
-		if ( (yy_more_flag) )
-			{
-			(yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
-			(yy_more_flag) = 0;
-			}
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of yytext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-/* %% [9.0] code to set up and find next match goes here */
-		yy_current_state = (yy_start);
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 64 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_current_state != 63 );
-		yy_cp = (yy_last_accepting_cpos);
-		yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
-/* %% [10.0] code to find the action number goes here */
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-/* %% [11.0] code for yylineno update goes here */
-
-		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-			{
-			yy_size_t yyl;
-			for ( yyl = (yy_more_len); yyl < yyleng; ++yyl )
-				if ( yytext[yyl] == '\n' )
-					   
-    yylineno++;
-;
-			}
-
-do_action:	/* This label is used only to access EOF actions. */
-
-/* %% [12.0] debug code goes here */
-		if ( yy_flex_debug )
-			{
-			if ( yy_act == 0 )
-				std::cerr << "--scanner backing up\n";
-			else if ( yy_act < 29 )
-				std::cerr << "--accepting rule at line " << yy_rule_linenum[yy_act] <<
-				         "(\"" << yytext << "\")\n";
-			else if ( yy_act == 29 )
-				std::cerr << "--accepting default rule (\"" << yytext << "\")\n";
-			else if ( yy_act == 30 )
-				std::cerr << "--(end of buffer or a NUL)\n";
-			else
-				std::cerr << "--EOF (start condition " << YY_START << ")\n";
-			}
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-/* %% [13.0] actions go here */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 121 "d4_function_scanner.ll"
-return token::COMMA;
-	YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 122 "d4_function_scanner.ll"
-return token::SEMICOLON;
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 123 "d4_function_scanner.ll"
-return token::COLON;
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 125 "d4_function_scanner.ll"
-return token::LPAREN;
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 126 "d4_function_scanner.ll"
-return token::RPAREN;
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 128 "d4_function_scanner.ll"
-return token::GROUP_SEP;
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 129 "d4_function_scanner.ll"
-return token::PATH_SEP;
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 131 "d4_function_scanner.ll"
-return token::DOLLAR_BYTE;
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 132 "d4_function_scanner.ll"
-return token::DOLLAR_UINT8;
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 133 "d4_function_scanner.ll"
-return token::DOLLAR_INT8;
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 134 "d4_function_scanner.ll"
-return token::DOLLAR_UINT16;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 135 "d4_function_scanner.ll"
-return token::DOLLAR_INT16;
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 136 "d4_function_scanner.ll"
-return token::DOLLAR_UINT32;
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 137 "d4_function_scanner.ll"
-return token::DOLLAR_INT32;
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 138 "d4_function_scanner.ll"
-return token::DOLLAR_UINT64;
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 139 "d4_function_scanner.ll"
-return token::DOLLAR_INT64;
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 140 "d4_function_scanner.ll"
-return token::DOLLAR_FLOAT32;
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 141 "d4_function_scanner.ll"
-return token::DOLLAR_FLOAT64;
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 143 "d4_function_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 20:
-/* rule 20 can match eol */
-YY_RULE_SETUP
-#line 145 "d4_function_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 147 "d4_function_scanner.ll"
-{ yylval->build<std::string>(yytext); return token::WORD; }
-	YY_BREAK
-case YY_STATE_EOF(INITIAL):
-#line 149 "d4_function_scanner.ll"
-return token::END;
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 151 "d4_function_scanner.ll"
-{ BEGIN(quote); yymore(); }
-	YY_BREAK
-case 23:
-/* rule 23 can match eol */
-YY_RULE_SETUP
-#line 153 "d4_function_scanner.ll"
-yymore(); /* Anything that's not a double quote or a backslash */
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 155 "d4_function_scanner.ll"
-yymore(); /* This matches the escaped double quote (\") */
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 157 "d4_function_scanner.ll"
-yymore(); /* This matches an escaped escape (\\) */
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 159 "d4_function_scanner.ll"
-{
-                    BEGIN(INITIAL);
-                    if (yytext) {
-                        YY_FATAL_ERROR("Inside a string, backslash (\\) can escape a double quote or must itself be escaped (\\\\).");
-                    }
-                }
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 166 "d4_function_scanner.ll"
-{ 
-                /* An unescaped double quote in the 'quote' state indicates the end of the string */
-                BEGIN(INITIAL); 
-                yylval->build<std::string>(yytext); 
-                return token::STRING;
-            }
-	YY_BREAK
-case YY_STATE_EOF(quote):
-#line 173 "d4_function_scanner.ll"
-{
-                  BEGIN(INITIAL);   /* resetting the state is needed for reentrant parsers */
-                  YY_FATAL_ERROR("Unterminated quote");
-                }
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 178 "d4_function_scanner.ll"
-{
-        BEGIN(INITIAL);
-        if (yytext) {
-            YY_FATAL_ERROR("Characters found in the input were not recognized.");
-        }
-    }
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 184 "d4_function_scanner.ll"
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-#line 1115 "lex.d4_function.cc"
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
-				yy_cp = (yy_last_accepting_cpos);
-				yy_current_state = (yy_last_accepting_state);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( yywrap(  ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of yylex */
-/* %ok-for-header */
-
-/* %if-c++-only */
-/* %not-for-header */
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
-{
-	yyin = arg_yyin;
-	yyout = arg_yyout;
-	yy_c_buf_p = 0;
-	yy_init = 0;
-	yy_start = 0;
-	yy_flex_debug = 0;
-	yylineno = 1;	// this will only get updated if %option yylineno
-
-	yy_did_buffer_switch_on_eof = 0;
-
-	yy_looking_for_trail_begin = 0;
-	yy_more_flag = 0;
-	yy_more_len = 0;
-	yy_more_offset = yy_prev_more_offset = 0;
-
-	yy_start_stack_ptr = yy_start_stack_depth = 0;
-	yy_start_stack = NULL;
-
-	yy_buffer_stack = 0;
-	yy_buffer_stack_top = 0;
-	yy_buffer_stack_max = 0;
-
-	yy_state_buf = 0;
-
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::~yyFlexLexer()
-{
-	delete [] yy_state_buf;
-	d4_functionfree(yy_start_stack  );
-	yy_delete_buffer( YY_CURRENT_BUFFER );
-	d4_functionfree(yy_buffer_stack  );
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
-{
-	if ( new_in )
-		{
-		yy_delete_buffer( YY_CURRENT_BUFFER );
-		yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  ) );
-		}
-
-	if ( new_out )
-		yyout = new_out;
-}
-
-#ifdef YY_INTERACTIVE
-size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ )
-#else
-size_t yyFlexLexer::LexerInput( char* buf, size_t max_size )
-#endif
-{
-	if ( yyin->eof() || yyin->fail() )
-		return 0;
-
-#ifdef YY_INTERACTIVE
-	yyin->get( buf[0] );
-
-	if ( yyin->eof() )
-		return 0;
-
-	if ( yyin->bad() )
-		return -1;
-
-	return 1;
-
-#else
-	(void) yyin->read( buf, max_size );
-
-	if ( yyin->bad() )
-		return -1;
-	else
-		return yyin->gcount();
-#endif
-}
-
-void yyFlexLexer::LexerOutput( const char* buf, size_t size )
-{
-	(void) yyout->write( buf, size );
-}
-/* %ok-for-header */
-
-/* %endif */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-int yyFlexLexer::yy_get_next_buffer()
-/* %endif */
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			yy_size_t num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				yy_size_t new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					d4_functionrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) d4_functionrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-/* %if-c-only */
-/* %not-for-header */
-
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_get_previous_state()
-/* %endif */
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-/* %% [15.0] code to get the start state into yy_current_state goes here */
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-/* %% [16.0] code to find the next state goes here */
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 64 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
-/* %endif */
-{
-	register int yy_is_jam;
-    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-	register char *yy_cp = (yy_c_buf_p);
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 64 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 63);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyunput( int c, register char* yy_bp)
-/* %endif */
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up yytext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register yy_size_t number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-/* %% [18.0] update yylineno here */
-
-    if ( c == '\n' ){
-        --yylineno;
-    }
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yyinput()
-/* %endif */
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap(  ) )
-						return 0;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve yytext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-/* %% [19.0] update BOL and yylineno */
-	if ( c == '\n' )
-		   
-    yylineno++;
-;
-
-	return c;
-}
-/* %if-c-only */
-/* %endif */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyrestart( std::istream* input_file )
-/* %endif */
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
-	}
-
-	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-	yy_load_buffer_state(  );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-/* %endif */
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		yypop_buffer_state();
-	 *		yypush_buffer_state(new_buffer);
-     */
-	yyensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state(  );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_load_buffer_state()
-/* %endif */
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
-/* %endif */
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) d4_functionalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) d4_functionalloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer( b, file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		d4_functionfree((void *) b->yy_ch_buf  );
-
-	d4_functionfree((void *) b  );
-}
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-
-extern "C" int isatty (int );
-
-/* %endif */
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
-/* %endif */
-
-{
-	int oerrno = errno;
-    
-	yy_flush_buffer( b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-	b->yy_is_interactive = 0;
-/* %endif */
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state(  );
-}
-
-/* %if-c-or-c++ */
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
-/* %endif */
-{
-    	if (new_buffer == NULL)
-		return;
-
-	yyensure_buffer_stack();
-
-	/* This block is copied from yy_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state(  );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypop_buffer_state (void)
-/* %endif */
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	yy_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state(  );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yyensure_buffer_stack(void)
-/* %endif */
-{
-	yy_size_t num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_functionalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_functionrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_push_state( int new_state )
-/* %endif */
-{
-    	if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-		{
-		yy_size_t new_size;
-
-		(yy_start_stack_depth) += YY_START_STACK_INCR;
-		new_size = (yy_start_stack_depth) * sizeof( int );
-
-		if ( ! (yy_start_stack) )
-			(yy_start_stack) = (int *) d4_functionalloc(new_size  );
-
-		else
-			(yy_start_stack) = (int *) d4_functionrealloc((void *) (yy_start_stack),new_size  );
-
-		if ( ! (yy_start_stack) )
-			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-		}
-
-	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
-
-	BEGIN(new_state);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_pop_state()
-/* %endif */
-{
-    	if ( --(yy_start_stack_ptr) < 0 )
-		YY_FATAL_ERROR( "start-condition stack underflow" );
-
-	BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yy_top_state()
-/* %endif */
-{
-    	return (yy_start_stack)[(yy_start_stack_ptr) - 1];
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::LexerError( yyconst char msg[] )
-{
-    	std::cerr << msg << std::endl;
-	exit( YY_EXIT_FAILURE );
-}
-/* %endif */
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		yytext[yyleng] = (yy_hold_char); \
-		(yy_c_buf_p) = yytext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		yyleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/* %if-c-only */
-/* %if-reentrant */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/* %if-reentrant */
-/* %if-bison-bridge */
-/* %endif */
-/* %endif if-c-only */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *d4_functionalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *d4_functionrealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void d4_functionfree (void * ptr )
-{
-	free( (char *) ptr );	/* see d4_functionrealloc() for (char *) cast */
-}
-
-/* %if-tables-serialization definitions */
-/* %define-yytables   The name for this specific scanner's tables. */
-#define YYTABLES_NAME "yytables"
-/* %endif */
-
-/* %ok-for-header */
-
-#line 184 "d4_function_scanner.ll"
-
-
-
diff --git a/d4_ce/lex.d4_ce.cc b/d4_ce/lex.d4_ce.cc
deleted file mode 100644
index becb9bd..0000000
--- a/d4_ce/lex.d4_ce.cc
+++ /dev/null
@@ -1,2145 +0,0 @@
-
-#line 3 "lex.d4_ce.cc"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-/* %not-for-header */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-/* %ok-for-header */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* %if-c++-only */
-    /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
-     * following macro. This is required in order to pass the c++-multiple-scanners
-     * test in the regression suite. We get reports that it breaks inheritance.
-     * We will address this in a future release of flex, or omit the C++ scanner
-     * altogether.
-     */
-    #define yyFlexLexer d4_ceFlexLexer
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-/* %if-c-only */
-/* %endif */
-
-/* %if-tables-serialization */
-/* %endif */
-/* end standard C headers. */
-
-/* %if-c-or-c++ */
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-typedef uint64_t flex_uint64_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-/* %endif */
-
-/* %if-c++-only */
-/* begin standard C++ headers. */
-#include <iostream> 
-#include <errno.h>
-#include <cstdlib>
-#include <cstring>
-/* end standard C++ headers. */
-/* %endif */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* %not-for-header */
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-/* %ok-for-header */
-
-/* %if-reentrant */
-/* %endif */
-
-/* %if-not-reentrant */
-
-/* %endif */
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-/* %if-not-reentrant */
-extern yy_size_t yyleng;
-/* %endif */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex. 
-     *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
-     *       normally declared as a register variable-- so it is not worth it.
-     */
-    #define  YY_LESS_LINENO(n) \
-            do { \
-                yy_size_t yyl;\
-                for ( yyl = n; yyl < yyleng; ++yyl )\
-                    if ( yytext[yyl] == '\n' )\
-                        --yylineno;\
-            }while(0)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-	std::istream* yy_input_file;
-/* %endif */
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	yy_size_t yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %if-not-reentrant */
-/* %endif */
-/* %ok-for-header */
-
-/* %endif */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* %if-c-only Standard (non-C++) definition */
-/* %if-not-reentrant */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-/* %endif */
-
-void *d4_cealloc (yy_size_t  );
-void *d4_cerealloc (void *,yy_size_t  );
-void d4_cefree (void *  );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
-/* Begin user sect3 */
-#define YY_SKIP_YYWRAP
-
-#define FLEX_DEBUG
-
-typedef unsigned char YY_CHAR;
-
-#define yytext_ptr yytext
-
-#include <FlexLexer.h>
-
-int yyFlexLexer::yywrap() { return 1; }
-int yyFlexLexer::yylex()
-	{
-	LexerError( "yyFlexLexer::yylex invoked but %option yyclass used" );
-	return 0;
-	}
-
-#define YY_DECL int D4CEScanner::yylex()
-
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	(yytext_ptr) -= (yy_more_len); \
-	yyleng = (yy_size_t) (yy_cp - (yytext_ptr)); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
-	(yy_c_buf_p) = yy_cp;
-
-/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 32
-#define YY_END_OF_BUFFER 33
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[46] =
-    {   0,
-        0,    0,   26,   26,   33,   31,   22,   23,   23,   24,
-       25,   24,    4,   10,    9,    3,    5,   16,   11,   14,
-       24,    1,    2,    7,    6,    8,   24,   26,   30,   29,
-       22,   23,   24,   13,   19,   17,   12,   15,   20,   21,
-       18,   26,   27,   28,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    5,    6,    7,    1,    8,    1,    1,    1,
-        1,    8,    8,    9,    8,   10,   11,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,   12,   13,   14,
-       15,   16,    1,   17,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-       18,   19,   20,    1,    8,    1,    8,    8,    8,    8,
-
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,   21,   22,   23,   24,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst flex_int32_t yy_meta[25] =
-    {   0,
-        1,    1,    1,    1,    2,    3,    2,    2,    1,    1,
-        1,    1,    1,    1,    2,    1,    2,    1,    4,    1,
-        1,    1,    1,    2
-    } ;
-
-static yyconst flex_int16_t yy_base[49] =
-    {   0,
-        0,    0,   19,   20,   54,   58,   45,   24,   26,   31,
-       58,   30,   58,   58,   58,   58,   58,   17,   29,   18,
-       28,   58,   58,   58,   58,   58,   27,    0,   58,   29,
-       39,   33,   25,   58,   58,   58,   58,   58,   58,   58,
-       58,    0,   58,   58,   58,   48,   51,   55
-    } ;
-
-static yyconst flex_int16_t yy_def[49] =
-    {   0,
-       45,    1,   46,   46,   45,   45,   45,   45,   45,   47,
-       45,   47,   45,   45,   45,   45,   45,   45,   45,   45,
-       47,   45,   45,   45,   45,   45,   47,   48,   45,   45,
-       45,   45,   47,   45,   45,   45,   45,   45,   45,   45,
-       45,   48,   45,   45,    0,   45,   45,   45
-    } ;
-
-static yyconst flex_int16_t yy_nxt[83] =
-    {   0,
-        6,    7,    8,    9,   10,   11,    6,   12,   13,   14,
-       15,   16,   17,   18,   19,   20,   21,   22,   12,   23,
-       24,   25,   26,   27,   29,   29,   32,   32,   32,   32,
-       35,   36,   38,   39,   43,   32,   32,   30,   30,   45,
-       31,   41,   40,   37,   45,   34,   31,   44,   28,   28,
-       28,   28,   33,   45,   33,   42,   42,    5,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45
-    } ;
-
-static yyconst flex_int16_t yy_chk[83] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    3,    4,    8,    8,    9,    9,
-       18,   18,   20,   20,   30,   32,   32,    3,    4,   33,
-       31,   27,   21,   19,   12,   10,    7,   30,   46,   46,
-       46,   46,   47,    5,   47,   48,   48,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45
-    } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[33] =
-    {   0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,     };
-
-static yyconst flex_int16_t yy_rule_linenum[32] =
-    {   0,
-       94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-      104,  106,  107,  108,  109,  110,  111,  112,  113,  114,
-      115,  117,  119,  121,  125,  127,  129,  131,  133,  140,
-      152
-    } ;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() ((yy_more_flag) = 1)
-#define YY_MORE_ADJ (yy_more_len)
-#define YY_RESTORE_YY_MORE_OFFSET
-#line 1 "d4_ce_scanner.ll"
-/*
- -*- mode: c++; c-basic-offset:4 -*-
-
- This file is part of libdap, A C++ implementation of the OPeNDAP Data
- Access Protocol.
-
- Copyright (c) 2013 OPeNDAP, Inc.
- Author: James Gallagher <jgallagher at opendap.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- 
- This library 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
- Lesser General Public License for more details.
- 
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
-*/ 
-#line 29 "d4_ce_scanner.ll"
-//#include "config.h"
-
-#include <string>
-
-#include "D4CEScanner.h"
-
-/* typedef to make the returns for the tokens shorter */
-typedef libdap::D4CEParser::token token;
-
-/* This was added because of some notes on the net about compiler version
-   issues. I don't know if it's needed when using the C++ mode of flex. */
-#undef yywrap
-#define yywrap() 1
-
-/* define yyterminate as this instead of NULL */
-#define yyterminate() return(token::END)
-
-/* Use this if several scanners are needed. This will cause flex to
-   #define yyFlexLexer to be <prefix>FlexLexer (the yyFlexLexer is defined
-   in lex.<prefix>.cc. jhrg 8/8/13 */
-/* These two options turn on line counting - useful for error messages - 
-   and debugging, respectively. When debugging is on, it's possible to see
-   which scanner rules are used at which points in the input. */
-/* Do not output the default rule (where any unmatched input is echoed to 
-   stdout). When set, nodefault will cause the scanner to exit on an error. */
-/* noyywrap makes the scanner assume that EOF/EOS is the end of the input.
-   If this is not set, the scanner will assume there are more files to 
-   scan. */ 
-/* When set, warn prints a message when the default rule can be matched
-   but nodefault is given (among other warnings). */
-
-/* This pattern just ensures that a word does not start with '#' which
-   is the DAP2 comment character. */
-#line 83 "d4_ce_scanner.ll"
-// Code run each time a pattern is matched
-#define YY_USER_ACTION loc->columns(yyleng);
-#line 609 "lex.d4_ce.cc"
-
-#define INITIAL 0
-#define quote 1
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#include <unistd.h>
-/* %endif */
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-/* %if-c-only Reentrant structure and macros (non-C++). */
-/* %if-reentrant */
-/* %if-c-only */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif End reentrant structures and macros. */
-/* %if-bison-bridge */
-/* %endif */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-#endif
-
-/* %if-c-only */
-/* %endif */
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define ECHO LexerOutput( yytext, yyleng )
-/* %endif */
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
-\
-/* %if-c++-only C++ definition \ */\
-	if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
-		YY_FATAL_ERROR( "input in flex scanner failed" );
-/* %endif */
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#define YY_FATAL_ERROR(msg) LexerError( msg )
-/* %endif */
-#endif
-
-/* %if-tables-serialization structures and prototypes */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* %tables-yydmap generated elements */
-/* %endif */
-/* end tables serialization structures and prototypes */
-
-/* %ok-for-header */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define YY_DECL int yyFlexLexer::yylex()
-/* %endif */
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-/* %% [6.0] YY_RULE_SETUP definition goes here */
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/* %not-for-header */
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-/* %% [7.0] user's declarations go here */
-#line 87 "d4_ce_scanner.ll"
-
-
-
-// Code run each time yylex is called
-loc->step();
-
-
-#line 775 "lex.d4_ce.cc"
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! yyin )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyin = & std::cin;
-/* %endif */
-
-		if ( ! yyout )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyout = & std::cout;
-/* %endif */
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			yyensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
-		}
-
-		yy_load_buffer_state(  );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-/* %% [8.0] yymore()-related code goes here */
-		(yy_more_len) = 0;
-		if ( (yy_more_flag) )
-			{
-			(yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
-			(yy_more_flag) = 0;
-			}
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of yytext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-/* %% [9.0] code to set up and find next match goes here */
-		yy_current_state = (yy_start);
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 46 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_current_state != 45 );
-		yy_cp = (yy_last_accepting_cpos);
-		yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
-/* %% [10.0] code to find the action number goes here */
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-/* %% [11.0] code for yylineno update goes here */
-
-		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-			{
-			yy_size_t yyl;
-			for ( yyl = (yy_more_len); yyl < yyleng; ++yyl )
-				if ( yytext[yyl] == '\n' )
-					   
-    yylineno++;
-;
-			}
-
-do_action:	/* This label is used only to access EOF actions. */
-
-/* %% [12.0] debug code goes here */
-		if ( yy_flex_debug )
-			{
-			if ( yy_act == 0 )
-				std::cerr << "--scanner backing up\n";
-			else if ( yy_act < 32 )
-				std::cerr << "--accepting rule at line " << yy_rule_linenum[yy_act] <<
-				         "(\"" << yytext << "\")\n";
-			else if ( yy_act == 32 )
-				std::cerr << "--accepting default rule (\"" << yytext << "\")\n";
-			else if ( yy_act == 33 )
-				std::cerr << "--(end of buffer or a NUL)\n";
-			else
-				std::cerr << "--EOF (start condition " << YY_START << ")\n";
-			}
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-/* %% [13.0] actions go here */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 94 "d4_ce_scanner.ll"
-return token::LBRACKET;
-	YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 95 "d4_ce_scanner.ll"
-return token::RBRACKET;
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 96 "d4_ce_scanner.ll"
-return token::COLON;
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 97 "d4_ce_scanner.ll"
-return token::COMMA;
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 98 "d4_ce_scanner.ll"
-return token::SEMICOLON;
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 99 "d4_ce_scanner.ll"
-return token::PIPE;
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 100 "d4_ce_scanner.ll"
-return token::LBRACE;
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 101 "d4_ce_scanner.ll"
-return token::RBRACE;
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 102 "d4_ce_scanner.ll"
-return token::GROUP_SEP;
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 103 "d4_ce_scanner.ll"
-return token::PATH_SEP;
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 104 "d4_ce_scanner.ll"
-return token::ASSIGN;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 106 "d4_ce_scanner.ll"
-return token::EQUAL;
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 107 "d4_ce_scanner.ll"
-return token::NOT_EQUAL;
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 108 "d4_ce_scanner.ll"
-return token::GREATER;
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 109 "d4_ce_scanner.ll"
-return token::GREATER_EQUAL;
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 110 "d4_ce_scanner.ll"
-return token::LESS;
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 111 "d4_ce_scanner.ll"
-return token::LESS_EQUAL;
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 112 "d4_ce_scanner.ll"
-return token::REGEX_MATCH;
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 113 "d4_ce_scanner.ll"
-return token::LESS_BBOX;
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 114 "d4_ce_scanner.ll"
-return token::GREATER_BBOX;
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 115 "d4_ce_scanner.ll"
-return token::MASK;
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 117 "d4_ce_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 23:
-/* rule 23 can match eol */
-YY_RULE_SETUP
-#line 119 "d4_ce_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 121 "d4_ce_scanner.ll"
-{ yylval->build<std::string>(yytext); return token::WORD; }
-	YY_BREAK
-case YY_STATE_EOF(INITIAL):
-#line 123 "d4_ce_scanner.ll"
-return token::END;
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 125 "d4_ce_scanner.ll"
-{ BEGIN(quote); yymore(); }
-	YY_BREAK
-case 26:
-/* rule 26 can match eol */
-YY_RULE_SETUP
-#line 127 "d4_ce_scanner.ll"
-yymore(); /* Anything that's not a double quote or a backslash */
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 129 "d4_ce_scanner.ll"
-yymore(); /* This matches the escaped double quote (\") */
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 131 "d4_ce_scanner.ll"
-yymore(); /* This matches an escaped escape (\\) */
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 133 "d4_ce_scanner.ll"
-{
-                    BEGIN(INITIAL);
-                    if (yytext) {
-                        YY_FATAL_ERROR("Inside a string, backslash (\\) can escape a double quote or must itself be escaped (\\\\).");
-                    }
-                }
-	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 140 "d4_ce_scanner.ll"
-{ 
-                /* An unescaped double quote in the 'quote' state indicates the end of the string */
-                BEGIN(INITIAL); 
-                yylval->build<std::string>(yytext); 
-                return token::STRING;
-            }
-	YY_BREAK
-case YY_STATE_EOF(quote):
-#line 147 "d4_ce_scanner.ll"
-{
-                  BEGIN(INITIAL);   /* resetting the state is needed for reentrant parsers */
-                  YY_FATAL_ERROR("Unterminated quote");
-                }
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 152 "d4_ce_scanner.ll"
-{
-        BEGIN(INITIAL);
-        if (yytext) {
-            YY_FATAL_ERROR("Characters found in the input were not recognized.");
-        }
-    }
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 158 "d4_ce_scanner.ll"
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-#line 1088 "lex.d4_ce.cc"
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
-				yy_cp = (yy_last_accepting_cpos);
-				yy_current_state = (yy_last_accepting_state);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( yywrap(  ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of yylex */
-/* %ok-for-header */
-
-/* %if-c++-only */
-/* %not-for-header */
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
-{
-	yyin = arg_yyin;
-	yyout = arg_yyout;
-	yy_c_buf_p = 0;
-	yy_init = 0;
-	yy_start = 0;
-	yy_flex_debug = 0;
-	yylineno = 1;	// this will only get updated if %option yylineno
-
-	yy_did_buffer_switch_on_eof = 0;
-
-	yy_looking_for_trail_begin = 0;
-	yy_more_flag = 0;
-	yy_more_len = 0;
-	yy_more_offset = yy_prev_more_offset = 0;
-
-	yy_start_stack_ptr = yy_start_stack_depth = 0;
-	yy_start_stack = NULL;
-
-	yy_buffer_stack = 0;
-	yy_buffer_stack_top = 0;
-	yy_buffer_stack_max = 0;
-
-	yy_state_buf = 0;
-
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::~yyFlexLexer()
-{
-	delete [] yy_state_buf;
-	d4_cefree(yy_start_stack  );
-	yy_delete_buffer( YY_CURRENT_BUFFER );
-	d4_cefree(yy_buffer_stack  );
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
-{
-	if ( new_in )
-		{
-		yy_delete_buffer( YY_CURRENT_BUFFER );
-		yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  ) );
-		}
-
-	if ( new_out )
-		yyout = new_out;
-}
-
-#ifdef YY_INTERACTIVE
-size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ )
-#else
-size_t yyFlexLexer::LexerInput( char* buf, size_t max_size )
-#endif
-{
-	if ( yyin->eof() || yyin->fail() )
-		return 0;
-
-#ifdef YY_INTERACTIVE
-	yyin->get( buf[0] );
-
-	if ( yyin->eof() )
-		return 0;
-
-	if ( yyin->bad() )
-		return -1;
-
-	return 1;
-
-#else
-	(void) yyin->read( buf, max_size );
-
-	if ( yyin->bad() )
-		return -1;
-	else
-		return yyin->gcount();
-#endif
-}
-
-void yyFlexLexer::LexerOutput( const char* buf, size_t size )
-{
-	(void) yyout->write( buf, size );
-}
-/* %ok-for-header */
-
-/* %endif */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-int yyFlexLexer::yy_get_next_buffer()
-/* %endif */
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			yy_size_t num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				yy_size_t new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					d4_cerealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) d4_cerealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-/* %if-c-only */
-/* %not-for-header */
-
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_get_previous_state()
-/* %endif */
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-/* %% [15.0] code to get the start state into yy_current_state goes here */
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-/* %% [16.0] code to find the next state goes here */
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 46 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
-/* %endif */
-{
-	register int yy_is_jam;
-    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-	register char *yy_cp = (yy_c_buf_p);
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 46 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 45);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyunput( int c, register char* yy_bp)
-/* %endif */
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up yytext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register yy_size_t number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-/* %% [18.0] update yylineno here */
-
-    if ( c == '\n' ){
-        --yylineno;
-    }
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yyinput()
-/* %endif */
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap(  ) )
-						return 0;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve yytext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-/* %% [19.0] update BOL and yylineno */
-	if ( c == '\n' )
-		   
-    yylineno++;
-;
-
-	return c;
-}
-/* %if-c-only */
-/* %endif */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyrestart( std::istream* input_file )
-/* %endif */
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
-	}
-
-	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-	yy_load_buffer_state(  );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-/* %endif */
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		yypop_buffer_state();
-	 *		yypush_buffer_state(new_buffer);
-     */
-	yyensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state(  );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_load_buffer_state()
-/* %endif */
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
-/* %endif */
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) d4_cealloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) d4_cealloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer( b, file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		d4_cefree((void *) b->yy_ch_buf  );
-
-	d4_cefree((void *) b  );
-}
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-
-extern "C" int isatty (int );
-
-/* %endif */
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
-/* %endif */
-
-{
-	int oerrno = errno;
-    
-	yy_flush_buffer( b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-	b->yy_is_interactive = 0;
-/* %endif */
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state(  );
-}
-
-/* %if-c-or-c++ */
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
-/* %endif */
-{
-    	if (new_buffer == NULL)
-		return;
-
-	yyensure_buffer_stack();
-
-	/* This block is copied from yy_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state(  );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypop_buffer_state (void)
-/* %endif */
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	yy_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state(  );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yyensure_buffer_stack(void)
-/* %endif */
-{
-	yy_size_t num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_cealloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_cerealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_push_state( int new_state )
-/* %endif */
-{
-    	if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-		{
-		yy_size_t new_size;
-
-		(yy_start_stack_depth) += YY_START_STACK_INCR;
-		new_size = (yy_start_stack_depth) * sizeof( int );
-
-		if ( ! (yy_start_stack) )
-			(yy_start_stack) = (int *) d4_cealloc(new_size  );
-
-		else
-			(yy_start_stack) = (int *) d4_cerealloc((void *) (yy_start_stack),new_size  );
-
-		if ( ! (yy_start_stack) )
-			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-		}
-
-	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
-
-	BEGIN(new_state);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_pop_state()
-/* %endif */
-{
-    	if ( --(yy_start_stack_ptr) < 0 )
-		YY_FATAL_ERROR( "start-condition stack underflow" );
-
-	BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yy_top_state()
-/* %endif */
-{
-    	return (yy_start_stack)[(yy_start_stack_ptr) - 1];
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::LexerError( yyconst char msg[] )
-{
-    	std::cerr << msg << std::endl;
-	exit( YY_EXIT_FAILURE );
-}
-/* %endif */
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		yytext[yyleng] = (yy_hold_char); \
-		(yy_c_buf_p) = yytext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		yyleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/* %if-c-only */
-/* %if-reentrant */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/* %if-reentrant */
-/* %if-bison-bridge */
-/* %endif */
-/* %endif if-c-only */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *d4_cealloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *d4_cerealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void d4_cefree (void * ptr )
-{
-	free( (char *) ptr );	/* see d4_cerealloc() for (char *) cast */
-}
-
-/* %if-tables-serialization definitions */
-/* %define-yytables   The name for this specific scanner's tables. */
-#define YYTABLES_NAME "yytables"
-/* %endif */
-
-/* %ok-for-header */
-
-#line 158 "d4_ce_scanner.ll"
-
-
-
diff --git a/d4_ce/lex.d4_function.cc b/d4_ce/lex.d4_function.cc
deleted file mode 100644
index 3f57dbc..0000000
--- a/d4_ce/lex.d4_function.cc
+++ /dev/null
@@ -1,2172 +0,0 @@
-
-#line 3 "lex.d4_function.cc"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-/* %not-for-header */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-/* %ok-for-header */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* %if-c++-only */
-    /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
-     * following macro. This is required in order to pass the c++-multiple-scanners
-     * test in the regression suite. We get reports that it breaks inheritance.
-     * We will address this in a future release of flex, or omit the C++ scanner
-     * altogether.
-     */
-    #define yyFlexLexer d4_functionFlexLexer
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-/* %if-c-only */
-/* %endif */
-
-/* %if-tables-serialization */
-/* %endif */
-/* end standard C headers. */
-
-/* %if-c-or-c++ */
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-typedef uint64_t flex_uint64_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-/* %endif */
-
-/* %if-c++-only */
-/* begin standard C++ headers. */
-#include <iostream> 
-#include <errno.h>
-#include <cstdlib>
-#include <cstring>
-/* end standard C++ headers. */
-/* %endif */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* %not-for-header */
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-/* %ok-for-header */
-
-/* %if-reentrant */
-/* %endif */
-
-/* %if-not-reentrant */
-
-/* %endif */
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-/* %if-not-reentrant */
-extern yy_size_t yyleng;
-/* %endif */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex. 
-     *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
-     *       normally declared as a register variable-- so it is not worth it.
-     */
-    #define  YY_LESS_LINENO(n) \
-            do { \
-                yy_size_t yyl;\
-                for ( yyl = n; yyl < yyleng; ++yyl )\
-                    if ( yytext[yyl] == '\n' )\
-                        --yylineno;\
-            }while(0)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-	std::istream* yy_input_file;
-/* %endif */
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	yy_size_t yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %if-not-reentrant */
-/* %endif */
-/* %ok-for-header */
-
-/* %endif */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* %if-c-only Standard (non-C++) definition */
-/* %if-not-reentrant */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-/* %endif */
-
-void *d4_functionalloc (yy_size_t  );
-void *d4_functionrealloc (void *,yy_size_t  );
-void d4_functionfree (void *  );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
-/* Begin user sect3 */
-#define YY_SKIP_YYWRAP
-
-#define FLEX_DEBUG
-
-typedef unsigned char YY_CHAR;
-
-#define yytext_ptr yytext
-
-#include <FlexLexer.h>
-
-int yyFlexLexer::yywrap() { return 1; }
-int yyFlexLexer::yylex()
-	{
-	LexerError( "yyFlexLexer::yylex invoked but %option yyclass used" );
-	return 0;
-	}
-
-#define YY_DECL int D4FunctionScanner::yylex()
-
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	(yytext_ptr) -= (yy_more_len); \
-	yyleng = (yy_size_t) (yy_cp - (yytext_ptr)); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
-	(yy_c_buf_p) = yy_cp;
-
-/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 29
-#define YY_END_OF_BUFFER 30
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[64] =
-    {   0,
-        0,    0,   23,   23,   30,   28,   19,   20,   20,   21,
-       22,   28,    4,    5,    1,    7,    6,    3,    2,   23,
-       27,   26,   19,   20,   21,    0,    0,    0,    0,   23,
-       24,   25,    0,    0,    0,    0,    0,    0,    0,    0,
-        8,    0,    0,    0,    0,   10,    0,    0,   12,   14,
-       16,    0,    0,    0,    9,    0,    0,   11,   13,   15,
-       17,   18,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    5,    6,    5,    7,    5,    1,    1,    8,
-        9,    5,    5,   10,    5,   11,   12,    5,   13,   14,
-       15,   16,    5,   17,    5,   18,    5,   19,   20,    1,
-        1,    1,    1,    5,    5,   21,    5,    5,    5,   22,
-        5,    5,   23,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,   24,    5,    5,    5,    5,    5,
-        1,   25,    1,    1,    5,    1,   26,    5,    5,    5,
-
-       27,    5,    5,    5,    5,    5,    5,   28,    5,   29,
-       30,    5,    5,    5,    5,   31,    5,    5,    5,    5,
-       32,    5,    1,    1,    1,    5,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst flex_int32_t yy_meta[33] =
-    {   0,
-        1,    1,    1,    1,    2,    3,    1,    1,    1,    1,
-        1,    1,    2,    2,    2,    2,    2,    2,    1,    1,
-        2,    2,    2,    2,    4,    2,    2,    2,    2,    2,
-        2,    2
-    } ;
-
-static yyconst flex_int16_t yy_base[67] =
-    {   0,
-        0,    0,   27,   28,   89,   90,   86,   32,   34,    0,
-       90,   18,   90,   90,   90,   90,   90,   90,   90,    0,
-       90,   37,   85,   41,    0,   54,   57,   55,   60,    0,
-       90,   90,   51,   51,   49,   50,   51,   51,   33,   45,
-       90,   44,   57,   59,   56,   90,   41,   32,   90,   90,
-       90,   51,   47,   44,   90,   43,   39,   90,   90,   90,
-       90,   90,   90,   62,   65,   69
-    } ;
-
-static yyconst flex_int16_t yy_def[67] =
-    {   0,
-       63,    1,   64,   64,   63,   63,   63,   63,   63,   65,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   66,
-       63,   63,   63,   63,   65,   63,   63,   63,   63,   66,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,    0,   63,   63,   63
-    } ;
-
-static yyconst flex_int16_t yy_nxt[123] =
-    {   0,
-        6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
-       16,   17,   10,   10,   10,   10,   10,   10,   18,   19,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   21,   21,   24,   24,   24,   24,   26,   27,
-       28,   29,   31,   24,   24,   43,   56,   44,   57,   45,
-       46,   22,   22,   52,   62,   53,   61,   54,   55,   60,
-       59,   32,   20,   20,   20,   20,   25,   58,   25,   30,
-       30,   51,   50,   49,   48,   47,   42,   41,   40,   39,
-       38,   37,   36,   35,   34,   33,   23,   23,   63,    5,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63
-    } ;
-
-static yyconst flex_int16_t yy_chk[123] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    3,    4,    8,    8,    9,    9,   12,   12,
-       12,   12,   22,   24,   24,   39,   48,   39,   48,   39,
-       39,    3,    4,   47,   57,   47,   56,   47,   47,   54,
-       53,   22,   64,   64,   64,   64,   65,   52,   65,   66,
-       66,   45,   44,   43,   42,   40,   38,   37,   36,   35,
-       34,   33,   29,   28,   27,   26,   23,    7,    5,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63
-    } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[30] =
-    {   0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    1, 0, 0, 1, 0, 0, 0, 0, 0, 0,     };
-
-static yyconst flex_int16_t yy_rule_linenum[29] =
-    {   0,
-      121,  122,  123,  125,  126,  128,  129,  131,  132,  133,
-      134,  135,  136,  137,  138,  139,  140,  141,  143,  145,
-      147,  151,  153,  155,  157,  159,  166,  178
-    } ;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() ((yy_more_flag) = 1)
-#define YY_MORE_ADJ (yy_more_len)
-#define YY_RESTORE_YY_MORE_OFFSET
-#line 1 "d4_function_scanner.ll"
-/*
- -*- mode: c++; c-basic-offset:4 -*-
-
- This file is part of libdap, A C++ implementation of the OPeNDAP Data
- Access Protocol.
-
- Copyright (c) 2014 OPeNDAP, Inc.
- Author: James Gallagher <jgallagher at opendap.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- 
- This library 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
- Lesser General Public License for more details.
- 
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
-*/ 
-#line 29 "d4_function_scanner.ll"
-
-//#include "config.h"
-
-#include <string>
-
-#include "D4FunctionScanner.h"
-
-/* typedef to make the returns for the tokens shorter */
-
-/* NB: It would be best to use the same scanner (and maybe parser) for
-   both the D4 CE and Function parameters, but for the initial version 
-   far less complexity is require by the Function expression scanner
-   (since the initial version will just support variables, constants, 
-   functions and the $<type> array special form) and not function arguments
-   that are general expressions (like array slicing and/or filters).
-   
-   This comment is here because this is the first place where there is 
-   coupling between the CE parser and its scanner. I'm not sure, however,
-   if one string can be parsed by two parsers if they are using two scanners,
-   so extending the Function parser to allow function args to be any CE 
-   clause may mean some more serious work with the parsers.
-   
-   jhrg 3/10/14 */
-typedef libdap::D4FunctionParser::token token;
-
-/* This was added because of some notes on the net about compiler version
-   issues. I don't know if it's needed when using the C++ mode of flex. */
-#undef yywrap
-#define yywrap() 1
-
-/* define yyterminate as this instead of NULL */
-#define yyterminate() return(token::END)
-
-/* Use this if several scanners are needed. This will cause flex to
-   #define yyFlexLexer to be <prefix>FlexLexer (the yyFlexLexer is defined
-   in lex.<prefix>.cc. jhrg 8/8/13 */
-/* These two options turn on line counting - useful for error messages - 
-   and debugging, respectively. When debugging is on, it's possible to see
-   which scanner rules are used at which points in the input. */
-/* Do not output the default rule (where any unmatched input is echoed to 
-   stdout). When set, nodefault will cause the scanner to exit on an error. */
-/* noyywrap makes the scanner assume that EOF/EOS is the end of the input.
-   If this is not set, the scanner will assume there are more files to 
-   scan. */ 
-/* When set, warn prints a message when the default rule can be matched
-   but nodefault is given (among other warnings). */
-
-/* This pattern is slightly different from the one used by the CE scanner
-   because it allows a WORD to start with a '#' so that the #<type> 
-   array constant syntax can be used in functions. Otherwise, a WORD must
-   be able to contain this hideous mix of characters because a variable 
-   can. jhrg 3/10/14 */
-/* I added these tokens because floating point values may contain dots and
-   added a '.' to WORD will break the parsing of paths (or make for some 
-   fairly obscure code - where $Float32() takes tokens that match 'path'.
-   Since we have a separate scanner for the function expressions, might as
-   well add a FLOAT token... jhg 3/17/14 
-FLOAT   [-+eE.0-9][-+eE.0-9]*
-*/
-#line 110 "d4_function_scanner.ll"
-// Code run each time a pattern is matched
-#define YY_USER_ACTION loc->columns(yyleng);
-#line 651 "lex.d4_function.cc"
-
-#define INITIAL 0
-#define quote 1
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#include <unistd.h>
-/* %endif */
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-/* %if-c-only Reentrant structure and macros (non-C++). */
-/* %if-reentrant */
-/* %if-c-only */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif End reentrant structures and macros. */
-/* %if-bison-bridge */
-/* %endif */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %endif */
-#endif
-
-/* %if-c-only */
-/* %endif */
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define ECHO LexerOutput( yytext, yyleng )
-/* %endif */
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
-\
-/* %if-c++-only C++ definition \ */\
-	if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
-		YY_FATAL_ERROR( "input in flex scanner failed" );
-/* %endif */
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-#define YY_FATAL_ERROR(msg) LexerError( msg )
-/* %endif */
-#endif
-
-/* %if-tables-serialization structures and prototypes */
-/* %not-for-header */
-
-/* %ok-for-header */
-
-/* %not-for-header */
-
-/* %tables-yydmap generated elements */
-/* %endif */
-/* end tables serialization structures and prototypes */
-
-/* %ok-for-header */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-/* %if-c-only Standard (non-C++) definition */
-/* %endif */
-/* %if-c++-only C++ definition */
-#define YY_DECL int yyFlexLexer::yylex()
-/* %endif */
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-/* %% [6.0] YY_RULE_SETUP definition goes here */
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/* %not-for-header */
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-/* %% [7.0] user's declarations go here */
-#line 114 "d4_function_scanner.ll"
-
-
-
-// Code run each time yylex is called
-loc->step();
-
-
-#line 817 "lex.d4_function.cc"
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! yyin )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyin = & std::cin;
-/* %endif */
-
-		if ( ! yyout )
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-			yyout = & std::cout;
-/* %endif */
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			yyensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
-		}
-
-		yy_load_buffer_state(  );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-/* %% [8.0] yymore()-related code goes here */
-		(yy_more_len) = 0;
-		if ( (yy_more_flag) )
-			{
-			(yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
-			(yy_more_flag) = 0;
-			}
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of yytext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-/* %% [9.0] code to set up and find next match goes here */
-		yy_current_state = (yy_start);
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 64 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_current_state != 63 );
-		yy_cp = (yy_last_accepting_cpos);
-		yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
-/* %% [10.0] code to find the action number goes here */
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-/* %% [11.0] code for yylineno update goes here */
-
-		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-			{
-			yy_size_t yyl;
-			for ( yyl = (yy_more_len); yyl < yyleng; ++yyl )
-				if ( yytext[yyl] == '\n' )
-					   
-    yylineno++;
-;
-			}
-
-do_action:	/* This label is used only to access EOF actions. */
-
-/* %% [12.0] debug code goes here */
-		if ( yy_flex_debug )
-			{
-			if ( yy_act == 0 )
-				std::cerr << "--scanner backing up\n";
-			else if ( yy_act < 29 )
-				std::cerr << "--accepting rule at line " << yy_rule_linenum[yy_act] <<
-				         "(\"" << yytext << "\")\n";
-			else if ( yy_act == 29 )
-				std::cerr << "--accepting default rule (\"" << yytext << "\")\n";
-			else if ( yy_act == 30 )
-				std::cerr << "--(end of buffer or a NUL)\n";
-			else
-				std::cerr << "--EOF (start condition " << YY_START << ")\n";
-			}
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-/* %% [13.0] actions go here */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 121 "d4_function_scanner.ll"
-return token::COMMA;
-	YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 122 "d4_function_scanner.ll"
-return token::SEMICOLON;
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 123 "d4_function_scanner.ll"
-return token::COLON;
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 125 "d4_function_scanner.ll"
-return token::LPAREN;
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 126 "d4_function_scanner.ll"
-return token::RPAREN;
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 128 "d4_function_scanner.ll"
-return token::GROUP_SEP;
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 129 "d4_function_scanner.ll"
-return token::PATH_SEP;
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 131 "d4_function_scanner.ll"
-return token::DOLLAR_BYTE;
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 132 "d4_function_scanner.ll"
-return token::DOLLAR_UINT8;
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 133 "d4_function_scanner.ll"
-return token::DOLLAR_INT8;
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 134 "d4_function_scanner.ll"
-return token::DOLLAR_UINT16;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 135 "d4_function_scanner.ll"
-return token::DOLLAR_INT16;
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 136 "d4_function_scanner.ll"
-return token::DOLLAR_UINT32;
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 137 "d4_function_scanner.ll"
-return token::DOLLAR_INT32;
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 138 "d4_function_scanner.ll"
-return token::DOLLAR_UINT64;
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 139 "d4_function_scanner.ll"
-return token::DOLLAR_INT64;
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 140 "d4_function_scanner.ll"
-return token::DOLLAR_FLOAT32;
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 141 "d4_function_scanner.ll"
-return token::DOLLAR_FLOAT64;
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 143 "d4_function_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 20:
-/* rule 20 can match eol */
-YY_RULE_SETUP
-#line 145 "d4_function_scanner.ll"
-/* ignore these */
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 147 "d4_function_scanner.ll"
-{ yylval->build<std::string>(yytext); return token::WORD; }
-	YY_BREAK
-case YY_STATE_EOF(INITIAL):
-#line 149 "d4_function_scanner.ll"
-return token::END;
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 151 "d4_function_scanner.ll"
-{ BEGIN(quote); yymore(); }
-	YY_BREAK
-case 23:
-/* rule 23 can match eol */
-YY_RULE_SETUP
-#line 153 "d4_function_scanner.ll"
-yymore(); /* Anything that's not a double quote or a backslash */
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 155 "d4_function_scanner.ll"
-yymore(); /* This matches the escaped double quote (\") */
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 157 "d4_function_scanner.ll"
-yymore(); /* This matches an escaped escape (\\) */
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 159 "d4_function_scanner.ll"
-{
-                    BEGIN(INITIAL);
-                    if (yytext) {
-                        YY_FATAL_ERROR("Inside a string, backslash (\\) can escape a double quote or must itself be escaped (\\\\).");
-                    }
-                }
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 166 "d4_function_scanner.ll"
-{ 
-                /* An unescaped double quote in the 'quote' state indicates the end of the string */
-                BEGIN(INITIAL); 
-                yylval->build<std::string>(yytext); 
-                return token::STRING;
-            }
-	YY_BREAK
-case YY_STATE_EOF(quote):
-#line 173 "d4_function_scanner.ll"
-{
-                  BEGIN(INITIAL);   /* resetting the state is needed for reentrant parsers */
-                  YY_FATAL_ERROR("Unterminated quote");
-                }
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 178 "d4_function_scanner.ll"
-{
-        BEGIN(INITIAL);
-        if (yytext) {
-            YY_FATAL_ERROR("Characters found in the input were not recognized.");
-        }
-    }
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 184 "d4_function_scanner.ll"
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-#line 1115 "lex.d4_function.cc"
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
-				yy_cp = (yy_last_accepting_cpos);
-				yy_current_state = (yy_last_accepting_state);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( yywrap(  ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of yylex */
-/* %ok-for-header */
-
-/* %if-c++-only */
-/* %not-for-header */
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
-{
-	yyin = arg_yyin;
-	yyout = arg_yyout;
-	yy_c_buf_p = 0;
-	yy_init = 0;
-	yy_start = 0;
-	yy_flex_debug = 0;
-	yylineno = 1;	// this will only get updated if %option yylineno
-
-	yy_did_buffer_switch_on_eof = 0;
-
-	yy_looking_for_trail_begin = 0;
-	yy_more_flag = 0;
-	yy_more_len = 0;
-	yy_more_offset = yy_prev_more_offset = 0;
-
-	yy_start_stack_ptr = yy_start_stack_depth = 0;
-	yy_start_stack = NULL;
-
-	yy_buffer_stack = 0;
-	yy_buffer_stack_top = 0;
-	yy_buffer_stack_max = 0;
-
-	yy_state_buf = 0;
-
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-yyFlexLexer::~yyFlexLexer()
-{
-	delete [] yy_state_buf;
-	d4_functionfree(yy_start_stack  );
-	yy_delete_buffer( YY_CURRENT_BUFFER );
-	d4_functionfree(yy_buffer_stack  );
-}
-
-/* The contents of this function are C++ specific, so the () macro is not used.
- */
-void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
-{
-	if ( new_in )
-		{
-		yy_delete_buffer( YY_CURRENT_BUFFER );
-		yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  ) );
-		}
-
-	if ( new_out )
-		yyout = new_out;
-}
-
-#ifdef YY_INTERACTIVE
-size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ )
-#else
-size_t yyFlexLexer::LexerInput( char* buf, size_t max_size )
-#endif
-{
-	if ( yyin->eof() || yyin->fail() )
-		return 0;
-
-#ifdef YY_INTERACTIVE
-	yyin->get( buf[0] );
-
-	if ( yyin->eof() )
-		return 0;
-
-	if ( yyin->bad() )
-		return -1;
-
-	return 1;
-
-#else
-	(void) yyin->read( buf, max_size );
-
-	if ( yyin->bad() )
-		return -1;
-	else
-		return yyin->gcount();
-#endif
-}
-
-void yyFlexLexer::LexerOutput( const char* buf, size_t size )
-{
-	(void) yyout->write( buf, size );
-}
-/* %ok-for-header */
-
-/* %endif */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-int yyFlexLexer::yy_get_next_buffer()
-/* %endif */
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			yy_size_t num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				yy_size_t new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					d4_functionrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) d4_functionrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-/* %if-c-only */
-/* %not-for-header */
-
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_get_previous_state()
-/* %endif */
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-/* %% [15.0] code to get the start state into yy_current_state goes here */
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-/* %% [16.0] code to find the next state goes here */
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 64 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
-/* %endif */
-{
-	register int yy_is_jam;
-    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-	register char *yy_cp = (yy_c_buf_p);
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 64 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 63);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyunput( int c, register char* yy_bp)
-/* %endif */
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up yytext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register yy_size_t number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-/* %% [18.0] update yylineno here */
-
-    if ( c == '\n' ){
-        --yylineno;
-    }
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yyinput()
-/* %endif */
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap(  ) )
-						return 0;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve yytext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-/* %% [19.0] update BOL and yylineno */
-	if ( c == '\n' )
-		   
-    yylineno++;
-;
-
-	return c;
-}
-/* %if-c-only */
-/* %endif */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yyrestart( std::istream* input_file )
-/* %endif */
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
-	}
-
-	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-	yy_load_buffer_state(  );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-/* %endif */
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		yypop_buffer_state();
-	 *		yypush_buffer_state(new_buffer);
-     */
-	yyensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state(  );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_load_buffer_state()
-/* %endif */
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
-/* %endif */
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) d4_functionalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) d4_functionalloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer( b, file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		d4_functionfree((void *) b->yy_ch_buf  );
-
-	d4_functionfree((void *) b  );
-}
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c++-only */
-
-extern "C" int isatty (int );
-
-/* %endif */
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
-/* %endif */
-
-{
-	int oerrno = errno;
-    
-	yy_flush_buffer( b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-	b->yy_is_interactive = 0;
-/* %endif */
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
-/* %endif */
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state(  );
-}
-
-/* %if-c-or-c++ */
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
-/* %endif */
-{
-    	if (new_buffer == NULL)
-		return;
-
-	yyensure_buffer_stack();
-
-	/* This block is copied from yy_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state(  );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yypop_buffer_state (void)
-/* %endif */
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	yy_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state(  );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-/* %endif */
-
-/* %if-c-or-c++ */
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::yyensure_buffer_stack(void)
-/* %endif */
-{
-	yy_size_t num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_functionalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)d4_functionrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_push_state( int new_state )
-/* %endif */
-{
-    	if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-		{
-		yy_size_t new_size;
-
-		(yy_start_stack_depth) += YY_START_STACK_INCR;
-		new_size = (yy_start_stack_depth) * sizeof( int );
-
-		if ( ! (yy_start_stack) )
-			(yy_start_stack) = (int *) d4_functionalloc(new_size  );
-
-		else
-			(yy_start_stack) = (int *) d4_functionrealloc((void *) (yy_start_stack),new_size  );
-
-		if ( ! (yy_start_stack) )
-			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-		}
-
-	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
-
-	BEGIN(new_state);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    void yyFlexLexer::yy_pop_state()
-/* %endif */
-{
-    	if ( --(yy_start_stack_ptr) < 0 )
-		YY_FATAL_ERROR( "start-condition stack underflow" );
-
-	BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
-}
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-    int yyFlexLexer::yy_top_state()
-/* %endif */
-{
-    	return (yy_start_stack)[(yy_start_stack_ptr) - 1];
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-/* %if-c-only */
-/* %endif */
-/* %if-c++-only */
-void yyFlexLexer::LexerError( yyconst char msg[] )
-{
-    	std::cerr << msg << std::endl;
-	exit( YY_EXIT_FAILURE );
-}
-/* %endif */
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		yytext[yyleng] = (yy_hold_char); \
-		(yy_c_buf_p) = yytext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		yyleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/* %if-c-only */
-/* %if-reentrant */
-/* %endif */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/* %if-reentrant */
-/* %if-bison-bridge */
-/* %endif */
-/* %endif if-c-only */
-
-/* %if-c-only */
-/* %endif */
-
-/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* %if-reentrant */
-/* %endif */
-/* %endif */
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *d4_functionalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *d4_functionrealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void d4_functionfree (void * ptr )
-{
-	free( (char *) ptr );	/* see d4_functionrealloc() for (char *) cast */
-}
-
-/* %if-tables-serialization definitions */
-/* %define-yytables   The name for this specific scanner's tables. */
-#define YYTABLES_NAME "yytables"
-/* %endif */
-
-/* %ok-for-header */
-
-#line 184 "d4_function_scanner.ll"
-
-
-
diff --git a/d4_ce/D4FunctionEvaluator.cc b/d4_function/D4FunctionEvaluator.cc
similarity index 61%
rename from d4_ce/D4FunctionEvaluator.cc
rename to d4_function/D4FunctionEvaluator.cc
index 92204ec..8bb45aa 100644
--- a/d4_ce/D4FunctionEvaluator.cc
+++ b/d4_function/D4FunctionEvaluator.cc
@@ -3,7 +3,7 @@
 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
 // Access Protocol.
 
-// Copyright (c) 2002,2003 OPeNDAP, Inc.
+// Copyright (c) 2014 OPeNDAP, Inc.
 // Author: James Gallagher <jgallagher at opendap.org>
 //
 // This library is free software; you can redistribute it and/or
@@ -63,18 +63,18 @@ namespace libdap {
  */
 bool D4FunctionEvaluator::parse(const std::string &expr)
 {
-	d_expr = expr;	// set for error messages. See the %initial-action section of .yy
+    d_expr = expr;	// set for error messages. See the %initial-action section of .yy
 
-	std::istringstream iss(expr);
-	D4FunctionScanner scanner(iss);
-	D4FunctionParser parser(scanner, *this /* driver */);
+    std::istringstream iss(expr);
+    D4FunctionScanner scanner(iss);
+    D4FunctionParser parser(scanner, *this /* driver */);
 
-	if (trace_parsing()) {
-		parser.set_debug_level(1);
-		parser.set_debug_stream(std::cerr);
-	}
+    if (trace_parsing()) {
+        parser.set_debug_level(1);
+        parser.set_debug_stream(std::cerr);
+    }
 
-	return parser.parse() == 0;
+    return parser.parse() == 0;
 }
 
 /**
@@ -107,75 +107,75 @@ bool D4FunctionEvaluator::parse(const std::string &expr)
 void D4FunctionEvaluator::eval(DMR *function_result)
 {
 #if 0
-	ServerFunctionsList *sf_list = ServerFunctionsList::TheList();
-	ServerFunction *scale = new D4TestFunction;
-	sf_list->add_function(scale);
-
-	D4FunctionEvaluator parser(dataset, sf_list);
-	if (ce_parser_debug) parser.set_trace_parsing(true);
-	bool parse_ok = parser.parse(function);
-	if (!parse_ok)
-	Error("Function Expression failed to parse.");
-	else {
-		if (ce_parser_debug) cerr << "Function Parse OK" << endl;
-		D4RValueList *result = parser.result();
-
-		function_result = new DMR(&d4_factory, "function_results");
+    ServerFunctionsList *sf_list = ServerFunctionsList::TheList();
+    ServerFunction *scale = new D4TestFunction;
+    sf_list->add_function(scale);
+
+    D4FunctionEvaluator parser(dataset, sf_list);
+    if (ce_parser_debug) parser.set_trace_parsing(true);
+    bool parse_ok = parser.parse(function);
+    if (!parse_ok)
+    Error("Function Expression failed to parse.");
+    else {
+        if (ce_parser_debug) cerr << "Function Parse OK" << endl;
+        D4RValueList *result = parser.result();
+
+        function_result = new DMR(&d4_factory, "function_results");
 #endif
 
-	if (!d_result) throw InternalErr(__FILE__, __LINE__, "Must parse() the function expression before calling eval()");
-
-	D4Group *root = function_result->root();	// Load everything in the root group
-
-	for (D4RValueList::iter i = d_result->begin(), e = d_result->end(); i != e; ++i) {
-		// Copy the BaseTypes; this means all of the function results can
-		// be deleted, which addresses the memory leak issue with function
-		// results. This should also copy the D4Dimensions. jhrg 3/17/14
-		root->add_var((*i)->value(*d_dmr));
-	}
-
-	delete d_result;	// The parser/function allocates the BaseType*s that hold the results.
-	d_result = 0;
-
-	// Variables can use Dimensions and Enumerations, so those need to be copied
-	// from the source dataset to the result. NB: The variables that refer to these
-	// use weak pointers.
-
-	// Make a set of D4Dimensions. For each variable in 'function_result', look
-	// for its dimensions in 'dataset' (by name) and add a pointer to those to the
-	// set. Then copy all the stuff in the set into the root group of 'function_
-	// result.'
-	set<D4Dimension*> dim_set;
-
-	for (Constructor::Vars_iter i = root->var_begin(), ie = root->var_end(); i != ie; ++i) {
-		if ((*i)->is_vector_type()) {
-			Array *a = static_cast<Array*>(*i);
-			for (Array::Dim_iter d = a->dim_begin(), de = a->dim_end(); d != de; ++d) {
-				if (a->dimension_D4dim(d)) {
-					dim_set.insert(a->dimension_D4dim(d));
-				}
-			}
-		}
-	}
-
-	// Copy the D4Dimensions and EnumDefs because this all goes in a new DMR - we don't
-	// want to share those across DMRs because the DMRs delete those (so sharing htem
-	// across DMRs would lead to dangling pointers.
-	for (set<D4Dimension*>::iterator i = dim_set.begin(), e = dim_set.end(); i != e; ++i) {
-		root->dims()->add_dim(*i);
-	}
-
-	// Now lets do the enumerations....
-	set<D4EnumDef*> enum_def_set;
-	for (Constructor::Vars_iter i = root->var_begin(), ie = root->var_end(); i != ie; ++i) {
-		if ((*i)->type() == dods_enum_c) {
-			enum_def_set.insert(static_cast<D4Enum*>(*i)->enumeration());
-		}
-	}
-
-	for (set<D4EnumDef*>::iterator i = enum_def_set.begin(), e = enum_def_set.end(); i != e; ++i) {
-		root->enum_defs()->add_enum(*i);
-	}
+    if (!d_result) throw InternalErr(__FILE__, __LINE__, "Must parse() the function expression before calling eval()");
+
+    D4Group *root = function_result->root();	// Load everything in the root group
+
+    for (D4RValueList::iter i = d_result->begin(), e = d_result->end(); i != e; ++i) {
+        // Copy the BaseTypes; this means all of the function results can
+        // be deleted, which addresses the memory leak issue with function
+        // results. This should also copy the D4Dimensions. jhrg 3/17/14
+        root->add_var((*i)->value(*d_dmr));
+    }
+
+    delete d_result;	// The parser/function allocates the BaseType*s that hold the results.
+    d_result = 0;
+
+    // Variables can use Dimensions and Enumerations, so those need to be copied
+    // from the source dataset to the result. NB: The variables that refer to these
+    // use weak pointers.
+
+    // Make a set of D4Dimensions. For each variable in 'function_result', look
+    // for its dimensions in 'dataset' (by name) and add a pointer to those to the
+    // set. Then copy all the stuff in the set into the root group of 'function_
+    // result.'
+    set<D4Dimension*> dim_set;
+
+    for (Constructor::Vars_iter i = root->var_begin(), ie = root->var_end(); i != ie; ++i) {
+        if ((*i)->is_vector_type()) {
+            Array *a = static_cast<Array*>(*i);
+            for (Array::Dim_iter d = a->dim_begin(), de = a->dim_end(); d != de; ++d) {
+                if (a->dimension_D4dim(d)) {
+                    dim_set.insert(a->dimension_D4dim(d));
+                }
+            }
+        }
+    }
+
+    // Copy the D4Dimensions and EnumDefs because this all goes in a new DMR - we don't
+    // want to share those across DMRs because the DMRs delete those (so sharing htem
+    // across DMRs would lead to dangling pointers.
+    for (set<D4Dimension*>::iterator i = dim_set.begin(), e = dim_set.end(); i != e; ++i) {
+        root->dims()->add_dim(*i);
+    }
+
+    // Now lets do the enumerations....
+    set<D4EnumDef*> enum_def_set;
+    for (Constructor::Vars_iter i = root->var_begin(), ie = root->var_end(); i != ie; ++i) {
+        if ((*i)->type() == dods_enum_c) {
+            enum_def_set.insert(static_cast<D4Enum*>(*i)->enumeration());
+        }
+    }
+
+    for (set<D4EnumDef*>::iterator i = enum_def_set.begin(), e = enum_def_set.end(); i != e; ++i) {
+        root->enum_defs()->add_enum(*i);
+    }
 }
 
 // libdap contains functions (in parser-util.cc) that test if a string
@@ -206,8 +206,7 @@ D4FunctionEvaluator::build_rvalue(const std::string &id)
         btp = dmr()->root()->find_var(id);
     }
 
-    if (btp)
-        return new D4RValue(btp);
+    if (btp) return new D4RValue(btp);
 
     // If the id is not a variable, try to turn it into a constant,
     // otherwise, its an error.
@@ -215,39 +214,35 @@ D4FunctionEvaluator::build_rvalue(const std::string &id)
 
     errno = 0;
     long long ll_val = strtoll(id.c_str(), &end_ptr, 0);
-    if (*end_ptr == '\0' && errno == 0)
-    	return new D4RValue(ll_val);
+    if (*end_ptr == '\0' && errno == 0) return new D4RValue(ll_val);
 
     // Test for unsigned after signed since strtoull() accepts a minus sign
     // (and will return a huge number if that's the case). jhrg 3/13/14
     errno = 0;
     unsigned long long ull_val = strtoull(id.c_str(), &end_ptr, 0);
-    if (*end_ptr == '\0' && errno == 0)
-    	return new D4RValue(ull_val);
+    if (*end_ptr == '\0' && errno == 0) return new D4RValue(ull_val);
 
     errno = 0;
     double d_val = strtod(id.c_str(), &end_ptr);
-    if (*end_ptr == '\0' && errno == 0)
-    	return new D4RValue(d_val);
+    if (*end_ptr == '\0' && errno == 0) return new D4RValue(d_val);
 
     // To be a valid string, the id must be quoted (using double quotes)
-    if (is_quoted(id))
-    	return new D4RValue(www2id(id));
+    if (is_quoted(id)) return new D4RValue(www2id(id));
 
     // if it's none of these, return null
     return 0;
 }
 
-template <typename T>
+template<typename T>
 std::vector<T> *
 D4FunctionEvaluator::init_arg_list(T val)
 {
-	std::vector<T> *arg_list = new std::vector<T>();
-	if (get_arg_length_hint() > 0) arg_list->reserve(get_arg_length_hint());
+    std::vector<T> *arg_list = new std::vector<T>();
+    if (get_arg_length_hint() > 0) arg_list->reserve(get_arg_length_hint());
 
-	arg_list->push_back(val);
+    arg_list->push_back(val);
 
-	return arg_list;
+    return arg_list;
 }
 
 // Force an instantiation so this can be called from within the d4_function.yy
@@ -266,10 +261,9 @@ template std::vector<dods_float64> *D4FunctionEvaluator::init_arg_list(dods_floa
 // This method is called from the parser (see d4_function_parser.yy, down in the code
 // section). This will be called during the call to D4FunctionParser::parse(), that
 // is inside D4FunctionEvaluator::parse(...)
-void
-D4FunctionEvaluator::error(const libdap::location &l, const std::string &m)
+void D4FunctionEvaluator::error(const libdap::location &l, const std::string &m)
 {
-	std::cerr << l << ": " << m << std::endl;
+    std::cerr << l << ": " << m << std::endl;
 }
 
 } /* namespace libdap */
diff --git a/d4_function/D4FunctionEvaluator.h b/d4_function/D4FunctionEvaluator.h
new file mode 100644
index 0000000..bb8660b
--- /dev/null
+++ b/d4_function/D4FunctionEvaluator.h
@@ -0,0 +1,171 @@
+// -*- mode: c++; c-basic-offset:4 -*-
+
+// This file is part of libdap, A C++ implementation of the OPeNDAP Data
+// Access Protocol.
+
+// Copyright (c) 2014 OPeNDAP, Inc.
+// Author: James Gallagher <jgallagher at opendap.org>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
+
+#ifndef D4_FUNCTION_DRIVER_H_
+#define D4_FUNCTION_DRIVER_H_
+
+#include <string>
+#include <vector>
+#include <stack>
+
+namespace libdap {
+
+class location;
+
+class BaseType;
+class Array;
+class ServerFunctionsList;
+
+class DMR;
+class D4Dimension;
+class D4RValue;
+class D4RValueList;
+
+/**
+ * Driver for the DAP4 Functional expression parser.
+ */
+class D4FunctionEvaluator
+{
+    bool d_trace_scanning;
+    bool d_trace_parsing;
+    std::string d_expr;
+
+    DMR *d_dmr;
+    ServerFunctionsList *d_sf_list;
+
+    D4RValueList *d_result;
+
+    std::stack<BaseType*> d_basetype_stack;
+
+    unsigned long long d_arg_length_hint;
+
+    // d_expr should be set by parse! Its value is used by the parser right before
+    // the actual parsing operation starts. jhrg 11/26/13
+    std::string *expression()
+    {
+        return &d_expr;
+    }
+
+    void push_basetype(BaseType *btp)
+    {
+        d_basetype_stack.push(btp);
+    }
+    BaseType *top_basetype() const
+    {
+        return d_basetype_stack.empty() ? 0 : d_basetype_stack.top();
+    }
+    void pop_basetype()
+    {
+        d_basetype_stack.pop();
+    }
+
+    D4RValue *build_rvalue(const std::string &id);
+
+    friend class D4FunctionParser;
+
+public:
+    D4FunctionEvaluator() :
+            d_trace_scanning(false), d_trace_parsing(false), d_expr(""), d_dmr(0), d_sf_list(0), d_result(0), d_arg_length_hint(
+                    0)
+    {
+    }
+    D4FunctionEvaluator(DMR *dmr, ServerFunctionsList *sf_list) :
+            d_trace_scanning(false), d_trace_parsing(false), d_expr(""), d_dmr(dmr), d_sf_list(sf_list), d_result(0), d_arg_length_hint(
+                    0)
+    {
+    }
+
+    virtual ~D4FunctionEvaluator()
+    {
+    }
+
+    bool parse(const std::string &expr);
+
+    bool trace_scanning() const
+    {
+        return d_trace_scanning;
+    }
+    void set_trace_scanning(bool ts)
+    {
+        d_trace_scanning = ts;
+    }
+
+    bool trace_parsing() const
+    {
+        return d_trace_parsing;
+    }
+    void set_trace_parsing(bool tp)
+    {
+        d_trace_parsing = tp;
+    }
+
+    /** Get the result of parsing the function(s)
+     *
+     * @return The result(s) packages in a D4RValueList
+     */
+    D4RValueList *result() const
+    {
+        return d_result;
+    }
+    void set_result(D4RValueList *rv_list)
+    {
+        d_result = rv_list;
+    }
+
+    void eval(DMR *dmr);
+
+    unsigned long long get_arg_length_hint() const
+    {
+        return d_arg_length_hint;
+    }
+    void set_arg_length_hint(unsigned long long alh)
+    {
+        d_arg_length_hint = alh;
+    }
+
+    DMR *dmr() const
+    {
+        return d_dmr;
+    }
+    void set_dmr(DMR *dmr)
+    {
+        d_dmr = dmr;
+    }
+
+    ServerFunctionsList *sf_list() const
+    {
+        return d_sf_list;
+    }
+    void set_sf_list(ServerFunctionsList *sf_list)
+    {
+        d_sf_list = sf_list;
+    }
+
+    template<typename t> std::vector<t> *init_arg_list(t val);
+
+    void error(const libdap::location &l, const std::string &m);
+};
+
+} /* namespace libdap */
+#endif /* D4_FUNCTION_DRIVER_H_ */
diff --git a/d4_ce/D4FunctionScanner.h b/d4_function/D4FunctionScanner.h
similarity index 100%
rename from d4_ce/D4FunctionScanner.h
rename to d4_function/D4FunctionScanner.h
diff --git a/d4_function/Makefile.am b/d4_function/Makefile.am
new file mode 100644
index 0000000..b3afae4
--- /dev/null
+++ b/d4_function/Makefile.am
@@ -0,0 +1,68 @@
+
+AUTOMAKE_OPTIONS = foreign
+
+.NOTPARALLEL:
+
+# Arrange to build with the backward compatibility mode enabled.
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/d4_ce -I$(srcdir) $(XML2_CFLAGS)
+AM_CXXFLAGS =  
+
+if COMPILER_IS_GCC
+AM_CXXFLAGS += -Wall -W -Wcast-align
+endif
+
+# autoconf/automake includes support for yacc and lex so that the input
+# files for those compilers can be listed in a _SOURCES variable and the
+# build will just work. I had a fair amount of hassle getting that going
+# and then realized that cmake might undo all that effort. Also, the
+# changes are not local to this dir only since I'd have to edit the DAP2
+# grammars as well. I've left the edits in a comments although I'm not sure
+# it ever worked correctly. jhrg 10/21/14
+#
+# AM_YFLAGS= -d
+# AM_LFLAGS = -d
+
+CXXFLAGS_DEBUG = -g3 -O0 -Wall -W -Wcast-align
+TEST_COV_FLAGS = -ftest-coverage -fprofile-arcs
+
+if BUILD_DEVELOPER
+AM_CXXFLAGS += $(CXXFLAGS_DEBUG)
+endif
+
+noinst_LTLIBRARIES = libd4_function_parser.la
+pkginclude_HEADERS = D4FunctionEvaluator.h
+
+# This line forces make to build the grammar files first, which is
+# important because some of the cc files include the parser headers.
+BUILT_SOURCES = lex.d4_function.cc d4_function_parser.tab.cc d4_function_parser.tab.hh \
+	stack.hh location.hh position.hh
+
+libd4_function_parser_la_SOURCES = D4FunctionEvaluator.cc	\
+	D4FunctionEvaluator.h D4FunctionScanner.h	\
+	d4_function_parser.tab.cc d4_function_parser.tab.hh lex.d4_function.cc \
+	stack.hh location.hh position.hh
+
+libd4_ce_parser_la_CXXFLAGS=$(AM_CPPFLAGS)
+
+EXTRA_DIST = d4_function_parser.yy d4_function_scanner.ll
+
+DISTCLEANFILES = 
+
+clean-local:
+	-rm d4_function_parser.tab.cc d4_function_parser.tab.hh lex.d4_function.cc \
+	    stack.hh position.hh location.hh
+
+%.tab.cc %.tab.hh: %.yy
+	$(YACC) $(YFLAGS) $<
+
+stack.hh location.hh position.hh: d4_function_parser.tab.cc d4_function_parser.tab.hh
+
+#d4_function_parser.tab.cc d4_function_parser.tab.hh stack.hh location.hh position.hh: d4_function_parser.yy
+#	$(YACC) $(YFLAGS) $<
+
+# See the comment in ../d4_ce
+dist-hook:
+	rm $(distdir)/lex.d4_function.cc
+
+lex.d4_function.cc: d4_function_scanner.ll d4_function_parser.tab.cc d4_function_parser.tab.hh
+	$(LEX) $(LFLAGS) $<
diff --git a/d4_ce/Makefile.in b/d4_function/Makefile.in
similarity index 66%
copy from d4_ce/Makefile.in
copy to d4_function/Makefile.in
index 2074af8..7ad9b8f 100644
--- a/d4_ce/Makefile.in
+++ b/d4_function/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,27 +14,53 @@
 
 @SET_MAKE@
 
-# Tests
-
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -55,11 +80,12 @@ build_triplet = @build@
 host_triplet = @host@
 @COMPILER_IS_GCC_TRUE at am__append_1 = -Wall -W -Wcast-align
 @BUILD_DEVELOPER_TRUE at am__append_2 = $(CXXFLAGS_DEBUG)
-subdir = d4_ce
-DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/conf/depcomp
+subdir = d4_function
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/conf/depcomp $(pkginclude_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -80,8 +106,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -111,43 +137,69 @@ CONFIG_HEADER = $(top_builddir)/config.h \
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
-libd4_ce_parser_la_LIBADD =
-am_libd4_ce_parser_la_OBJECTS =  \
-	libd4_ce_parser_la-D4ConstraintEvaluator.lo \
-	libd4_ce_parser_la-D4FunctionEvaluator.lo \
-	libd4_ce_parser_la-d4_ce_parser.tab.lo \
-	libd4_ce_parser_la-lex.d4_ce.lo \
-	libd4_ce_parser_la-d4_function_parser.tab.lo \
-	libd4_ce_parser_la-lex.d4_function.lo
-libd4_ce_parser_la_OBJECTS = $(am_libd4_ce_parser_la_OBJECTS)
-libd4_ce_parser_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
-	$(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+libd4_function_parser_la_LIBADD =
+am_libd4_function_parser_la_OBJECTS = D4FunctionEvaluator.lo \
+	d4_function_parser.tab.lo lex.d4_function.lo
+libd4_function_parser_la_OBJECTS =  \
+	$(am_libd4_function_parser_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/conf/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libd4_ce_parser_la_SOURCES)
-DIST_SOURCES = $(libd4_ce_parser_la_SOURCES)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libd4_function_parser_la_SOURCES)
+DIST_SOURCES = $(libd4_function_parser_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -182,6 +234,23 @@ am__uninstall_files_from_dir = { \
   }
 am__installdirs = "$(DESTDIR)$(pkgincludedir)"
 HEADERS = $(pkginclude_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -190,6 +259,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -301,6 +371,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -418,6 +489,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -626,9 +698,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -638,6 +712,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -757,42 +832,21 @@ AM_CXXFLAGS = $(am__append_1) $(am__append_2)
 # AM_LFLAGS = -d
 CXXFLAGS_DEBUG = -g3 -O0 -Wall -W -Wcast-align
 TEST_COV_FLAGS = -ftest-coverage -fprofile-arcs
-noinst_LTLIBRARIES = libd4_ce_parser.la
-pkginclude_HEADERS = D4ConstraintEvaluator.h D4FunctionEvaluator.h
-BUILT_SOURCES = lex.d4_ce.cc lex.d4_function.cc
-# BUILT_SOURCES = d4_ce_parser.hh stack.hh location.hh position.hh d4_function_parser.hh
-libd4_ce_parser_la_SOURCES = D4ConstraintEvaluator.cc \
-	D4ConstraintEvaluator.h D4CEScanner.h D4FunctionEvaluator.cc	\
-	D4FunctionEvaluator.h D4FunctionScanner.h d4_ce_parser.tab.cc	\
-	d4_ce_parser.tab.hh lex.d4_ce.cc d4_function_parser.tab.cc	\
-	d4_function_parser.tab.hh lex.d4_function.cc location.hh	\
-	position.hh stack.hh
-
-
-# d4_ce_parser.yy d4_function_parser.yy d4_ce_scanner.ll d4_function_scanner.ll
-
-# Kludge: If we are not building the scanner/parser from the 
-# grammar sources, make sure to use the scanner class that
-# matches the generated code. This addresses an issue where
-# different versions of flex use 'int' or 'size_t' for some 
-# arguments in the scanner's protected methods. This is not
-# automatically updated to match changes in the gnerated files.
-# jhrg 3/31/15
-#
-# Goog intent behind this idea, but in practice it was not working to
-# build the DAP4 parsers this way. Given more time, it might be
-# something that will work, but for the next release (early April
-# 2015) bison 3.x is going to be a requirement. jhrg 4/5/15
-
-# if !BISON3
-# libd4_ce_parser_la_SOURCES += FlexLexer.h
-# endif 
-libd4_ce_parser_la_CXXFLAGS = $(AM_CPPFLAGS)
+noinst_LTLIBRARIES = libd4_function_parser.la
+pkginclude_HEADERS = D4FunctionEvaluator.h
+
+# This line forces make to build the grammar files first, which is
+# important because some of the cc files include the parser headers.
+BUILT_SOURCES = lex.d4_function.cc d4_function_parser.tab.cc d4_function_parser.tab.hh \
+	stack.hh location.hh position.hh
 
-# Used by both the "have bison 3+'" and "don't have ..." cases
-GEN_GRAM_SRCS = gen_grammar_sources
-EXTRA_DIST = d4_ce_parser.yy d4_ce_scanner.ll d4_function_parser.yy \
-	d4_function_scanner.ll $(GEN_GRAM_SRCS)
+libd4_function_parser_la_SOURCES = D4FunctionEvaluator.cc	\
+	D4FunctionEvaluator.h D4FunctionScanner.h	\
+	d4_function_parser.tab.cc d4_function_parser.tab.hh lex.d4_function.cc \
+	stack.hh location.hh position.hh
+
+libd4_ce_parser_la_CXXFLAGS = $(AM_CPPFLAGS)
+EXTRA_DIST = d4_function_parser.yy d4_function_scanner.ll
 DISTCLEANFILES = 
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -808,9 +862,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign d4_ce/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign d4_function/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign d4_ce/Makefile
+	  $(AUTOMAKE) --foreign d4_function/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -840,8 +894,9 @@ clean-noinstLTLIBRARIES:
 	  echo rm -f $${locs}; \
 	  rm -f $${locs}; \
 	}
-libd4_ce_parser.la: $(libd4_ce_parser_la_OBJECTS) $(libd4_ce_parser_la_DEPENDENCIES) $(EXTRA_libd4_ce_parser_la_DEPENDENCIES) 
-	$(libd4_ce_parser_la_LINK)  $(libd4_ce_parser_la_OBJECTS) $(libd4_ce_parser_la_LIBADD) $(LIBS)
+
+libd4_function_parser.la: $(libd4_function_parser_la_OBJECTS) $(libd4_function_parser_la_DEPENDENCIES) $(EXTRA_libd4_function_parser_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libd4_function_parser_la_OBJECTS) $(libd4_function_parser_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,75 +904,30 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/D4FunctionEvaluator.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/d4_function_parser.tab.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lex.d4_function.Plo at am__quote@
 
 .cc.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
-
-libd4_ce_parser_la-D4ConstraintEvaluator.lo: D4ConstraintEvaluator.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-D4ConstraintEvaluator.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Tpo -c -o libd4_ce_parser_la-D4ConstraintEvaluator.lo `test -f 'D4ConstraintEvaluator.cc' || echo '$(srcdir)/'`D4ConstraintEvaluator.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Tpo $(DEPDIR)/libd4_ce_parser_la-D4ConstraintEvaluator.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4ConstraintEvaluator.cc' object='libd4_ce_parser_la-D4ConstraintEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-D4ConstraintEvaluator.lo `test -f 'D4ConstraintEvaluator.cc' || echo '$(srcdir)/'`D4ConstraintEvaluator.cc
-
-libd4_ce_parser_la-D4FunctionEvaluator.lo: D4FunctionEvaluator.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-D4FunctionEvaluator.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Tpo -c -o libd4_ce_parser_la-D4FunctionEvaluator.lo `test -f 'D4FunctionEvaluator.cc' || echo '$(srcdir)/'`D4FunctionEvaluator.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Tpo $(DEPDIR)/libd4_ce_parser_la-D4FunctionEvaluator.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4FunctionEvaluator.cc' object='libd4_ce_parser_la-D4FunctionEvaluator.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-D4FunctionEvaluator.lo `test -f 'D4FunctionEvaluator.cc' || echo '$(srcdir)/'`D4FunctionEvaluator.cc
-
-libd4_ce_parser_la-d4_ce_parser.tab.lo: d4_ce_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-d4_ce_parser.tab.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Tpo -c -o libd4_ce_parser_la-d4_ce_parser.tab.lo `test -f 'd4_ce_parser.tab.cc' || echo '$(srcdir)/'`d4_ce_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Tpo $(DEPDIR)/libd4_ce_parser_la-d4_ce_parser.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='d4_ce_parser.tab.cc' object='libd4_ce_parser_la-d4_ce_parser.tab.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-d4_ce_parser.tab.lo `test -f 'd4_ce_parser.tab.cc' || echo '$(srcdir)/'`d4_ce_parser.tab.cc
-
-libd4_ce_parser_la-lex.d4_ce.lo: lex.d4_ce.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-lex.d4_ce.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Tpo -c -o libd4_ce_parser_la-lex.d4_ce.lo `test -f 'lex.d4_ce.cc' || echo '$(srcdir)/'`lex.d4_ce.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Tpo $(DEPDIR)/libd4_ce_parser_la-lex.d4_ce.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.d4_ce.cc' object='libd4_ce_parser_la-lex.d4_ce.lo' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-lex.d4_ce.lo `test -f 'lex.d4_ce.cc' || echo '$(srcdir)/'`lex.d4_ce.cc
-
-libd4_ce_parser_la-d4_function_parser.tab.lo: d4_function_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-d4_function_parser.tab.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Tpo -c -o libd4_ce_parser_la-d4_function_parser.tab.lo `test -f 'd4_function_parser.tab.cc' || echo '$(srcdir)/'`d4_function_parser.tab.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Tpo $(DEPDIR)/libd4_ce_parser_la-d4_function_parser.tab.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='d4_function_parser.tab.cc' object='libd4_ce_parser_la-d4_function_parser.tab.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-d4_function_parser.tab.lo `test -f 'd4_function_parser.tab.cc' || echo '$(srcdir)/'`d4_function_parser.tab.cc
-
-libd4_ce_parser_la-lex.d4_function.lo: lex.d4_function.cc
- at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -MT libd4_ce_parser_la-lex.d4_function.lo -MD -MP -MF $(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Tpo -c -o libd4_ce_parser_la-lex.d4_function.lo `test -f 'lex.d4_function.cc' || echo '$(srcdir)/'`lex.d4_function.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Tpo $(DEPDIR)/libd4_ce_parser_la-lex.d4_function.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='lex.d4_function.cc' object='libd4_ce_parser_la-lex.d4_function.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libd4_ce_parser_la_CXXFLAGS) $(CXXFLAGS) -c -o libd4_ce_parser_la-lex.d4_function.lo `test -f 'lex.d4_function.cc' || echo '$(srcdir)/'`lex.d4_function.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -946,26 +956,15 @@ uninstall-pkgincludeHEADERS:
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -977,15 +976,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -994,9 +989,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -1042,6 +1038,9 @@ distdir: $(DISTFILES)
 	    || exit 1; \
 	  fi; \
 	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
 check-am: all-am
 check: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) check-am
@@ -1156,69 +1155,43 @@ uninstall-am: uninstall-pkgincludeHEADERS
 
 .MAKE: all check install install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-local clean-noinstLTLIBRARIES cscopelist \
-	ctags distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-pkgincludeHEADERS install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-noinstLTLIBRARIES \
+	cscopelist-am ctags ctags-am dist-hook distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkgincludeHEADERS \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am \
 	uninstall-pkgincludeHEADERS
 
 
-clean-local:
-	-rm location.hh position.hh stack.hh d4_ce_parser.tab.cc	\
-d4_ce_parser.tab.hh lex.d4_ce.cc d4_function_parser.tab.cc		\
-d4_function_parser.tab.hh lex.d4_function.cc FlexLexer.h
-
-# if BISON3
-# If we have bison3+, use it. Otherwise, use files from git.
+.NOTPARALLEL:
 
-lex.d4_ce.cc: d4_ce_scanner.ll d4_ce_parser.tab.cc d4_ce_parser.tab.hh
-	$(LEX) $(LFLAGS) $<
-
-d4_ce_parser.tab.hh d4_ce_parser.tab.cc stack.hh location.hh position.hh: d4_ce_parser.yy
-	$(YACC) $(YFLAGS) $<
-
-lex.d4_function.cc: d4_function_scanner.ll d4_function_parser.tab.cc d4_function_parser.tab.hh
-	$(LEX) $(LFLAGS) $<
+clean-local:
+	-rm d4_function_parser.tab.cc d4_function_parser.tab.hh lex.d4_function.cc \
+	    stack.hh position.hh location.hh
 
-d4_function_parser.tab.hh d4_function_parser.tab.cc: d4_function_parser.yy
+%.tab.cc %.tab.hh: %.yy
 	$(YACC) $(YFLAGS) $<
 
-# These rules keep the 'tmp' files up-to-date w/o us having to remember
-# to rule a special target when the grammars change. Including the '.hh'
-# in the rule below is a work-around for the 'FlexLexer.h' which is _not_
-# generated and breaks this scheme otherwise. We could list each file
-# by name, each one prefixed with $(GEN_GRA...). jhrg 3/31/15
-# all-local: $(GEN_GRAM_SRCS)/*.cc.tmp $(GEN_GRAM_SRCS)/*.hh.tmp
-
-# $(GEN_GRAM_SRCS)/%.cc.tmp : %.cc
-# 	cp $< $@
+stack.hh location.hh position.hh: d4_function_parser.tab.cc d4_function_parser.tab.hh
 
-# $(GEN_GRAM_SRCS)/%.hh.tmp: %.hh
-# 	cp $< $@
+#d4_function_parser.tab.cc d4_function_parser.tab.hh stack.hh location.hh position.hh: d4_function_parser.yy
+#	$(YACC) $(YFLAGS) $<
 
-# $(GEN_GRAM_SRCS)/%.h.tmp: %.h
-# 	cp $< $@
+# See the comment in ../d4_ce
+dist-hook:
+	rm $(distdir)/lex.d4_function.cc
 
-# else
-
-# # The brute force way to get the C++ grammar sources for hosts
-# # w/o bison 3
-
-# % :: $(GEN_GRAM_SRCS)/%.tmp
-# 	cp $< $@
-
-# FlexLexer.h: $(GEN_GRAM_SRCS)/FlexLexer.h.tmp
-# 	cp $< $@
-# endif
+lex.d4_function.cc: d4_function_scanner.ll d4_function_parser.tab.cc d4_function_parser.tab.hh
+	$(LEX) $(LFLAGS) $<
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/d4_ce/d4_function_parser.tab.cc b/d4_function/d4_function_parser.tab.cc
similarity index 100%
rename from d4_ce/d4_function_parser.tab.cc
rename to d4_function/d4_function_parser.tab.cc
diff --git a/d4_ce/d4_function_parser.tab.hh b/d4_function/d4_function_parser.tab.hh
similarity index 100%
rename from d4_ce/d4_function_parser.tab.hh
rename to d4_function/d4_function_parser.tab.hh
diff --git a/d4_ce/d4_function_parser.yy b/d4_function/d4_function_parser.yy
similarity index 100%
rename from d4_ce/d4_function_parser.yy
rename to d4_function/d4_function_parser.yy
diff --git a/d4_ce/d4_function_scanner.ll b/d4_function/d4_function_scanner.ll
similarity index 100%
rename from d4_ce/d4_function_scanner.ll
rename to d4_function/d4_function_scanner.ll
diff --git a/d4_ce/gen_grammar_sources/location.hh.tmp b/d4_function/location.hh
similarity index 94%
rename from d4_ce/gen_grammar_sources/location.hh.tmp
rename to d4_function/location.hh
index d78dc0a..860bc09 100644
--- a/d4_ce/gen_grammar_sources/location.hh.tmp
+++ b/d4_function/location.hh
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.0.
+// A Bison parser, made by GNU Bison 3.0.1.
 
 // Locations for Bison parsers in C++
 
@@ -40,9 +40,9 @@
 
 # include "position.hh"
 
-#line 34 "d4_function_parser.yy" // location.cc:332
+#line 34 "d4_function_parser.yy" // location.cc:291
 namespace libdap {
-#line 46 "location.hh" // location.cc:332
+#line 46 "location.hh" // location.cc:291
   /// Abstract a location.
   class location
   {
@@ -73,7 +73,7 @@ namespace libdap {
 
 
     /// Initialization.
-    void initialize (std::string* f = YY_NULL,
+    void initialize (std::string* f = YY_NULLPTR,
                      unsigned int l = 1u,
                      unsigned int c = 1u)
     {
@@ -181,7 +181,7 @@ namespace libdap {
     return ostr;
   }
 
-#line 34 "d4_function_parser.yy" // location.cc:332
+#line 34 "d4_function_parser.yy" // location.cc:291
 } // libdap
-#line 187 "location.hh" // location.cc:332
+#line 187 "location.hh" // location.cc:291
 #endif // !YY_YY_LOCATION_HH_INCLUDED
diff --git a/d4_ce/gen_grammar_sources/position.hh.tmp b/d4_function/position.hh
similarity index 91%
rename from d4_ce/gen_grammar_sources/position.hh.tmp
rename to d4_function/position.hh
index c0275c1..a152a8f 100644
--- a/d4_ce/gen_grammar_sources/position.hh.tmp
+++ b/d4_function/position.hh
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.0.
+// A Bison parser, made by GNU Bison 3.0.1.
 
 // Positions for Bison parsers in C++
 
@@ -42,23 +42,23 @@
 # include <iostream>
 # include <string>
 
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULL 0
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
-#line 34 "d4_function_parser.yy" // location.cc:332
+#line 34 "d4_function_parser.yy" // location.cc:291
 namespace libdap {
-#line 56 "position.hh" // location.cc:332
+#line 56 "position.hh" // location.cc:291
   /// Abstract a position.
   class position
   {
   public:
     /// Construct a position.
-    explicit position (std::string* f = YY_NULL,
+    explicit position (std::string* f = YY_NULLPTR,
                        unsigned int l = 1u,
                        unsigned int c = 1u)
       : filename (f)
@@ -69,7 +69,7 @@ namespace libdap {
 
 
     /// Initialization.
-    void initialize (std::string* fn = YY_NULL,
+    void initialize (std::string* fn = YY_NULLPTR,
                      unsigned int l = 1u,
                      unsigned int c = 1u)
     {
@@ -174,7 +174,7 @@ namespace libdap {
     return ostr << pos.line << '.' << pos.column;
   }
 
-#line 34 "d4_function_parser.yy" // location.cc:332
+#line 34 "d4_function_parser.yy" // location.cc:291
 } // libdap
-#line 180 "position.hh" // location.cc:332
+#line 180 "position.hh" // location.cc:291
 #endif // !YY_YY_POSITION_HH_INCLUDED
diff --git a/d4_ce/gen_grammar_sources/stack.hh.tmp b/d4_function/stack.hh
similarity index 93%
rename from d4_ce/gen_grammar_sources/stack.hh.tmp
rename to d4_function/stack.hh
index 280d8af..72abe65 100644
--- a/d4_ce/gen_grammar_sources/stack.hh.tmp
+++ b/d4_function/stack.hh
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.0.
+// A Bison parser, made by GNU Bison 3.0.1.
 
 // Stack handling for Bison parsers in C++
 
@@ -40,9 +40,9 @@
 
 # include <vector>
 
-#line 34 "d4_function_parser.yy" // stack.hh:152
+#line 34 "d4_function_parser.yy" // stack.hh:133
 namespace libdap {
-#line 46 "stack.hh" // stack.hh:152
+#line 46 "stack.hh" // stack.hh:133
   template <class T, class S = std::vector<T> >
   class stack
   {
@@ -151,8 +151,8 @@ namespace libdap {
     unsigned int range_;
   };
 
-#line 34 "d4_function_parser.yy" // stack.hh:152
+#line 34 "d4_function_parser.yy" // stack.hh:133
 } // libdap
-#line 157 "stack.hh" // stack.hh:152
+#line 157 "stack.hh" // stack.hh:133
 
 #endif // !YY_YY_STACK_HH_INCLUDED
diff --git a/das.tab.cc b/das.tab.cc
index 817a800..2bb5e60 100644
--- a/das.tab.cc
+++ b/das.tab.cc
@@ -532,9 +532,9 @@ static const yytype_uint16 yyrline[] =
      254,   255,   254,   258,   259,   258,   262,   263,   262,   266,
      267,   266,   271,   291,   270,   299,   298,   304,   308,   314,
      318,   324,   328,   334,   338,   344,   348,   354,   358,   364,
-     368,   374,   379,   386,   390,   396,   412,   415,   418,   421,
-     421,   421,   421,   421,   422,   422,   422,   422,   423,   423,
-     423,   423,   427,   431,   426
+     368,   374,   379,   386,   390,   396,   410,   413,   416,   419,
+     419,   419,   419,   419,   420,   420,   420,   420,   421,   421,
+     421,   421,   425,   429,   424
 };
 #endif
 
@@ -1398,9 +1398,9 @@ yyreduce:
         case 2:
 #line 194 "das.yy" /* yacc.c:1646  */
     {
-		name = new string();
-		type = new string();
-		attr_tab_stack = new vector<AttrTable *>;
+		if (!name) name = new string();
+		if (!type) type = new string();
+		if (!attr_tab_stack) attr_tab_stack = new vector<AttrTable *>;
 
 		// push outermost AttrTable
 		PUSH(DAS_OBJ(arg)->get_top_level_attributes());
@@ -1412,9 +1412,9 @@ yyreduce:
 #line 203 "das.yy" /* yacc.c:1646  */
     {
 		POP;	// pop the DAS/AttrTable before stack's dtor
-		delete name;
-		delete type;
-		delete attr_tab_stack;
+		delete name; name = 0;
+		delete type; type = 0;
+		delete attr_tab_stack; attr_tab_stack = 0;
 	}
 #line 1420 "das.tab.cc" /* yacc.c:1646  */
     break;
@@ -1741,37 +1741,35 @@ yyreduce:
                     // XML must be quoted in the DAS but the quotes are an
                     // artifact of the DAS syntax so they are not part of the
                     // value.
-                    cerr << "Attr value as read: " << (yyvsp[0]) << endl;
                     string xml = unescape_double_quotes((yyvsp[0]));
-                    cerr << "w/o quotes: " << remove_quotes(xml) << endl;
                     
                     if (is_quoted(xml))
                         add_attribute(*type, *name, remove_quotes(xml), 0);
                     else
                         add_attribute(*type, *name, xml, 0);
                 }
-#line 1754 "das.tab.cc" /* yacc.c:1646  */
+#line 1752 "das.tab.cc" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 427 "das.yy" /* yacc.c:1646  */
+#line 425 "das.yy" /* yacc.c:1646  */
     { 
 		    *name = (yyvsp[0]);
 		}
-#line 1762 "das.tab.cc" /* yacc.c:1646  */
+#line 1760 "das.tab.cc" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 431 "das.yy" /* yacc.c:1646  */
+#line 429 "das.yy" /* yacc.c:1646  */
     {
 		    add_alias( DAS_OBJ(arg)->get_top_level_attributes(),
 		               TOP_OF_STACK, *name, string((yyvsp[0])) ) ;
                 }
-#line 1771 "das.tab.cc" /* yacc.c:1646  */
+#line 1769 "das.tab.cc" /* yacc.c:1646  */
     break;
 
 
-#line 1775 "das.tab.cc" /* yacc.c:1646  */
+#line 1773 "das.tab.cc" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1999,7 +1997,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 438 "das.yy" /* yacc.c:1906  */
+#line 436 "das.yy" /* yacc.c:1906  */
 
 
 // This function is required for linking, but DODS uses its own error
@@ -2017,9 +2015,9 @@ a_or_an(const string &subject)
     string::size_type pos = first_char.find_first_of("aeiouAEIOUyY");
     
     if (pos == string::npos)
-	return "a";
+		return "a";
     else
-	return "an";
+		return "an";
 }
 
 // This code used to throw an exception when a bad attribute value came
@@ -2034,16 +2032,16 @@ add_attribute(const string &type, const string &name, const string &value,
 	<< " to Attrtable: " << TOP_OF_STACK << endl);
 
     if (chk && !(*chk)(value.c_str())) {
-	string msg = "`";
-	msg += value + "' is not " + a_or_an(type) + " " + type + " value.";
-	add_bad_attribute(TOP_OF_STACK, type, name, value, msg);
-	return;
+		string msg = "`";
+		msg += value + "' is not " + a_or_an(type) + " " + type + " value.";
+		add_bad_attribute(TOP_OF_STACK, type, name, value, msg);
+		return;
     }
     
     if (STACK_EMPTY) {
-	string msg = "Whoa! Attribute table stack empty when adding `" ;
-	msg += name + ".' ";
-	parse_error(msg, das_line_num);
+		string msg = "Whoa! Attribute table stack empty when adding `" ;
+		msg += name + ".' ";
+		parse_error(msg, das_line_num);
     }
     
     try {
@@ -2057,8 +2055,8 @@ add_attribute(const string &type, const string &name, const string &value,
 	    TOP_OF_STACK->append_attr(name, type, value);
     }
     catch (Error &e) {
-	// re-throw with line number
-	parse_error(e.get_error_message().c_str(), das_line_num);
+	 	// re-throw with line number
+		parse_error(e.get_error_message().c_str(), das_line_num);
     }
 }
 
diff --git a/das.yy b/das.yy
index 5b2c618..8ff0c9d 100644
--- a/das.yy
+++ b/das.yy
@@ -192,42 +192,42 @@ static void add_bad_attribute(AttrTable *attr, const string &type,
 
 attr_start:
 	{
-		name = new string();
-		type = new string();
-		attr_tab_stack = new vector<AttrTable *>;
+		if (!name) name = new string();
+		if (!type) type = new string();
+		if (!attr_tab_stack) attr_tab_stack = new vector<AttrTable *>;
 
 		// push outermost AttrTable
 		PUSH(DAS_OBJ(arg)->get_top_level_attributes());
 	}
-        attributes
-        {
+    attributes
+    {
 		POP;	// pop the DAS/AttrTable before stack's dtor
-		delete name;
-		delete type;
-		delete attr_tab_stack;
+		delete name; name = 0;
+		delete type; type = 0;
+		delete attr_tab_stack; attr_tab_stack = 0;
 	}
 ;
 
 attributes:     attribute
-    	    	| attributes attribute
+    | attributes attribute
 
 ;
     	    	
 attribute:    	SCAN_ATTR '{' attr_list '}'
-                | error
-                {
+        | error
+        {
 		    parse_error((parser_arg *)arg, NO_DAS_MSG, das_line_num);
 		}
 ;
 
 attr_list:  	/* empty */
-    	    	| attr_tuple
-    	    	| attr_list attr_tuple
+    	| attr_tuple
+    	| attr_list attr_tuple
 ;
 
 attr_tuple:	alias
 
-                | SCAN_BYTE { save_str(*type, "Byte", das_line_num); }
+        | SCAN_BYTE { save_str(*type, "Byte", das_line_num); }
                 name { save_str(*name, $3, das_line_num); } 
 		bytes ';'
 
@@ -398,9 +398,7 @@ xml:            SCAN_WORD
                     // XML must be quoted in the DAS but the quotes are an
                     // artifact of the DAS syntax so they are not part of the
                     // value.
-                    cerr << "Attr value as read: " << $1 << endl;
                     string xml = unescape_double_quotes($1);
-                    cerr << "w/o quotes: " << remove_quotes(xml) << endl;
                     
                     if (is_quoted(xml))
                         add_attribute(*type, *name, remove_quotes(xml), 0);
@@ -452,9 +450,9 @@ a_or_an(const string &subject)
     string::size_type pos = first_char.find_first_of("aeiouAEIOUyY");
     
     if (pos == string::npos)
-	return "a";
+		return "a";
     else
-	return "an";
+		return "an";
 }
 
 // This code used to throw an exception when a bad attribute value came
@@ -469,16 +467,16 @@ add_attribute(const string &type, const string &name, const string &value,
 	<< " to Attrtable: " << TOP_OF_STACK << endl);
 
     if (chk && !(*chk)(value.c_str())) {
-	string msg = "`";
-	msg += value + "' is not " + a_or_an(type) + " " + type + " value.";
-	add_bad_attribute(TOP_OF_STACK, type, name, value, msg);
-	return;
+		string msg = "`";
+		msg += value + "' is not " + a_or_an(type) + " " + type + " value.";
+		add_bad_attribute(TOP_OF_STACK, type, name, value, msg);
+		return;
     }
     
     if (STACK_EMPTY) {
-	string msg = "Whoa! Attribute table stack empty when adding `" ;
-	msg += name + ".' ";
-	parse_error(msg, das_line_num);
+		string msg = "Whoa! Attribute table stack empty when adding `" ;
+		msg += name + ".' ";
+		parse_error(msg, das_line_num);
     }
     
     try {
@@ -492,8 +490,8 @@ add_attribute(const string &type, const string &name, const string &value,
 	    TOP_OF_STACK->append_attr(name, type, value);
     }
     catch (Error &e) {
-	// re-throw with line number
-	parse_error(e.get_error_message().c_str(), das_line_num);
+	 	// re-throw with line number
+		parse_error(e.get_error_message().c_str(), das_line_num);
     }
 }
 
diff --git a/dds.tab.cc b/dds.tab.cc
index c599be5..975d908 100644
--- a/dds.tab.cc
+++ b/dds.tab.cc
@@ -527,12 +527,12 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   160,   160,   160,   170,   171,   174,   178,   188,   192,
-     193,   200,   223,   222,   243,   242,   263,   275,   287,   262,
-     308,   319,   325,   331,   337,   338,   339,   340,   341,   342,
-     343,   344,   345,   348,   349,   352,   352,   352,   352,   352,
-     353,   353,   353,   353,   354,   354,   354,   354,   355,   358,
-     382,   386,   381,   413,   424,   425,   426
+       0,   160,   160,   160,   176,   177,   180,   184,   193,   196,
+     197,   206,   221,   220,   242,   241,   263,   275,   287,   262,
+     308,   318,   324,   330,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   347,   348,   351,   351,   351,   351,   351,
+     352,   352,   352,   352,   353,   353,   353,   353,   354,   357,
+     379,   383,   378,   409,   419,   420,   421
 };
 #endif
 
@@ -1386,168 +1386,167 @@ yyreduce:
         case 2:
 #line 160 "dds.yy" /* yacc.c:1646  */
     {
-		    /* On entry to the parser, make the BaseType stack. */
-		    ctor = new stack<BaseType *>;
-                }
-#line 1393 "dds.tab.cc" /* yacc.c:1646  */
+		    /* On entry to the parser, make the BaseType stack. 
+		       I use if (!ctor) here because in the tab.cc file,
+		       this is a case block in a switch, so it could be
+		       run more than once, causing the storage to be
+		       overwritten. jhrg 6/26/15 */
+		       
+		    if (!ctor)
+		    	ctor = new stack<BaseType *>;
+        }
+#line 1399 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 165 "dds.yy" /* yacc.c:1646  */
+#line 171 "dds.yy" /* yacc.c:1646  */
     {
 		    delete ctor; ctor = 0;
 		}
-#line 1401 "dds.tab.cc" /* yacc.c:1646  */
+#line 1407 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 175 "dds.yy" /* yacc.c:1646  */
+#line 181 "dds.yy" /* yacc.c:1646  */
     {
-		    (yyval.boolean) = (yyvsp[-3].boolean) && (yyvsp[-1].word);
+		    (yyval.boolean) = (yyvsp[-3].boolean) && (yyvsp[-1].boolean);
 		}
-#line 1409 "dds.tab.cc" /* yacc.c:1646  */
+#line 1415 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 179 "dds.yy" /* yacc.c:1646  */
+#line 185 "dds.yy" /* yacc.c:1646  */
     {
-		    parse_error((parser_arg *)arg, NO_DDS_MSG,
- 				dds_line_num, (yyvsp[0].word));
+		    parse_error((parser_arg *)arg, NO_DDS_MSG, dds_line_num, (yyvsp[0].word));
 		    error_exit_cleanup();
 		    YYABORT;
 		}
-#line 1420 "dds.tab.cc" /* yacc.c:1646  */
+#line 1425 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 188 "dds.yy" /* yacc.c:1646  */
+#line 193 "dds.yy" /* yacc.c:1646  */
     {
 		    (yyval.boolean) = true;
 		}
-#line 1428 "dds.tab.cc" /* yacc.c:1646  */
+#line 1433 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 192 "dds.yy" /* yacc.c:1646  */
+#line 196 "dds.yy" /* yacc.c:1646  */
     { (yyval.boolean) = true; }
-#line 1434 "dds.tab.cc" /* yacc.c:1646  */
+#line 1439 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 193 "dds.yy" /* yacc.c:1646  */
+#line 197 "dds.yy" /* yacc.c:1646  */
     { (yyval.boolean) = true; }
-#line 1440 "dds.tab.cc" /* yacc.c:1646  */
+#line 1445 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 201 "dds.yy" /* yacc.c:1646  */
+#line 207 "dds.yy" /* yacc.c:1646  */
     { 
 		    string smsg;
 		    if (current->check_semantics(smsg)) {
-			/* BaseType *current_save = current ; */
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
-			/* FIX
-			if( current_save == current )
-			{
-			    delete current ;
-			    current = 0 ;
-			}
-			*/
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
 		    } else {
 		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-2].word), (yyvsp[-1].word));
 		      error_exit_cleanup();
 		      YYABORT;
 		    }
-                    strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
-                    (yyval.word)[ID_MAX-1] = '\0';
+            strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
+            (yyval.word)[ID_MAX-1] = '\0';
 		}
-#line 1465 "dds.tab.cc" /* yacc.c:1646  */
+#line 1462 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 223 "dds.yy" /* yacc.c:1646  */
+#line 221 "dds.yy" /* yacc.c:1646  */
     { 
 		    if( current ) delete current ;
 		    current = ctor->top(); 
 		    ctor->pop();
 		}
-#line 1475 "dds.tab.cc" /* yacc.c:1646  */
+#line 1472 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 229 "dds.yy" /* yacc.c:1646  */
+#line 227 "dds.yy" /* yacc.c:1646  */
     { 
 		    string smsg;
-		    if (current->check_semantics(smsg))
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+		    if (current->check_semantics(smsg)) {
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+			}
 		    else {
-		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-6].word), (yyvsp[-1].word));
-		      error_exit_cleanup();
-		      YYABORT;
+		        invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-6].word), (yyvsp[-1].word));
+		        error_exit_cleanup();
+		        YYABORT;
 		    }
-                    strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
-                    (yyval.word)[ID_MAX-1] = '\0';
+            strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
+            (yyval.word)[ID_MAX-1] = '\0';
 		}
-#line 1492 "dds.tab.cc" /* yacc.c:1646  */
+#line 1490 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 243 "dds.yy" /* yacc.c:1646  */
+#line 242 "dds.yy" /* yacc.c:1646  */
     { 
 		    if( current ) delete current ;
 		    current = ctor->top(); 
 		    ctor->pop();
 		}
-#line 1502 "dds.tab.cc" /* yacc.c:1646  */
+#line 1500 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 249 "dds.yy" /* yacc.c:1646  */
+#line 248 "dds.yy" /* yacc.c:1646  */
     { 
 		    string smsg;
-		    if (current->check_semantics(smsg))
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+		    if (current->check_semantics(smsg)) {
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+			}
 		    else {
 		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-6].word), (yyvsp[-1].word));
 		      error_exit_cleanup();
 		      YYABORT;
 		    }
-                    strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
-                    (yyval.word)[ID_MAX-1] = '\0';
+            strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
+            (yyval.word)[ID_MAX-1] = '\0';
 		}
-#line 1519 "dds.tab.cc" /* yacc.c:1646  */
+#line 1518 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 16:
 #line 263 "dds.yy" /* yacc.c:1646  */
     { 
-		    if (is_keyword(string((yyvsp[-1].word)), "array"))
-			part = array; 
+		    if (is_keyword(string((yyvsp[-1].word)), "array")) {
+			    part = array;
+			}
 		    else {
-			ostringstream msg;
-			msg << BAD_DECLARATION;
-			parse_error((parser_arg *)arg, msg.str().c_str(),
-				    dds_line_num, (yyvsp[-1].word));
-			YYABORT;
+			    ostringstream msg;
+			    msg << BAD_DECLARATION;
+			    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[-1].word));
+			    YYABORT;
 		    }
-                }
-#line 1535 "dds.tab.cc" /* yacc.c:1646  */
+        }
+#line 1534 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 17:
 #line 275 "dds.yy" /* yacc.c:1646  */
     { 
-		    if (is_keyword(string((yyvsp[-1].word)), "maps"))
-			part = maps; 
+		    if (is_keyword(string((yyvsp[-1].word)), "maps")) {
+			    part = maps; 
+			}
 		    else {
-			ostringstream msg;
-			msg << BAD_DECLARATION;
-			parse_error((parser_arg *)arg, msg.str().c_str(),
-				    dds_line_num, (yyvsp[-1].word));
-			YYABORT;
+			    ostringstream msg;
+			    msg << BAD_DECLARATION;
+			    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[-1].word));
+			    YYABORT;
 		    }
-                }
-#line 1551 "dds.tab.cc" /* yacc.c:1646  */
+        }
+#line 1550 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 18:
@@ -1557,7 +1556,7 @@ yyreduce:
 		    current = ctor->top(); 
 		    ctor->pop();
 		}
-#line 1561 "dds.tab.cc" /* yacc.c:1646  */
+#line 1560 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -1565,18 +1564,18 @@ yyreduce:
     {
 		    string smsg;
 		    if (current->check_semantics(smsg)) {
-			part = nil; 
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+			    part = nil; 
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
 		    }
 		    else {
 		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-13].word), (yyvsp[-1].word));
 		      error_exit_cleanup();
 		      YYABORT;
 		    }
-                    strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
-                    (yyval.word)[ID_MAX-1] = '\0';
+        strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
+        (yyval.word)[ID_MAX-1] = '\0';
 		}
-#line 1580 "dds.tab.cc" /* yacc.c:1646  */
+#line 1579 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -1584,206 +1583,200 @@ yyreduce:
     {
 		    ostringstream msg;
 		    msg << BAD_DECLARATION;
-		    parse_error((parser_arg *)arg, msg.str().c_str(),
-				dds_line_num, (yyvsp[0].word));
+		    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[0].word));
 		    YYABORT;
 		}
-#line 1592 "dds.tab.cc" /* yacc.c:1646  */
+#line 1590 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 320 "dds.yy" /* yacc.c:1646  */
+#line 319 "dds.yy" /* yacc.c:1646  */
     { 
 		    ctor->push(DDS_OBJ(arg)->get_factory()->NewStructure()); 
 		}
-#line 1600 "dds.tab.cc" /* yacc.c:1646  */
+#line 1598 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 326 "dds.yy" /* yacc.c:1646  */
+#line 325 "dds.yy" /* yacc.c:1646  */
     { 
 		    ctor->push(DDS_OBJ(arg)->get_factory()->NewSequence()); 
 		}
-#line 1608 "dds.tab.cc" /* yacc.c:1646  */
+#line 1606 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 332 "dds.yy" /* yacc.c:1646  */
+#line 331 "dds.yy" /* yacc.c:1646  */
     { 
 		    ctor->push(DDS_OBJ(arg)->get_factory()->NewGrid()); 
 		}
-#line 1616 "dds.tab.cc" /* yacc.c:1646  */
+#line 1614 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 337 "dds.yy" /* yacc.c:1646  */
+#line 336 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewByte(); }
-#line 1622 "dds.tab.cc" /* yacc.c:1646  */
+#line 1620 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 338 "dds.yy" /* yacc.c:1646  */
+#line 337 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewInt16(); }
-#line 1628 "dds.tab.cc" /* yacc.c:1646  */
+#line 1626 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 339 "dds.yy" /* yacc.c:1646  */
+#line 338 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewUInt16(); }
-#line 1634 "dds.tab.cc" /* yacc.c:1646  */
+#line 1632 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 340 "dds.yy" /* yacc.c:1646  */
+#line 339 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewInt32(); }
-#line 1640 "dds.tab.cc" /* yacc.c:1646  */
+#line 1638 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 341 "dds.yy" /* yacc.c:1646  */
+#line 340 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewUInt32(); }
-#line 1646 "dds.tab.cc" /* yacc.c:1646  */
+#line 1644 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 342 "dds.yy" /* yacc.c:1646  */
+#line 341 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewFloat32(); }
-#line 1652 "dds.tab.cc" /* yacc.c:1646  */
+#line 1650 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 343 "dds.yy" /* yacc.c:1646  */
+#line 342 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewFloat64(); }
-#line 1658 "dds.tab.cc" /* yacc.c:1646  */
+#line 1656 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 344 "dds.yy" /* yacc.c:1646  */
+#line 343 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewStr(); }
-#line 1664 "dds.tab.cc" /* yacc.c:1646  */
+#line 1662 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 345 "dds.yy" /* yacc.c:1646  */
+#line 344 "dds.yy" /* yacc.c:1646  */
     { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewUrl(); }
-#line 1670 "dds.tab.cc" /* yacc.c:1646  */
+#line 1668 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 348 "dds.yy" /* yacc.c:1646  */
+#line 347 "dds.yy" /* yacc.c:1646  */
     { current->set_name((yyvsp[0].word)); }
-#line 1676 "dds.tab.cc" /* yacc.c:1646  */
+#line 1674 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 359 "dds.yy" /* yacc.c:1646  */
+#line 358 "dds.yy" /* yacc.c:1646  */
     { 
-		     if (!check_int32((yyvsp[-1].word))) {
-			 string msg = "In the dataset descriptor object:\n";
-			 msg += "Expected an array subscript.\n";
-			 parse_error((parser_arg *)arg, msg.c_str(), 
-				 dds_line_num, (yyvsp[-1].word));
-		     }
-		     if (current->type() == dods_array_c
-			 && check_int32((yyvsp[-1].word))) {
-			 ((Array *)current)->append_dim(atoi((yyvsp[-1].word)));
-		     }
-		     else {
-			 Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
-			 a->add_var(current); 
-			 a->append_dim(atoi((yyvsp[-1].word)));
-			 if( current ) delete current ;
-			 current = a;
-		     }
+		    if (!check_int32((yyvsp[-1].word))) {
+			    string msg = "In the dataset descriptor object:\n";
+			    msg += "Expected an array subscript.\n";
+			    parse_error((parser_arg *)arg, msg.c_str(), dds_line_num, (yyvsp[-1].word));
+		    }
+		    if (current->type() == dods_array_c && check_int32((yyvsp[-1].word))) {
+			    ((Array *)current)->append_dim(atoi((yyvsp[-1].word)));
+		    }
+		    else {
+			    Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
+			    a->add_var(current); 
+			    a->append_dim(atoi((yyvsp[-1].word)));
+			    if( current ) delete current ;
+			    current = a;
+		    }
 
-		     (yyval.boolean) = true;
+		    (yyval.boolean) = true;
 		 }
-#line 1702 "dds.tab.cc" /* yacc.c:1646  */
+#line 1698 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 382 "dds.yy" /* yacc.c:1646  */
+#line 379 "dds.yy" /* yacc.c:1646  */
     {
-		     id = new string((yyvsp[0].word));
+		     if (!id) id = new string((yyvsp[0].word));
 		 }
-#line 1710 "dds.tab.cc" /* yacc.c:1646  */
+#line 1706 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 386 "dds.yy" /* yacc.c:1646  */
+#line 383 "dds.yy" /* yacc.c:1646  */
     { 
 		     if (!check_int32((yyvsp[0].word))) {
-			 string msg = "In the dataset descriptor object:\n";
-			 msg += "Expected an array subscript.\n";
-			 parse_error((parser_arg *)arg, msg.c_str(), 
-				 dds_line_num, (yyvsp[0].word));
-			 error_exit_cleanup();
-			 YYABORT;
+			     string msg = "In the dataset descriptor object:\n";
+			     msg += "Expected an array subscript.\n";
+			     parse_error((parser_arg *)arg, msg.c_str(), dds_line_num, (yyvsp[0].word));
+			     error_exit_cleanup();
+			     YYABORT;
 		     }
 		     if (current->type() == dods_array_c) {
-			 ((Array *)current)->append_dim(atoi((yyvsp[0].word)), *id);
+			     ((Array *)current)->append_dim(atoi((yyvsp[0].word)), *id);
 		     }
 		     else {
-			 Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
-			 a->add_var(current); 
-			 a->append_dim(atoi((yyvsp[0].word)), *id);
-			 if( current ) delete current ;
-			 current = a;
+			     Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
+			     a->add_var(current); 
+			     a->append_dim(atoi((yyvsp[0].word)), *id);
+			     if( current ) delete current ;
+			     current = a;
 		     }
 
 		     delete id; id = 0;
 		 }
-#line 1737 "dds.tab.cc" /* yacc.c:1646  */
+#line 1732 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 409 "dds.yy" /* yacc.c:1646  */
+#line 405 "dds.yy" /* yacc.c:1646  */
     {
 		     (yyval.boolean) = true;
 		 }
-#line 1745 "dds.tab.cc" /* yacc.c:1646  */
+#line 1740 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 414 "dds.yy" /* yacc.c:1646  */
+#line 410 "dds.yy" /* yacc.c:1646  */
     {
 		     ostringstream msg;
 		     msg << "In the dataset descriptor object:" << endl
-			 << "Expected an array subscript." << endl;
-		     parse_error((parser_arg *)arg, msg.str().c_str(), 
-				 dds_line_num, (yyvsp[0].word));
+			     << "Expected an array subscript." << endl;
+		     parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[0].word));
 		     YYABORT;
 		 }
-#line 1758 "dds.tab.cc" /* yacc.c:1646  */
+#line 1752 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 424 "dds.yy" /* yacc.c:1646  */
-    { (*DDS_OBJ(arg)).set_dataset_name((yyvsp[0].word)); }
-#line 1764 "dds.tab.cc" /* yacc.c:1646  */
+#line 419 "dds.yy" /* yacc.c:1646  */
+    { (*DDS_OBJ(arg)).set_dataset_name((yyvsp[0].word)); (yyval.boolean) = true;}
+#line 1758 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 425 "dds.yy" /* yacc.c:1646  */
-    { (*DDS_OBJ(arg)).set_dataset_name((yyvsp[0].word)); }
-#line 1770 "dds.tab.cc" /* yacc.c:1646  */
+#line 420 "dds.yy" /* yacc.c:1646  */
+    { (*DDS_OBJ(arg)).set_dataset_name((yyvsp[0].word)); (yyval.boolean) = true; }
+#line 1764 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 427 "dds.yy" /* yacc.c:1646  */
+#line 422 "dds.yy" /* yacc.c:1646  */
     {
-		  ostringstream msg;
-		  msg << "Error parsing the dataset name." << endl
-		      << "The name may be missing or may contain an illegal character." << endl;
-		     parse_error((parser_arg *)arg, msg.str().c_str(),
-				 dds_line_num, (yyvsp[0].word));
-		     YYABORT;
+		    ostringstream msg;
+		    msg << "Error parsing the dataset name." << endl
+		        << "The name may be missing or may contain an illegal character." << endl;
+		    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[0].word));
+		    YYABORT;
 		}
-#line 1783 "dds.tab.cc" /* yacc.c:1646  */
+#line 1776 "dds.tab.cc" /* yacc.c:1646  */
     break;
 
 
-#line 1787 "dds.tab.cc" /* yacc.c:1646  */
+#line 1780 "dds.tab.cc" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2011,7 +2004,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 437 "dds.yy" /* yacc.c:1906  */
+#line 431 "dds.yy" /* yacc.c:1906  */
 
 
 /* 
diff --git a/dds.yy b/dds.yy
index 517192c..8ab6bcf 100644
--- a/dds.yy
+++ b/dds.yy
@@ -150,19 +150,25 @@ void invalid_declaration(parser_arg *arg, string semantic_err_msg,
 %token <word> SCAN_STRING
 %token <word> SCAN_URL 
 
-%type <boolean> datasets dataset declarations array_decl
+%type <boolean> datasets dataset declarations array_decl name
 
-%type <word> declaration base_type structure sequence grid var var_name name
+%type <word> declaration base_type structure sequence grid var var_name
 
 %%
 
 start:
-                {
-		    /* On entry to the parser, make the BaseType stack. */
-		    ctor = new stack<BaseType *>;
-                }
-                datasets
-                {
+        {
+		    /* On entry to the parser, make the BaseType stack. 
+		       I use if (!ctor) here because in the tab.cc file,
+		       this is a case block in a switch, so it could be
+		       run more than once, causing the storage to be
+		       overwritten. jhrg 6/26/15 */
+		       
+		    if (!ctor)
+		    	ctor = new stack<BaseType *>;
+        }
+        datasets
+        {
 		    delete ctor; ctor = 0;
 		}
 ;
@@ -172,51 +178,43 @@ datasets:	dataset
 ;
 
 dataset:	SCAN_DATASET '{' declarations '}' name ';'
-                {
+        {
 		    $$ = $3 && $5;
 		}
-                | error
-                {
-		    parse_error((parser_arg *)arg, NO_DDS_MSG,
- 				dds_line_num, $<word>1);
+        | error
+        {
+		    parse_error((parser_arg *)arg, NO_DDS_MSG, dds_line_num, $<word>1);
 		    error_exit_cleanup();
 		    YYABORT;
 		}
 ;
 
 declarations:	/* empty */
-                {
+        {
 		    $$ = true;
 		}
-
-                | declaration { $$ = true; }
-                | declarations declaration { $$ = true; }
+        | declaration { $$ = true; }
+        | declarations declaration { $$ = true; }
 ;
 
 /* This non-terminal is here only to keep types like `List List Int32' from
    parsing. DODS does not allow Lists of Lists. Those types make translation
-   to/from arrays too hard. */
+   to/from arrays too hard. 
+   
+   NB: I removed the List type from DAP years ago. jhrg 6/26/15 */
 
 declaration:  base_type var ';' 
-                { 
+        { 
 		    string smsg;
 		    if (current->check_semantics(smsg)) {
-			/* BaseType *current_save = current ; */
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
-			/* FIX
-			if( current_save == current )
-			{
-			    delete current ;
-			    current = 0 ;
-			}
-			*/
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
 		    } else {
 		      invalid_declaration((parser_arg *)arg, smsg, $1, $2);
 		      error_exit_cleanup();
 		      YYABORT;
 		    }
-                    strncpy($$,$2,ID_MAX);
-                    $$[ID_MAX-1] = '\0';
+            strncpy($$,$2,ID_MAX);
+            $$[ID_MAX-1] = '\0';
 		}
 
 		| structure  '{' declarations '}' 
@@ -225,92 +223,93 @@ declaration:  base_type var ';'
 		    current = ctor->top(); 
 		    ctor->pop();
 		} 
-                var ';' 
-                { 
+        var ';' 
+        { 
 		    string smsg;
-		    if (current->check_semantics(smsg))
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+		    if (current->check_semantics(smsg)) {
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+			}
 		    else {
-		      invalid_declaration((parser_arg *)arg, smsg, $1, $6);
-		      error_exit_cleanup();
-		      YYABORT;
+		        invalid_declaration((parser_arg *)arg, smsg, $1, $6);
+		        error_exit_cleanup();
+		        YYABORT;
 		    }
-                    strncpy($$,$6,ID_MAX);
-                    $$[ID_MAX-1] = '\0';
+            strncpy($$,$6,ID_MAX);
+            $$[ID_MAX-1] = '\0';
 		}
 
 		| sequence '{' declarations '}' 
-                { 
+        { 
 		    if( current ) delete current ;
 		    current = ctor->top(); 
 		    ctor->pop();
 		} 
-                var ';' 
-                { 
+        var ';' 
+        { 
 		    string smsg;
-		    if (current->check_semantics(smsg))
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+		    if (current->check_semantics(smsg)) {
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+			}
 		    else {
 		      invalid_declaration((parser_arg *)arg, smsg, $1, $6);
 		      error_exit_cleanup();
 		      YYABORT;
 		    }
-                    strncpy($$,$6,ID_MAX);
-                    $$[ID_MAX-1] = '\0';
+            strncpy($$,$6,ID_MAX);
+            $$[ID_MAX-1] = '\0';
 		}
 
 		| grid '{' SCAN_WORD ':'
 		{ 
-		    if (is_keyword(string($3), "array"))
-			part = array; 
+		    if (is_keyword(string($3), "array")) {
+			    part = array;
+			}
 		    else {
-			ostringstream msg;
-			msg << BAD_DECLARATION;
-			parse_error((parser_arg *)arg, msg.str().c_str(),
-				    dds_line_num, $3);
-			YYABORT;
+			    ostringstream msg;
+			    msg << BAD_DECLARATION;
+			    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, $3);
+			    YYABORT;
 		    }
-                }
-                declaration SCAN_WORD ':'
+        }
+        declaration SCAN_WORD ':'
 		{ 
-		    if (is_keyword(string($7), "maps"))
-			part = maps; 
+		    if (is_keyword(string($7), "maps")) {
+			    part = maps; 
+			}
 		    else {
-			ostringstream msg;
-			msg << BAD_DECLARATION;
-			parse_error((parser_arg *)arg, msg.str().c_str(),
-				    dds_line_num, $7);
-			YYABORT;
+			    ostringstream msg;
+			    msg << BAD_DECLARATION;
+			    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, $7);
+			    YYABORT;
 		    }
-                }
-                declarations '}' 
+        }
+        declarations '}' 
 		{
 		    if( current ) delete current ;
 		    current = ctor->top(); 
 		    ctor->pop();
 		}
-                var ';' 
-                {
+        var ';' 
+        {
 		    string smsg;
 		    if (current->check_semantics(smsg)) {
-			part = nil; 
-			add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
+			    part = nil; 
+			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
 		    }
 		    else {
 		      invalid_declaration((parser_arg *)arg, smsg, $1, $13);
 		      error_exit_cleanup();
 		      YYABORT;
 		    }
-                    strncpy($$,$13,ID_MAX);
-                    $$[ID_MAX-1] = '\0';
+        strncpy($$,$13,ID_MAX);
+        $$[ID_MAX-1] = '\0';
 		}
 
-                | error 
-                {
+        | error 
+        {
 		    ostringstream msg;
 		    msg << BAD_DECLARATION;
-		    parse_error((parser_arg *)arg, msg.str().c_str(),
-				dds_line_num, $<word>1);
+		    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, $<word>1);
 		    YYABORT;
 		}
 ;
@@ -350,87 +349,82 @@ var:		var_name { current->set_name($1); }
 ;
 
 var_name:       SCAN_WORD | SCAN_BYTE | SCAN_INT16 | SCAN_INT32 | SCAN_UINT16
-                | SCAN_UINT32 | SCAN_FLOAT32 | SCAN_FLOAT64 | SCAN_STRING
-                | SCAN_URL | SCAN_STRUCTURE | SCAN_SEQUENCE | SCAN_GRID
-                | SCAN_LIST
+        | SCAN_UINT32 | SCAN_FLOAT32 | SCAN_FLOAT64 | SCAN_STRING
+        | SCAN_URL | SCAN_STRUCTURE | SCAN_SEQUENCE | SCAN_GRID
+        | SCAN_LIST
 ;
 
 array_decl:	'[' SCAN_WORD ']'
-                 { 
-		     if (!check_int32($2)) {
-			 string msg = "In the dataset descriptor object:\n";
-			 msg += "Expected an array subscript.\n";
-			 parse_error((parser_arg *)arg, msg.c_str(), 
-				 dds_line_num, $2);
-		     }
-		     if (current->type() == dods_array_c
-			 && check_int32($2)) {
-			 ((Array *)current)->append_dim(atoi($2));
-		     }
-		     else {
-			 Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
-			 a->add_var(current); 
-			 a->append_dim(atoi($2));
-			 if( current ) delete current ;
-			 current = a;
-		     }
+        { 
+		    if (!check_int32($2)) {
+			    string msg = "In the dataset descriptor object:\n";
+			    msg += "Expected an array subscript.\n";
+			    parse_error((parser_arg *)arg, msg.c_str(), dds_line_num, $2);
+		    }
+		    if (current->type() == dods_array_c && check_int32($2)) {
+			    ((Array *)current)->append_dim(atoi($2));
+		    }
+		    else {
+			    Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
+			    a->add_var(current); 
+			    a->append_dim(atoi($2));
+			    if( current ) delete current ;
+			    current = a;
+		    }
 
-		     $$ = true;
+		    $$ = true;
 		 }
 
 		 | '[' SCAN_WORD 
 		 {
-		     id = new string($2);
+		     if (!id) id = new string($2);
 		 } 
-                 '=' SCAN_WORD 
-                 { 
+         '=' SCAN_WORD 
+         { 
 		     if (!check_int32($5)) {
-			 string msg = "In the dataset descriptor object:\n";
-			 msg += "Expected an array subscript.\n";
-			 parse_error((parser_arg *)arg, msg.c_str(), 
-				 dds_line_num, $5);
-			 error_exit_cleanup();
-			 YYABORT;
+			     string msg = "In the dataset descriptor object:\n";
+			     msg += "Expected an array subscript.\n";
+			     parse_error((parser_arg *)arg, msg.c_str(), dds_line_num, $5);
+			     error_exit_cleanup();
+			     YYABORT;
 		     }
 		     if (current->type() == dods_array_c) {
-			 ((Array *)current)->append_dim(atoi($5), *id);
+			     ((Array *)current)->append_dim(atoi($5), *id);
 		     }
 		     else {
-			 Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
-			 a->add_var(current); 
-			 a->append_dim(atoi($5), *id);
-			 if( current ) delete current ;
-			 current = a;
+			     Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
+			     a->add_var(current); 
+			     a->append_dim(atoi($5), *id);
+			     if( current ) delete current ;
+			     current = a;
 		     }
 
 		     delete id; id = 0;
 		 }
 		 ']'
-                 {
+         {
 		     $$ = true;
 		 }
 
 		 | error
-                 {
+         {
 		     ostringstream msg;
 		     msg << "In the dataset descriptor object:" << endl
-			 << "Expected an array subscript." << endl;
-		     parse_error((parser_arg *)arg, msg.str().c_str(), 
-				 dds_line_num, $<word>1);
+			     << "Expected an array subscript." << endl;
+		     parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, $<word>1);
 		     YYABORT;
 		 }
 ;
 
-name:		var_name { (*DDS_OBJ(arg)).set_dataset_name($1); }
-		| SCAN_DATASET { (*DDS_OBJ(arg)).set_dataset_name($1); }
-                | error 
-                {
-		  ostringstream msg;
-		  msg << "Error parsing the dataset name." << endl
-		      << "The name may be missing or may contain an illegal character." << endl;
-		     parse_error((parser_arg *)arg, msg.str().c_str(),
-				 dds_line_num, $<word>1);
-		     YYABORT;
+name:		var_name { (*DDS_OBJ(arg)).set_dataset_name($1); $$ = true;}
+		| SCAN_DATASET { (*DDS_OBJ(arg)).set_dataset_name($1); $$ = true; }
+        | error 
+        {
+		    ostringstream msg;
+		    msg << "Error parsing the dataset name." << endl
+		        << "The name may be missing or may contain an illegal character." << endl;
+		    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, $<word>1);
+		    YYABORT;
 		}
 ;
 
diff --git a/debug.h b/debug.h
index 30897b2..10614a1 100644
--- a/debug.h
+++ b/debug.h
@@ -69,8 +69,10 @@ using std::endl;
 
 #ifdef DODS_DEBUG2
 #define DBG2(x) FILE_N_LINE; x
+#define DBG2N(x) x
 #else
 #define DBG2(x) /* x */
+#define DBG2n(x) /* x */
 #endif
 
 #ifdef DODS_PERF
diff --git a/doxy.conf b/doxy.conf
index 6042273..b0ece18 100644
--- a/doxy.conf
+++ b/doxy.conf
@@ -31,7 +31,7 @@ PROJECT_NAME           = libdap++
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = "Updated for version 3.14.0"
+PROJECT_NUMBER         = "Updated for version 3.15.1"
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
diff --git a/getdap.cc b/getdap.cc
index 37fdf1a..418d1cc 100644
--- a/getdap.cc
+++ b/getdap.cc
@@ -159,7 +159,7 @@ int main(int argc, char *argv[])
     _setmode(_fileno(stdout), _O_BINARY);
 #endif
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             get_dds = true;
diff --git a/getdap4.cc b/getdap4.cc
index 295e310..454300a 100644
--- a/getdap4.cc
+++ b/getdap4.cc
@@ -179,7 +179,7 @@ int main(int argc, char *argv[])
     _setmode(_fileno(stdout), _O_BINARY);
 #endif
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             get_dmr = true;
diff --git a/gl/Makefile.am b/gl/Makefile.am
index ded217a..b627921 100644
--- a/gl/Makefile.am
+++ b/gl/Makefile.am
@@ -1,6 +1,6 @@
 ## DO NOT EDIT! GENERATED AUTOMATICALLY!
 ## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -53,6 +53,15 @@ libgnu_la_LDFLAGS += -no-undefined
 libgnu_la_LDFLAGS += $(LTLIBINTL)
 libgnu_la_LDFLAGS += $(LTLIBTHREAD)
 
+## begin gnulib module absolute-header
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER)
+
+## end   gnulib module absolute-header
+
 ## begin gnulib module alloca-opt
 
 BUILT_SOURCES += $(ALLOCA_H)
@@ -323,24 +332,6 @@ libgnu_la_SOURCES += glthread/lock.h glthread/lock.c
 
 ## end   gnulib module lock
 
-## begin gnulib module malloc-gnu
-
-
-EXTRA_DIST += malloc.c
-
-EXTRA_libgnu_la_SOURCES += malloc.c
-
-## end   gnulib module malloc-gnu
-
-## begin gnulib module malloc-posix
-
-
-EXTRA_DIST += malloc.c
-
-EXTRA_libgnu_la_SOURCES += malloc.c
-
-## end   gnulib module malloc-posix
-
 ## begin gnulib module mbrtowc
 
 
@@ -505,6 +496,7 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
 	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+	      -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
 	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
 	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
 	      < $(srcdir)/stddef.in.h; \
@@ -603,6 +595,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
 	      -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
 	      -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
 	      -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
+	      -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \
 	      -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
 	      -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
 	      -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
@@ -654,6 +647,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
 	      -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
 	      -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
 	      -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+	      -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
 	      -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
 	      -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
 	      -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
@@ -844,9 +838,11 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
 	      -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
 	      -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
 	      -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+	      -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \
 	      -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
 	      -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
 	      -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+	      -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
 	      -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
 	      -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
 	      -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
diff --git a/gl/Makefile.in b/gl/Makefile.in
index 755940a..e263219 100644
--- a/gl/Makefile.in
+++ b/gl/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,7 +14,7 @@
 
 @SET_MAKE@
 
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -41,23 +40,51 @@
 
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -76,10 +103,11 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = gl
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/conf/depcomp
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/conf/depcomp $(noinst_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -100,8 +128,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -137,31 +165,57 @@ am__dirstamp = $(am__leading_dot)dirstamp
 am_libgnu_la_OBJECTS = localcharset.lo glthread/lock.lo \
 	glthread/threadlib.lo unistd.lo wctype-h.lo
 libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS)
-libgnu_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/conf/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
 DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -170,9 +224,29 @@ am__can_run_installinfo = \
 HEADERS = $(noinst_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
 	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -207,6 +281,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -318,6 +393,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -435,6 +511,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -643,9 +720,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -655,6 +734,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -763,10 +843,9 @@ noinst_LIBRARIES =
 noinst_LTLIBRARIES = libgnu.la
 EXTRA_DIST = m4/gnulib-cache.m4 alloca.in.h btowc.c byteswap.in.h \
 	$(top_srcdir)/conf/config.rpath langinfo.in.h config.charset \
-	ref-add.sin ref-del.sin locale.in.h localeconv.c malloc.c \
-	malloc.c mbrtowc.c mbsinit.c mbtowc-impl.h mbtowc.c \
-	nl_langinfo.c regcomp.c regex.c regex.h regex_internal.c \
-	regex_internal.h regexec.c \
+	ref-add.sin ref-del.sin locale.in.h localeconv.c mbrtowc.c \
+	mbsinit.c mbtowc-impl.h mbtowc.c nl_langinfo.c regcomp.c \
+	regex.c regex.h regex_internal.c regex_internal.h regexec.c \
 	$(top_srcdir)/conf/snippet/_Noreturn.h \
 	$(top_srcdir)/conf/snippet/arg-nonnull.h \
 	$(top_srcdir)/conf/snippet/c++defs.h \
@@ -808,11 +887,16 @@ libgnu_la_SOURCES = gettext.h localcharset.h localcharset.c \
 	wctype-h.c
 libgnu_la_LIBADD = $(gl_LTLIBOBJS)
 libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
-EXTRA_libgnu_la_SOURCES = btowc.c localeconv.c malloc.c malloc.c \
-	mbrtowc.c mbsinit.c mbtowc.c nl_langinfo.c regcomp.c regex.c \
-	regex_internal.c regexec.c wcrtomb.c
+EXTRA_libgnu_la_SOURCES = btowc.c localeconv.c mbrtowc.c mbsinit.c \
+	mbtowc.c nl_langinfo.c regcomp.c regex.c regex_internal.c \
+	regexec.c wcrtomb.c
 libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) \
 	$(LTLIBTHREAD)
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER)
 charset_alias = $(DESTDIR)$(libdir)/charset.alias
 charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
 
@@ -882,15 +966,14 @@ glthread/lock.lo: glthread/$(am__dirstamp) \
 	glthread/$(DEPDIR)/$(am__dirstamp)
 glthread/threadlib.lo: glthread/$(am__dirstamp) \
 	glthread/$(DEPDIR)/$(am__dirstamp)
+
 libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) 
-	$(libgnu_la_LINK)  $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS)
+	$(AM_V_CCLD)$(libgnu_la_LINK)  $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
-	-rm -f glthread/lock.$(OBJEXT)
-	-rm -f glthread/lock.lo
-	-rm -f glthread/threadlib.$(OBJEXT)
-	-rm -f glthread/threadlib.lo
+	-rm -f glthread/*.$(OBJEXT)
+	-rm -f glthread/*.lo
 
 distclean-compile:
 	-rm -f *.tab.c
@@ -898,7 +981,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/btowc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/localcharset.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/localeconv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/malloc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbrtowc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbsinit.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbtowc.Plo at am__quote@
@@ -914,28 +996,28 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at glthread/$(DEPDIR)/threadlib.Plo at am__quote@
 
 .c.o:
- at am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ $<
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
- at am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
 @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .c.lo:
- at am__fastdepCC_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -950,17 +1032,20 @@ clean-libtool:
 # (1) if the variable is set in 'config.status', edit 'config.status'
 #     (which will cause the Makefiles to be regenerated when you run 'make');
 # (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -975,61 +1060,12 @@ $(RECURSIVE_TARGETS):
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -1045,12 +1081,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -1062,15 +1093,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -1079,9 +1106,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
 
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -1267,15 +1295,13 @@ ps-am:
 
 uninstall-am: uninstall-local
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	cscopelist-recursive ctags-recursive install install-am \
-	install-strip tags-recursive
+.MAKE: $(am__recursive_targets) all check install install-am \
+	install-strip
 
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am all-local check check-am clean clean-generic \
-	clean-libtool clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
-	cscopelist cscopelist-recursive ctags ctags-recursive \
-	distclean distclean-compile distclean-generic \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
+	check check-am clean clean-generic clean-libtool \
+	clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
@@ -1286,7 +1312,7 @@ uninstall-am: uninstall-local
 	installdirs-am maintainer-clean maintainer-clean-generic \
 	mostlyclean mostlyclean-compile mostlyclean-generic \
 	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am tags \
-	tags-recursive uninstall uninstall-am uninstall-local
+	tags-am uninstall uninstall-am uninstall-local
 
 
 # We need the following in order to create <alloca.h> when the system
@@ -1505,6 +1531,7 @@ warn-on-use.h: $(top_srcdir)/conf/snippet/warn-on-use.h
 @GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
 @GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
 @GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
 @GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
 @GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
 @GL_GENERATE_STDDEF_H_TRUE@	      < $(srcdir)/stddef.in.h; \
@@ -1580,6 +1607,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
 	      -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
 	      -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
 	      -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
+	      -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \
 	      -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
 	      -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
 	      -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
@@ -1631,6 +1659,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
 	      -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
 	      -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
 	      -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+	      -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
 	      -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
 	      -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
 	      -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
@@ -1787,9 +1816,11 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
 	      -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
 	      -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
 	      -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+	      -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \
 	      -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
 	      -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
 	      -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+	      -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
 	      -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
 	      -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
 	      -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
diff --git a/gl/alloca.in.h b/gl/alloca.in.h
index 19aea41..dc1b550 100644
--- a/gl/alloca.in.h
+++ b/gl/alloca.in.h
@@ -1,6 +1,6 @@
 /* Memory allocation on the stack.
 
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2013 Free Software Foundation,
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2015 Free Software Foundation,
    Inc.
 
    This program is free software; you can redistribute it and/or modify it
diff --git a/gl/btowc.c b/gl/btowc.c
index aca5742..01e80c5 100644
--- a/gl/btowc.c
+++ b/gl/btowc.c
@@ -1,5 +1,5 @@
 /* Convert unibyte character to wide character.
-   Copyright (C) 2008, 2010-2013 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2010-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno at clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/gl/byteswap.in.h b/gl/byteswap.in.h
index 6c7ab6d..673c53b 100644
--- a/gl/byteswap.in.h
+++ b/gl/byteswap.in.h
@@ -1,5 +1,5 @@
 /* byteswap.h - Byte swapping
-   Copyright (C) 2005, 2007, 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2015 Free Software Foundation, Inc.
    Written by Oskar Liljeblad <oskar at osk.mine.nu>, 2005.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/gl/config.charset b/gl/config.charset
old mode 100755
new mode 100644
index f15f5bb..8083c60
--- a/gl/config.charset
+++ b/gl/config.charset
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Output a system dependent table of character encoding aliases.
 #
-#   Copyright (C) 2000-2004, 2006-2013 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2004, 2006-2015 Free Software Foundation, Inc.
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU Lesser General Public License as published by
@@ -348,12 +348,10 @@ case "$os" in
     #echo "sun_eu_greek ?" # what is this?
     echo "UTF-8 UTF-8"
     ;;
-  freebsd* | os2*)
+  freebsd*)
     # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
     # localcharset.c falls back to using the full locale name
     # from the environment variables.
-    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
-    # reuse FreeBSD's locale data for OS/2.
     echo "C ASCII"
     echo "US-ASCII ASCII"
     for l in la_LN lt_LN; do
diff --git a/gl/gettext.h b/gl/gettext.h
index 2cc0e05..3770ca0 100644
--- a/gl/gettext.h
+++ b/gl/gettext.h
@@ -1,5 +1,5 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2013 Free Software
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/gl/glthread/lock.c b/gl/glthread/lock.c
index 4c2702e..f21b76c 100644
--- a/gl/glthread/lock.c
+++ b/gl/glthread/lock.c
@@ -1,5 +1,5 @@
 /* Locking in multithreaded situations.
-   Copyright (C) 2005-2013 Free Software Foundation, Inc.
+   Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/glthread/lock.h b/gl/glthread/lock.h
index 4e75e38..6b83f61 100644
--- a/gl/glthread/lock.h
+++ b/gl/glthread/lock.h
@@ -1,5 +1,5 @@
 /* Locking in multithreaded situations.
-   Copyright (C) 2005-2013 Free Software Foundation, Inc.
+   Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/glthread/threadlib.c b/gl/glthread/threadlib.c
index 9ec1789..30175b7 100644
--- a/gl/glthread/threadlib.c
+++ b/gl/glthread/threadlib.c
@@ -1,5 +1,5 @@
 /* Multithreading primitives.
-   Copyright (C) 2005-2013 Free Software Foundation, Inc.
+   Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/langinfo.in.h b/gl/langinfo.in.h
index d60a980..cf992ce 100644
--- a/gl/langinfo.in.h
+++ b/gl/langinfo.in.h
@@ -1,5 +1,5 @@
 /* Substitute for and wrapper around <langinfo.h>.
-   Copyright (C) 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -49,7 +49,10 @@ typedef int nl_item;
 # define CODESET     10000
 /* nl_langinfo items of the LC_NUMERIC category */
 # define RADIXCHAR   10001
+# define DECIMAL_POINT RADIXCHAR
 # define THOUSEP     10002
+# define THOUSANDS_SEP THOUSEP
+# define GROUPING    10114
 /* nl_langinfo items of the LC_TIME category */
 # define D_T_FMT     10003
 # define D_FMT       10004
@@ -102,6 +105,21 @@ typedef int nl_item;
 # define ALT_DIGITS  10051
 /* nl_langinfo items of the LC_MONETARY category */
 # define CRNCYSTR    10052
+# define CURRENCY_SYMBOL   CRNCYSTR
+# define INT_CURR_SYMBOL   10100
+# define MON_DECIMAL_POINT 10101
+# define MON_THOUSANDS_SEP 10102
+# define MON_GROUPING      10103
+# define POSITIVE_SIGN     10104
+# define NEGATIVE_SIGN     10105
+# define FRAC_DIGITS       10106
+# define INT_FRAC_DIGITS   10107
+# define P_CS_PRECEDES     10108
+# define N_CS_PRECEDES     10109
+# define P_SEP_BY_SPACE    10110
+# define N_SEP_BY_SPACE    10111
+# define P_SIGN_POSN       10112
+# define N_SIGN_POSN       10113
 /* nl_langinfo items of the LC_MESSAGES category */
 # define YESEXPR     10053
 # define NOEXPR      10054
diff --git a/gl/localcharset.c b/gl/localcharset.c
index 054e7db..5bbe2c8 100644
--- a/gl/localcharset.c
+++ b/gl/localcharset.c
@@ -1,6 +1,6 @@
 /* Determine a canonical name for the current locale's character encoding.
 
-   Copyright (C) 2000-2006, 2008-2013 Free Software Foundation, Inc.
+   Copyright (C) 2000-2006, 2008-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -34,6 +34,7 @@
 
 #if defined _WIN32 || defined __WIN32__
 # define WINDOWS_NATIVE
+# include <locale.h>
 #endif
 
 #if defined __EMX__
@@ -127,7 +128,7 @@ get_charset_aliases (void)
   cp = charset_aliases;
   if (cp == NULL)
     {
-#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
       const char *dir;
       const char *base = "charset.alias";
       char *file_name;
@@ -341,6 +342,36 @@ get_charset_aliases (void)
            "CP54936" "\0" "GB18030" "\0"
            "CP65001" "\0" "UTF-8" "\0";
 # endif
+# if defined OS2
+      /* To avoid the troubles of installing a separate file in the same
+         directory as the DLL and of retrieving the DLL's directory at
+         runtime, simply inline the aliases here.  */
+
+      /* The list of encodings is taken from "List of OS/2 Codepages"
+         by Alex Taylor:
+         <http://altsan.org/os2/toolkits/uls/index.html#codepages>.
+         See also "IBM Globalization - Code page identifiers":
+         <http://www-01.ibm.com/software/globalization/cp/cp_cpgid.html>.  */
+      cp = "CP813" "\0" "ISO-8859-7" "\0"
+           "CP878" "\0" "KOI8-R" "\0"
+           "CP819" "\0" "ISO-8859-1" "\0"
+           "CP912" "\0" "ISO-8859-2" "\0"
+           "CP913" "\0" "ISO-8859-3" "\0"
+           "CP914" "\0" "ISO-8859-4" "\0"
+           "CP915" "\0" "ISO-8859-5" "\0"
+           "CP916" "\0" "ISO-8859-8" "\0"
+           "CP920" "\0" "ISO-8859-9" "\0"
+           "CP921" "\0" "ISO-8859-13" "\0"
+           "CP923" "\0" "ISO-8859-15" "\0"
+           "CP954" "\0" "EUC-JP" "\0"
+           "CP964" "\0" "EUC-TW" "\0"
+           "CP970" "\0" "EUC-KR" "\0"
+           "CP1089" "\0" "ISO-8859-6" "\0"
+           "CP1208" "\0" "UTF-8" "\0"
+           "CP1381" "\0" "GB2312" "\0"
+           "CP1386" "\0" "GBK" "\0"
+           "CP3372" "\0" "EUC-JP" "\0";
+# endif
 #endif
 
       charset_aliases = cp;
@@ -461,14 +492,34 @@ locale_charset (void)
 
   static char buf[2 + 10 + 1];
 
-  /* The Windows API has a function returning the locale's codepage as a
-     number: GetACP().
-     When the output goes to a console window, it needs to be provided in
-     GetOEMCP() encoding if the console is using a raster font, or in
-     GetConsoleOutputCP() encoding if it is using a TrueType font.
-     But in GUI programs and for output sent to files and pipes, GetACP()
-     encoding is the best bet.  */
-  sprintf (buf, "CP%u", GetACP ());
+  /* The Windows API has a function returning the locale's codepage as
+     a number, but the value doesn't change according to what the
+     'setlocale' call specified.  So we use it as a last resort, in
+     case the string returned by 'setlocale' doesn't specify the
+     codepage.  */
+  char *current_locale = setlocale (LC_ALL, NULL);
+  char *pdot;
+
+  /* If they set different locales for different categories,
+     'setlocale' will return a semi-colon separated list of locale
+     values.  To make sure we use the correct one, we choose LC_CTYPE.  */
+  if (strchr (current_locale, ';'))
+    current_locale = setlocale (LC_CTYPE, NULL);
+
+  pdot = strrchr (current_locale, '.');
+  if (pdot)
+    sprintf (buf, "CP%s", pdot + 1);
+  else
+    {
+      /* The Windows API has a function returning the locale's codepage as a
+        number: GetACP().
+        When the output goes to a console window, it needs to be provided in
+        GetOEMCP() encoding if the console is using a raster font, or in
+        GetConsoleOutputCP() encoding if it is using a TrueType font.
+        But in GUI programs and for output sent to files and pipes, GetACP()
+        encoding is the best bet.  */
+      sprintf (buf, "CP%u", GetACP ());
+    }
   codeset = buf;
 
 #elif defined OS2
@@ -478,6 +529,8 @@ locale_charset (void)
   ULONG cp[3];
   ULONG cplen;
 
+  codeset = NULL;
+
   /* Allow user to override the codeset, as set in the operating system,
      with standard language environment variables.  */
   locale = getenv ("LC_ALL");
@@ -509,10 +562,12 @@ locale_charset (void)
             }
         }
 
-      /* Resolve through the charset.alias file.  */
-      codeset = locale;
+      /* For the POSIX locale, don't use the system's codepage.  */
+      if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)
+        codeset = "";
     }
-  else
+
+  if (codeset == NULL)
     {
       /* OS/2 has a function returning the locale's codepage as a number.  */
       if (DosQueryCp (sizeof (cp), cp, &cplen))
diff --git a/gl/localcharset.h b/gl/localcharset.h
index ce3b7fb..c4ef1e3 100644
--- a/gl/localcharset.h
+++ b/gl/localcharset.h
@@ -1,5 +1,5 @@
 /* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003, 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2009-2015 Free Software Foundation, Inc.
    This file is part of the GNU CHARSET Library.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/gl/locale.in.h b/gl/locale.in.h
index ca67816..4a1e229 100644
--- a/gl/locale.in.h
+++ b/gl/locale.in.h
@@ -1,5 +1,5 @@
 /* A POSIX <locale.h>.
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/localeconv.c b/gl/localeconv.c
index 41396a0..e8fe69d 100644
--- a/gl/localeconv.c
+++ b/gl/localeconv.c
@@ -1,5 +1,5 @@
 /* Query locale dependent information for formatting numbers.
-   Copyright (C) 2012-2013 Free Software Foundation, Inc.
+   Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/m4/00gnulib.m4 b/gl/m4/00gnulib.m4
index d4ad759..c7103ed 100644
--- a/gl/m4/00gnulib.m4
+++ b/gl/m4/00gnulib.m4
@@ -1,12 +1,28 @@
-# 00gnulib.m4 serial 2
-dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# 00gnulib.m4 serial 3
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl This file must be named something that sorts before all other
 dnl gnulib-provided .m4 files.  It is needed until such time as we can
-dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics.
+dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and
+dnl m4_divert semantics.
+
+# Until autoconf 2.63, handling of the diversion stack required m4_init
+# to be called first; but this does not happen with aclocal.  Wrapping
+# the entire execution in another layer of the diversion stack fixes this.
+# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4
+# for whether it was FIFO or LIFO; in order to properly balance with
+# m4_init, we need to undo our push just before anything wrapped within
+# the m4_init body.  The way to ensure this is to wrap both sides of
+# m4_init with a one-shot macro that does the pop at the right time.
+m4_ifndef([_m4_divert_diversion],
+[m4_divert_push([KILL])
+m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])])
+m4_define([m4_init],
+  [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])])
+
 
 # AC_DEFUN_ONCE([NAME], VALUE)
 # ----------------------------
diff --git a/gl/m4/absolute-header.m4 b/gl/m4/absolute-header.m4
new file mode 100644
index 0000000..bc19dfc
--- /dev/null
+++ b/gl/m4/absolute-header.m4
@@ -0,0 +1,102 @@
+# absolute-header.m4 serial 16
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Derek Price.
+
+# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
+# ---------------------------------------
+# Find the absolute name of a header file, testing first if the header exists.
+# If the header were sys/inttypes.h, this macro would define
+# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h
+# in config.h
+# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+AC_DEFUN([gl_ABSOLUTE_HEADER],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PREPROC_REQUIRE()dnl
+dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted
+dnl until we can assume autoconf 2.64 or newer.
+m4_foreach_w([gl_HEADER_NAME], [$1],
+  [AS_VAR_PUSHDEF([gl_absolute_header],
+                  [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl
+  AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+    m4_defn([gl_absolute_header]),
+    [AS_VAR_PUSHDEF([ac_header_exists],
+                    [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl
+    AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl
+    if test AS_VAR_GET(ac_header_exists) = yes; then
+      gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME]))
+    fi
+    AS_VAR_POPDEF([ac_header_exists])dnl
+    ])dnl
+  AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])),
+                     ["AS_VAR_GET(gl_absolute_header)"],
+                     [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.])
+  AS_VAR_POPDEF([gl_absolute_header])dnl
+])dnl
+])# gl_ABSOLUTE_HEADER
+
+# gl_ABSOLUTE_HEADER_ONE(HEADER)
+# ------------------------------
+# Like gl_ABSOLUTE_HEADER, except that:
+#   - it assumes that the header exists,
+#   - it uses the current CPPFLAGS,
+#   - it does not cache the result,
+#   - it is silent.
+AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])])
+  dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+  dnl that contain only a #include of other header files and no
+  dnl non-comment tokens of their own. This leads to a failure to
+  dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+  dnl and others. The workaround is to force preservation of comments
+  dnl through option -C. This ensures all necessary #line directives
+  dnl are present. GCC supports option -C as well.
+  case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+changequote(,)
+  case "$host_os" in
+    mingw*)
+      dnl For the sake of native Windows compilers (excluding gcc),
+      dnl treat backslash as a directory separator, like /.
+      dnl Actually, these compilers use a double-backslash as
+      dnl directory separator, inside the
+      dnl   # line "filename"
+      dnl directives.
+      gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+  dnl A sed expression that turns a string into a basic regular
+  dnl expression, for use within "/.../".
+  gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo '$1' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+changequote([,])
+  dnl eval is necessary to expand gl_absname_cpp.
+  dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+  dnl so use subshell.
+  AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]),
+[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+  sed -n "$gl_absolute_header_sed"`])
+])
diff --git a/gl/m4/alloca.m4 b/gl/m4/alloca.m4
index 270abd0..8408bed 100644
--- a/gl/m4/alloca.m4
+++ b/gl/m4/alloca.m4
@@ -1,5 +1,5 @@
 # alloca.m4 serial 14
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2013 Free Software Foundation,
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gl/m4/btowc.m4 b/gl/m4/btowc.m4
index 978a06e..c1da65d 100644
--- a/gl/m4/btowc.m4
+++ b/gl/m4/btowc.m4
@@ -1,5 +1,5 @@
 # btowc.m4 serial 10
-dnl Copyright (C) 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/byteswap.m4 b/gl/m4/byteswap.m4
index 7566903..ec5d46c 100644
--- a/gl/m4/byteswap.m4
+++ b/gl/m4/byteswap.m4
@@ -1,5 +1,5 @@
 # byteswap.m4 serial 4
-dnl Copyright (C) 2005, 2007, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/codeset.m4 b/gl/m4/codeset.m4
index c2761be..d7de8d6 100644
--- a/gl/m4/codeset.m4
+++ b/gl/m4/codeset.m4
@@ -1,5 +1,5 @@
 # codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2006, 2008-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/configmake.m4 b/gl/m4/configmake.m4
index 330f98d..49d3a13 100644
--- a/gl/m4/configmake.m4
+++ b/gl/m4/configmake.m4
@@ -1,5 +1,5 @@
 # configmake.m4 serial 2
-dnl Copyright (C) 2010-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/eealloc.m4 b/gl/m4/eealloc.m4
index c640ec1..322bdd5 100644
--- a/gl/m4/eealloc.m4
+++ b/gl/m4/eealloc.m4
@@ -1,5 +1,5 @@
 # eealloc.m4 serial 3
-dnl Copyright (C) 2003, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/extensions.m4 b/gl/m4/extensions.m4
index e30f122..35bc49c 100644
--- a/gl/m4/extensions.m4
+++ b/gl/m4/extensions.m4
@@ -1,7 +1,7 @@
 # serial 13  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
-# Copyright (C) 2003, 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,6 +68,10 @@ dnl configure.ac when using autoheader 2.62.
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
+/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
 /* Enable threading extensions on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
@@ -100,6 +104,7 @@ dnl configure.ac when using autoheader 2.62.
   AC_DEFINE([_ALL_SOURCE])
   AC_DEFINE([_DARWIN_C_SOURCE])
   AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([__USE_MINGW_ANSI_STDIO])
   AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
   AC_DEFINE([_TANDEM_SOURCE])
   AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
diff --git a/gl/m4/extern-inline.m4 b/gl/m4/extern-inline.m4
index 4862d60..7280065 100644
--- a/gl/m4/extern-inline.m4
+++ b/gl/m4/extern-inline.m4
@@ -1,6 +1,6 @@
 dnl 'extern inline' a la ISO C99.
 
-dnl Copyright 2012-2013 Free Software Foundation, Inc.
+dnl Copyright 2012-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -19,29 +19,49 @@ AC_DEFUN([gl_EXTERN_INLINE],
    'reference to static identifier "f" in extern inline function'.
    This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
 
-   Suppress the use of extern inline on problematic Apple configurations, as
-   Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if (defined __APPLE__ \
-     && ((! defined _DONT_USE_CTYPE_INLINE_ \
-          && (defined __GNUC__ || defined __cplusplus)) \
-         || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
-             && defined __GNUC__ && ! defined __cplusplus)))
-# define _GL_EXTERN_INLINE_APPLE_BUG
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions.  This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <http://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.  */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
 #endif
 #if ((__GNUC__ \
       ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
       : (199901L <= __STDC_VERSION__ \
          && !defined __HP_cc \
          && !(defined __SUNPRO_C && __STDC__))) \
-     && !defined _GL_EXTERN_INLINE_APPLE_BUG)
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
 # define _GL_INLINE inline
 # define _GL_EXTERN_INLINE extern inline
 # define _GL_EXTERN_INLINE_IN_USE
 #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
-       && !defined _GL_EXTERN_INLINE_APPLE_BUG)
-# if __GNUC_GNU_INLINE__
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
    /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
 #  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
 # else
@@ -54,17 +74,19 @@ AC_DEFUN([gl_EXTERN_INLINE],
 # define _GL_EXTERN_INLINE static _GL_UNUSED
 #endif
 
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
 # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
 #  define _GL_INLINE_HEADER_CONST_PRAGMA
 # else
 #  define _GL_INLINE_HEADER_CONST_PRAGMA \
      _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
 # endif
-  /* Suppress GCC's bogus "no previous prototype for 'FOO'"
-     and "no previous declaration for 'FOO'"  diagnostics,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.  */
 # define _GL_INLINE_HEADER_BEGIN \
     _Pragma ("GCC diagnostic push") \
     _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
diff --git a/gl/m4/fcntl-o.m4 b/gl/m4/fcntl-o.m4
index 87cc4bd..891a62f 100644
--- a/gl/m4/fcntl-o.m4
+++ b/gl/m4/fcntl-o.m4
@@ -1,5 +1,5 @@
 # fcntl-o.m4 serial 4
-dnl Copyright (C) 2006, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/glibc21.m4 b/gl/m4/glibc21.m4
index 613fb2a..3a971c5 100644
--- a/gl/m4/glibc21.m4
+++ b/gl/m4/glibc21.m4
@@ -1,5 +1,5 @@
 # glibc21.m4 serial 5
-dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2013 Free Software Foundation,
+dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4
index a95de77..c53018d 100644
--- a/gl/m4/gnulib-cache.m4
+++ b/gl/m4/gnulib-cache.m4
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/gl/m4/gnulib-common.m4 b/gl/m4/gnulib-common.m4
index 0ae5a9e..40e82f6 100644
--- a/gl/m4/gnulib-common.m4
+++ b/gl/m4/gnulib-common.m4
@@ -1,5 +1,5 @@
-# gnulib-common.m4 serial 33
-dnl Copyright (C) 2007-2013 Free Software Foundation, Inc.
+# gnulib-common.m4 serial 36
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -49,6 +49,16 @@ AC_DEFUN([gl_COMMON_BODY], [
    is a misnomer outside of parameter lists.  */
 #define _UNUSED_PARAMETER_ _GL_UNUSED
 
+/* gcc supports the "unused" attribute on possibly unused labels, and
+   g++ has since version 4.5.  Note to support C++ as well as C,
+   _GL_UNUSED_LABEL should be used with a trailing ;  */
+#if !defined __cplusplus || __GNUC__ > 4 \
+    || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define _GL_UNUSED_LABEL _GL_UNUSED
+#else
+# define _GL_UNUSED_LABEL
+#endif
+
 /* The __pure__ attribute was added in gcc 2.96.  */
 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
@@ -268,12 +278,12 @@ Amsterdam
       dnl but prefer ${host}-ar over ar (useful for cross-compiling).
       AC_CHECK_TOOL([AR], [ar], [ar])
       if test -z "$ARFLAGS"; then
-        ARFLAGS='cru'
+        ARFLAGS='cr'
       fi
     fi
   else
     if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
+      ARFLAGS='cr'
     fi
   fi
   AC_SUBST([AR])
@@ -309,26 +319,28 @@ m4_ifdef([AC_PROG_MKDIR_P], [
 ])
 
 # AC_C_RESTRICT
-# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
-# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
-# works.
-# This definition can be removed once autoconf >= 2.62 can be assumed.
-# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
-m4_ifndef([AC_AUTOCONF_VERSION],[
+# This definition is copied from post-2.69 Autoconf and overrides the
+# AC_C_RESTRICT macro from autoconf 2.60..2.69.  It can be removed
+# once autoconf >= 2.70 can be assumed.  It's painful to check version
+# numbers, and in practice this macro is more up-to-date than Autoconf
+# is, so override Autoconf unconditionally.
 AC_DEFUN([AC_C_RESTRICT],
 [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
   [ac_cv_c_restrict=no
    # The order here caters to the fact that C++ does not require restrict.
    for ac_kw in __restrict __restrict__ _Restrict restrict; do
-     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
-      [[typedef int * int_ptr;
-        int foo (int_ptr $ac_kw ip) {
-        return ip[0];
-       }]],
-      [[int s[1];
-        int * $ac_kw t = s;
-        t[0] = 0;
-        return foo(t)]])],
+     AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+	 [[typedef int *int_ptr;
+	   int foo (int_ptr $ac_kw ip) { return ip[0]; }
+	   int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+	   int bar (int ip[$ac_kw]) { return ip[0]; }
+	 ]],
+	 [[int s[1];
+	   int *$ac_kw t = s;
+	   t[0] = 0;
+	   return foo (t) + bar (t);
+	 ]])],
       [ac_cv_c_restrict=$ac_kw])
      test "$ac_cv_c_restrict" != no && break
    done
@@ -338,21 +350,21 @@ AC_DEFUN([AC_C_RESTRICT],
    nothing if this is not supported.  Do not define if restrict is
    supported directly.  */
 #undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict, even
-   though the corresponding Sun C compiler does, which causes
-   "#define restrict _Restrict" in the previous line.  Perhaps some future
-   version of Sun C++ will work with _Restrict; if so, it'll probably
-   define __RESTRICT, just as Sun C does.  */
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
 #if defined __SUNPRO_CC && !defined __RESTRICT
 # define _Restrict
+# define __restrict__
 #endif])
  case $ac_cv_c_restrict in
    restrict) ;;
    no) AC_DEFINE([restrict], []) ;;
    *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
  esac
-])
-])
+])# AC_C_RESTRICT
 
 # gl_BIGENDIAN
 # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
@@ -375,3 +387,63 @@ AC_DEFUN([gl_CACHE_VAL_SILENT],
   AC_CACHE_VAL([$1], [$2])
   as_echo_n="$saved_as_echo_n"
 ])
+
+# AS_VAR_COPY was added in autoconf 2.63b
+m4_define_default([AS_VAR_COPY],
+[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])
+
+# AC_PROG_SED was added in autoconf 2.59b
+m4_ifndef([AC_PROG_SED],
+[AC_DEFUN([AC_PROG_SED],
+[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
+    [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
+     dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
+     ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     AS_UNSET([ac_script])
+     if test -z "$SED"; then
+       ac_path_SED_found=false
+       _AS_PATH_WALK([], [
+         for ac_prog in sed gsed; do
+           for ac_exec_ext in '' $ac_executable_extensions; do
+             ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+             AS_EXECUTABLE_P(["$ac_path_SED"]) || continue
+             case `"$ac_path_SED" --version 2>&1` in
+               *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;;
+               *)
+                 ac_count=0
+                 _AS_ECHO_N([0123456789]) >conftest.in
+                 while :
+                 do
+                   cat conftest.in conftest.in >conftest.tmp
+                   mv conftest.tmp conftest.in
+                   cp conftest.in conftest.nl
+                   echo >> conftest.nl
+                   "$ac_path_SED" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+                   diff conftest.out conftest.nl >/dev/null 2>&1 || break
+                   ac_count=`expr $ac_count + 1`
+                   if test $ac_count -gt ${ac_path_SED_max-0}; then
+                     # Best so far, but keep looking for better
+                     ac_cv_path_SED=$ac_path_SED
+                     ac_path_SED_max=$ac_count
+                   fi
+                   test $ac_count -gt 10 && break
+                 done
+                 rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+             esac
+             $ac_path_SED_found && break 3
+           done
+         done])
+       if test -z "$ac_cv_path_SED"; then
+         AC_ERROR([no acceptable sed could be found in \$PATH])
+       fi
+     else
+       ac_cv_path_SED=$SED
+     fi
+ SED="$ac_cv_path_SED"
+ AC_SUBST([SED])dnl
+ rm -f conftest.sed
+])])])
diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4
index eba4a2d..33311a8 100644
--- a/gl/m4/gnulib-comp.m4
+++ b/gl/m4/gnulib-comp.m4
@@ -1,5 +1,5 @@
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -39,6 +39,7 @@ AC_DEFUN([gl_EARLY],
   m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
   AC_REQUIRE([gl_PROG_AR_RANLIB])
   AC_REQUIRE([AM_PROG_CC_C_O])
+  # Code from module absolute-header:
   # Code from module alloca-opt:
   # Code from module btowc:
   # Code from module byteswap:
@@ -54,8 +55,6 @@ AC_DEFUN([gl_EARLY],
   # Code from module locale:
   # Code from module localeconv:
   # Code from module lock:
-  # Code from module malloc-gnu:
-  # Code from module malloc-posix:
   # Code from module mbrtowc:
   # Code from module mbsinit:
   # Code from module mbtowc:
@@ -121,16 +120,6 @@ AC_DEFUN([gl_INIT],
   gl_LOCALE_MODULE_INDICATOR([localeconv])
   gl_LOCK
   gl_MODULE_INDICATOR([lock])
-  gl_FUNC_MALLOC_GNU
-  if test $REPLACE_MALLOC = 1; then
-    AC_LIBOBJ([malloc])
-  fi
-  gl_MODULE_INDICATOR([malloc-gnu])
-  gl_FUNC_MALLOC_POSIX
-  if test $REPLACE_MALLOC = 1; then
-    AC_LIBOBJ([malloc])
-  fi
-  gl_STDLIB_MODULE_INDICATOR([malloc-posix])
   gl_FUNC_MBRTOWC
   if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
     AC_LIBOBJ([mbrtowc])
@@ -331,7 +320,6 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/localcharset.h
   lib/locale.in.h
   lib/localeconv.c
-  lib/malloc.c
   lib/mbrtowc.c
   lib/mbsinit.c
   lib/mbtowc-impl.h
@@ -359,6 +347,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/wctype-h.c
   lib/wctype.in.h
   m4/00gnulib.m4
+  m4/absolute-header.m4
   m4/alloca.m4
   m4/btowc.m4
   m4/byteswap.m4
@@ -383,7 +372,6 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/localeconv.m4
   m4/lock.m4
   m4/longlong.m4
-  m4/malloc.m4
   m4/mbrtowc.m4
   m4/mbsinit.m4
   m4/mbstate_t.m4
diff --git a/gl/m4/gnulib-tool.m4 b/gl/m4/gnulib-tool.m4
index f3dea1a..fede1fc 100644
--- a/gl/m4/gnulib-tool.m4
+++ b/gl/m4/gnulib-tool.m4
@@ -1,5 +1,5 @@
 # gnulib-tool.m4 serial 2
-dnl Copyright (C) 2004-2005, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2005, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/include_next.m4 b/gl/m4/include_next.m4
index 108d945..233d254 100644
--- a/gl/m4/include_next.m4
+++ b/gl/m4/include_next.m4
@@ -1,5 +1,5 @@
 # include_next.m4 serial 23
-dnl Copyright (C) 2006-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -192,56 +192,9 @@ dnl until we can assume autoconf 2.64 or newer.
              if test AS_VAR_GET(gl_header_exists) = yes; then
              AS_VAR_POPDEF([gl_header_exists])
             ])
-               AC_LANG_CONFTEST(
-                 [AC_LANG_SOURCE(
-                    [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
-                  )])
-               dnl AIX "xlc -E" and "cc -E" omit #line directives for header
-               dnl files that contain only a #include of other header files and
-               dnl no non-comment tokens of their own. This leads to a failure
-               dnl to detect the absolute name of <dirent.h>, <signal.h>,
-               dnl <poll.h> and others. The workaround is to force preservation
-               dnl of comments through option -C. This ensures all necessary
-               dnl #line directives are present. GCC supports option -C as well.
-               case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-changequote(,)
-               case "$host_os" in
-                 mingw*)
-                   dnl For the sake of native Windows compilers (excluding gcc),
-                   dnl treat backslash as a directory separator, like /.
-                   dnl Actually, these compilers use a double-backslash as
-                   dnl directory separator, inside the
-                   dnl   # line "filename"
-                   dnl directives.
-                   gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-               dnl A sed expression that turns a string into a basic regular
-               dnl expression, for use within "/.../".
-               gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-changequote([,])
-               gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-changequote(,)dnl
-                   s|^/[^/]|//&|
-changequote([,])dnl
-                   p
-                   q
-                 }'
-               dnl eval is necessary to expand gl_absname_cpp.
-               dnl Ultrix and Pyramid sh refuse to redirect output of eval,
-               dnl so use subshell.
-               AS_VAR_SET(gl_next_header,
-                 ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
-                      sed -n "$gl_absolute_header_sed"`'"'])
+           gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
+           AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
+           AS_VAR_SET(gl_next_header, ['"'$gl_header'"'])
           m4_if([$2], [check],
             [else
                AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
diff --git a/gl/m4/langinfo_h.m4 b/gl/m4/langinfo_h.m4
index 73bef8b..c3ecba6 100644
--- a/gl/m4/langinfo_h.m4
+++ b/gl/m4/langinfo_h.m4
@@ -1,5 +1,5 @@
 # langinfo_h.m4 serial 7
-dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/lib-ld.m4 b/gl/m4/lib-ld.m4
index c145e47..91ca911 100644
--- a/gl/m4/lib-ld.m4
+++ b/gl/m4/lib-ld.m4
@@ -1,5 +1,5 @@
 # lib-ld.m4 serial 6
-dnl Copyright (C) 1996-2003, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 1996-2003, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/lib-link.m4 b/gl/m4/lib-link.m4
index 073f040..d8d5d1f 100644
--- a/gl/m4/lib-link.m4
+++ b/gl/m4/lib-link.m4
@@ -1,5 +1,5 @@
 # lib-link.m4 serial 26 (gettext-0.18.2)
-dnl Copyright (C) 2001-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/lib-prefix.m4 b/gl/m4/lib-prefix.m4
index 60908e8..0465f47 100644
--- a/gl/m4/lib-prefix.m4
+++ b/gl/m4/lib-prefix.m4
@@ -1,5 +1,5 @@
 # lib-prefix.m4 serial 7 (gettext-0.18)
-dnl Copyright (C) 2001-2005, 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2005, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/localcharset.m4 b/gl/m4/localcharset.m4
index 2e93e58..f03916c 100644
--- a/gl/m4/localcharset.m4
+++ b/gl/m4/localcharset.m4
@@ -1,5 +1,5 @@
 # localcharset.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/locale-fr.m4 b/gl/m4/locale-fr.m4
index ef199e3..92ff552 100644
--- a/gl/m4/locale-fr.m4
+++ b/gl/m4/locale-fr.m4
@@ -1,5 +1,5 @@
 # locale-fr.m4 serial 17
-dnl Copyright (C) 2003, 2005-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/locale-ja.m4 b/gl/m4/locale-ja.m4
index 132a3e7..a3abef8 100644
--- a/gl/m4/locale-ja.m4
+++ b/gl/m4/locale-ja.m4
@@ -1,5 +1,5 @@
 # locale-ja.m4 serial 12
-dnl Copyright (C) 2003, 2005-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/locale-zh.m4 b/gl/m4/locale-zh.m4
index 4eed73f..c5c4ef6 100644
--- a/gl/m4/locale-zh.m4
+++ b/gl/m4/locale-zh.m4
@@ -1,5 +1,5 @@
 # locale-zh.m4 serial 12
-dnl Copyright (C) 2003, 2005-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/locale_h.m4 b/gl/m4/locale_h.m4
index 8bd12e8..0d7bb34 100644
--- a/gl/m4/locale_h.m4
+++ b/gl/m4/locale_h.m4
@@ -1,5 +1,5 @@
 # locale_h.m4 serial 19
-dnl Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/localeconv.m4 b/gl/m4/localeconv.m4
index b8bb596..464e630 100644
--- a/gl/m4/localeconv.m4
+++ b/gl/m4/localeconv.m4
@@ -1,5 +1,5 @@
 # localeconv.m4 serial 1
-dnl Copyright (C) 2012-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/lock.m4 b/gl/m4/lock.m4
index aae1701..9fd4aa7 100644
--- a/gl/m4/lock.m4
+++ b/gl/m4/lock.m4
@@ -1,5 +1,5 @@
 # lock.m4 serial 13 (gettext-0.18.2)
-dnl Copyright (C) 2005-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/longlong.m4 b/gl/m4/longlong.m4
index 3af6ab5..d57bc70 100644
--- a/gl/m4/longlong.m4
+++ b/gl/m4/longlong.m4
@@ -1,5 +1,5 @@
 # longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 1999-2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/malloc.m4 b/gl/m4/malloc.m4
deleted file mode 100644
index 4b24a0b..0000000
--- a/gl/m4/malloc.m4
+++ /dev/null
@@ -1,98 +0,0 @@
-# malloc.m4 serial 14
-dnl Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-m4_version_prereq([2.70], [] ,[
-
-# This is taken from the following Autoconf patch:
-# http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9
-AC_DEFUN([_AC_FUNC_MALLOC_IF],
-[
-  AC_REQUIRE([AC_HEADER_STDC])dnl
-  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
-  AC_CHECK_HEADERS([stdlib.h])
-  AC_CACHE_CHECK([for GNU libc compatible malloc],
-    [ac_cv_func_malloc_0_nonnull],
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-            # include <stdlib.h>
-            #else
-            char *malloc ();
-            #endif
-          ]],
-          [[return ! malloc (0);]])
-       ],
-       [ac_cv_func_malloc_0_nonnull=yes],
-       [ac_cv_func_malloc_0_nonnull=no],
-       [case "$host_os" in
-          # Guess yes on platforms where we know the result.
-          *-gnu* | freebsd* | netbsd* | openbsd* \
-          | hpux* | solaris* | cygwin* | mingw*)
-            ac_cv_func_malloc_0_nonnull=yes ;;
-          # If we don't know, assume the worst.
-          *) ac_cv_func_malloc_0_nonnull=no ;;
-        esac
-       ])
-    ])
-  AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2])
-])# _AC_FUNC_MALLOC_IF
-
-])
-
-# gl_FUNC_MALLOC_GNU
-# ------------------
-# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
-# it is not.
-AC_DEFUN([gl_FUNC_MALLOC_GNU],
-[
-  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
-  dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
-  _AC_FUNC_MALLOC_IF(
-    [AC_DEFINE([HAVE_MALLOC_GNU], [1],
-               [Define to 1 if your system has a GNU libc compatible 'malloc'
-                function, and to 0 otherwise.])],
-    [AC_DEFINE([HAVE_MALLOC_GNU], [0])
-     REPLACE_MALLOC=1
-    ])
-])
-
-# gl_FUNC_MALLOC_POSIX
-# --------------------
-# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
-# fails), and replace malloc if it is not.
-AC_DEFUN([gl_FUNC_MALLOC_POSIX],
-[
-  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
-  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
-  if test $gl_cv_func_malloc_posix = yes; then
-    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
-      [Define if the 'malloc' function is POSIX compliant.])
-  else
-    REPLACE_MALLOC=1
-  fi
-])
-
-# Test whether malloc, realloc, calloc are POSIX compliant,
-# Set gl_cv_func_malloc_posix to yes or no accordingly.
-AC_DEFUN([gl_CHECK_MALLOC_POSIX],
-[
-  AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
-    [gl_cv_func_malloc_posix],
-    [
-      dnl It is too dangerous to try to allocate a large amount of memory:
-      dnl some systems go to their knees when you do that. So assume that
-      dnl all Unix implementations of the function are POSIX compliant.
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM(
-           [[]],
-           [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-             choke me
-             #endif
-            ]])],
-        [gl_cv_func_malloc_posix=yes],
-        [gl_cv_func_malloc_posix=no])
-    ])
-])
diff --git a/gl/m4/mbrtowc.m4 b/gl/m4/mbrtowc.m4
index 4c9f388..c0d751d 100644
--- a/gl/m4/mbrtowc.m4
+++ b/gl/m4/mbrtowc.m4
@@ -1,5 +1,5 @@
-# mbrtowc.m4 serial 25
-dnl Copyright (C) 2001-2002, 2004-2005, 2008-2013 Free Software Foundation,
+# mbrtowc.m4 serial 26
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2015 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -39,6 +39,7 @@ AC_DEFUN([gl_FUNC_MBRTOWC],
       gl_MBRTOWC_NULL_ARG2
       gl_MBRTOWC_RETVAL
       gl_MBRTOWC_NUL_RETVAL
+      gl_MBRTOWC_EMPTY_INPUT
       case "$gl_cv_func_mbrtowc_null_arg1" in
         *yes) ;;
         *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1],
@@ -67,6 +68,14 @@ AC_DEFUN([gl_FUNC_MBRTOWC],
            REPLACE_MBRTOWC=1
            ;;
       esac
+      case "$gl_cv_func_mbrtowc_empty_input" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1],
+             [Define if the mbrtowc function does not return (size_t) -2
+              for empty input.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
     fi
   fi
 ])
@@ -533,6 +542,41 @@ int main ()
     ])
 ])
 
+dnl Test whether mbrtowc returns the correct value on empty input.
+
+AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc works on empty input],
+    [gl_cv_func_mbrtowc_empty_input],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                     # Guess no on AIX and glibc systems.
+        aix* | *-gnu*)
+                    gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+        *)          gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+      esac
+changequote([,])dnl
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+           #include <wchar.h>
+           static wchar_t wc;
+           static mbstate_t mbs;
+           int
+           main (void)
+           {
+             return mbrtowc (&wc, "", 0, &mbs) == (size_t) -2;
+           }]])],
+        [gl_cv_func_mbrtowc_empty_input=no],
+        [gl_cv_func_mbrtowc_empty_input=yes],
+        [:])
+    ])
+])
+
 # Prerequisites of lib/mbrtowc.c.
 AC_DEFUN([gl_PREREQ_MBRTOWC], [
   :
diff --git a/gl/m4/mbsinit.m4 b/gl/m4/mbsinit.m4
index 2e6d092..61c4032 100644
--- a/gl/m4/mbsinit.m4
+++ b/gl/m4/mbsinit.m4
@@ -1,5 +1,5 @@
 # mbsinit.m4 serial 8
-dnl Copyright (C) 2008, 2010-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2008, 2010-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/mbstate_t.m4 b/gl/m4/mbstate_t.m4
index ed00117..42ad6cd 100644
--- a/gl/m4/mbstate_t.m4
+++ b/gl/m4/mbstate_t.m4
@@ -1,5 +1,5 @@
 # mbstate_t.m4 serial 13
-dnl Copyright (C) 2000-2002, 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/mbtowc.m4 b/gl/m4/mbtowc.m4
index e479461..88cdeee 100644
--- a/gl/m4/mbtowc.m4
+++ b/gl/m4/mbtowc.m4
@@ -1,5 +1,5 @@
 # mbtowc.m4 serial 2
-dnl Copyright (C) 2011-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/multiarch.m4 b/gl/m4/multiarch.m4
index 552ec7e..fc575c1 100644
--- a/gl/m4/multiarch.m4
+++ b/gl/m4/multiarch.m4
@@ -1,5 +1,5 @@
 # multiarch.m4 serial 7
-dnl Copyright (C) 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/nl_langinfo.m4 b/gl/m4/nl_langinfo.m4
index 25e2101..c8bf20f 100644
--- a/gl/m4/nl_langinfo.m4
+++ b/gl/m4/nl_langinfo.m4
@@ -1,5 +1,5 @@
 # nl_langinfo.m4 serial 5
-dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/off_t.m4 b/gl/m4/off_t.m4
index d355d01..0eb1467 100644
--- a/gl/m4/off_t.m4
+++ b/gl/m4/off_t.m4
@@ -1,5 +1,5 @@
 # off_t.m4 serial 1
-dnl Copyright (C) 2012-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/regex.m4 b/gl/m4/regex.m4
index 0945c11..0fa7455 100644
--- a/gl/m4/regex.m4
+++ b/gl/m4/regex.m4
@@ -1,6 +1,6 @@
-# serial 64
+# serial 65
 
-# Copyright (C) 1996-2001, 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -28,6 +28,7 @@ AC_DEFUN([gl_REGEX],
     # If cross compiling, assume the test would fail and use the included
     # regex.c.
     AC_CHECK_DECLS_ONCE([alarm])
+    AC_CHECK_HEADERS_ONCE([malloc.h])
     AC_CACHE_CHECK([for working re_compile_pattern],
                    [gl_cv_func_re_compile_pattern_working],
       [AC_RUN_IFELSE(
@@ -37,9 +38,19 @@ AC_DEFUN([gl_REGEX],
             #include <locale.h>
             #include <limits.h>
             #include <string.h>
-            #if HAVE_DECL_ALARM
-            # include <unistd.h>
+
+            #if defined M_CHECK_ACTION || HAVE_DECL_ALARM
             # include <signal.h>
+            # include <unistd.h>
+            #endif
+
+            #if HAVE_MALLOC_H
+            # include <malloc.h>
+            #endif
+
+            #ifdef M_CHECK_ACTION
+            /* Exit with distinguishable exit code.  */
+            static void sigabrt_no_core (int sig) { raise (SIGTERM); }
             #endif
           ]],
           [[int result = 0;
@@ -49,11 +60,18 @@ AC_DEFUN([gl_REGEX],
             const char *s;
             struct re_registers regs;
 
+            /* Some builds of glibc go into an infinite loop on this
+               test.  Use alarm to force death, and mallopt to avoid
+               malloc recursion in diagnosing the corrupted heap. */
 #if HAVE_DECL_ALARM
-            /* Some builds of glibc go into an infinite loop on this test.  */
             signal (SIGALRM, SIG_DFL);
             alarm (2);
 #endif
+#ifdef M_CHECK_ACTION
+            signal (SIGABRT, sigabrt_no_core);
+            mallopt (M_CHECK_ACTION, 2);
+#endif
+
             if (setlocale (LC_ALL, "en_US.UTF-8"))
               {
                 {
@@ -268,6 +286,6 @@ AC_DEFUN([gl_PREREQ_REGEX],
   AC_REQUIRE([gl_EEMALLOC])
   AC_REQUIRE([gl_GLIBC21])
   AC_CHECK_HEADERS([libintl.h])
-  AC_CHECK_FUNCS_ONCE([isblank iswctype wcscoll])
+  AC_CHECK_FUNCS_ONCE([isblank iswctype])
   AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]])
 ])
diff --git a/gl/m4/ssize_t.m4 b/gl/m4/ssize_t.m4
index 6338134..25bd451 100644
--- a/gl/m4/ssize_t.m4
+++ b/gl/m4/ssize_t.m4
@@ -1,5 +1,5 @@
 # ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/stdbool.m4 b/gl/m4/stdbool.m4
index 80d5559..7273b82 100644
--- a/gl/m4/stdbool.m4
+++ b/gl/m4/stdbool.m4
@@ -1,6 +1,6 @@
 # Check for stdbool.h that conforms to C99.
 
-dnl Copyright (C) 2002-2006, 2009-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/stddef_h.m4 b/gl/m4/stddef_h.m4
index 5da8ab1..2310502 100644
--- a/gl/m4/stddef_h.m4
+++ b/gl/m4/stddef_h.m4
@@ -1,6 +1,6 @@
-dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
-# stddef_h.m4 serial 4
-dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
+dnl A placeholder for <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 5
+dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -10,6 +10,9 @@ AC_DEFUN([gl_STDDEF_H],
   AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
   AC_REQUIRE([gt_TYPE_WCHAR_T])
   STDDEF_H=
+  AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h],
+    [[#include <stddef.h>
+    ]])
   if test $gt_cv_c_wchar_t = no; then
     HAVE_WCHAR_T=0
     STDDEF_H=stddef.h
@@ -43,5 +46,6 @@ AC_DEFUN([gl_STDDEF_H_DEFAULTS],
 [
   dnl Assume proper GNU behavior unless another module says otherwise.
   REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_MAX_ALIGN_T=1;            AC_SUBST([HAVE_MAX_ALIGN_T])
   HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
 ])
diff --git a/gl/m4/stdint.m4 b/gl/m4/stdint.m4
index 27cdcdb..4011a49 100644
--- a/gl/m4/stdint.m4
+++ b/gl/m4/stdint.m4
@@ -1,5 +1,5 @@
 # stdint.m4 serial 43
-dnl Copyright (C) 2001-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/stdlib_h.m4 b/gl/m4/stdlib_h.m4
index 2027ab3..0b4c623 100644
--- a/gl/m4/stdlib_h.m4
+++ b/gl/m4/stdlib_h.m4
@@ -1,5 +1,5 @@
 # stdlib_h.m4 serial 42
-dnl Copyright (C) 2007-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -55,6 +55,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   GNULIB_PTSNAME=0;       AC_SUBST([GNULIB_PTSNAME])
   GNULIB_PTSNAME_R=0;     AC_SUBST([GNULIB_PTSNAME_R])
   GNULIB_PUTENV=0;        AC_SUBST([GNULIB_PUTENV])
+  GNULIB_QSORT_R=0;       AC_SUBST([GNULIB_QSORT_R])
   GNULIB_RANDOM=0;        AC_SUBST([GNULIB_RANDOM])
   GNULIB_RANDOM_R=0;      AC_SUBST([GNULIB_RANDOM_R])
   GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
@@ -107,6 +108,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   REPLACE_PTSNAME=0;         AC_SUBST([REPLACE_PTSNAME])
   REPLACE_PTSNAME_R=0;       AC_SUBST([REPLACE_PTSNAME_R])
   REPLACE_PUTENV=0;          AC_SUBST([REPLACE_PUTENV])
+  REPLACE_QSORT_R=0;         AC_SUBST([REPLACE_QSORT_R])
   REPLACE_RANDOM_R=0;        AC_SUBST([REPLACE_RANDOM_R])
   REPLACE_REALLOC=0;         AC_SUBST([REPLACE_REALLOC])
   REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
diff --git a/gl/m4/sys_types_h.m4 b/gl/m4/sys_types_h.m4
index d15c1b3..2232aec 100644
--- a/gl/m4/sys_types_h.m4
+++ b/gl/m4/sys_types_h.m4
@@ -1,5 +1,5 @@
 # sys_types_h.m4 serial 5
-dnl Copyright (C) 2011-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/threadlib.m4 b/gl/m4/threadlib.m4
index 26bdeb5..8615ac9 100644
--- a/gl/m4/threadlib.m4
+++ b/gl/m4/threadlib.m4
@@ -1,5 +1,5 @@
-# threadlib.m4 serial 10 (gettext-0.18.2)
-dnl Copyright (C) 2005-2013 Free Software Foundation, Inc.
+# threadlib.m4 serial 11 (gettext-0.18.2)
+dnl Copyright (C) 2005-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -22,7 +22,7 @@ dnl libtool).
 dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
 dnl programs that really need multithread functionality. The difference
 dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
-dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
+dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not.
 dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
 dnl multithread-safe programs.
 
@@ -162,15 +162,31 @@ int main ()
         # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
         # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
         # the second one only in libpthread, and lock.c needs it.
-        AC_LINK_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[#include <pthread.h>]],
-             [[pthread_mutex_lock((pthread_mutex_t*)0);
-               pthread_mutexattr_init((pthread_mutexattr_t*)0);]])],
-          [gl_have_pthread=yes])
+        #
+        # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+        # needs -pthread for some reason.  See:
+        # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html
+        save_LIBS=$LIBS
+        for gl_pthread in '' '-pthread'; do
+          LIBS="$LIBS $gl_pthread"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <pthread.h>
+                 pthread_mutex_t m;
+                 pthread_mutexattr_t ma;
+               ]],
+               [[pthread_mutex_lock (&m);
+                 pthread_mutexattr_init (&ma);]])],
+            [gl_have_pthread=yes
+             LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread
+             LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread])
+          LIBS=$save_LIBS
+          test -n "$gl_have_pthread" && break
+        done
+
         # Test for libpthread by looking for pthread_kill. (Not pthread_self,
         # since it is defined as a macro on OSF/1.)
-        if test -n "$gl_have_pthread"; then
+        if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then
           # The program links fine without libpthread. But it may actually
           # need to link with libpthread in order to create multiple threads.
           AC_CHECK_LIB([pthread], [pthread_kill],
@@ -185,7 +201,7 @@ int main ()
                    [Define if the pthread_in_use() detection is hard.])
              esac
             ])
-        else
+        elif test -z "$gl_have_pthread"; then
           # Some library is needed. Try libpthread and libc_r.
           AC_CHECK_LIB([pthread], [pthread_kill],
             [gl_have_pthread=yes
@@ -326,6 +342,8 @@ dnl Linux 2.4/glibc    posix      -lpthread       Y      OK
 dnl
 dnl GNU Hurd/glibc     posix
 dnl
+dnl Ubuntu 14.04       posix      -pthread        Y      OK
+dnl
 dnl FreeBSD 5.3        posix      -lc_r           Y
 dnl                    posix      -lkse ?         Y
 dnl                    posix      -lpthread ?     Y
diff --git a/gl/m4/unistd_h.m4 b/gl/m4/unistd_h.m4
index 4231578..b3c581f 100644
--- a/gl/m4/unistd_h.m4
+++ b/gl/m4/unistd_h.m4
@@ -1,5 +1,5 @@
-# unistd_h.m4 serial 67
-dnl Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# unistd_h.m4 serial 68
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -173,9 +173,11 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   REPLACE_PWRITE=0;       AC_SUBST([REPLACE_PWRITE])
   REPLACE_READ=0;         AC_SUBST([REPLACE_READ])
   REPLACE_READLINK=0;     AC_SUBST([REPLACE_READLINK])
+  REPLACE_READLINKAT=0;   AC_SUBST([REPLACE_READLINKAT])
   REPLACE_RMDIR=0;        AC_SUBST([REPLACE_RMDIR])
   REPLACE_SLEEP=0;        AC_SUBST([REPLACE_SLEEP])
   REPLACE_SYMLINK=0;      AC_SUBST([REPLACE_SYMLINK])
+  REPLACE_SYMLINKAT=0;    AC_SUBST([REPLACE_SYMLINKAT])
   REPLACE_TTYNAME_R=0;    AC_SUBST([REPLACE_TTYNAME_R])
   REPLACE_UNLINK=0;       AC_SUBST([REPLACE_UNLINK])
   REPLACE_UNLINKAT=0;     AC_SUBST([REPLACE_UNLINKAT])
diff --git a/gl/m4/warn-on-use.m4 b/gl/m4/warn-on-use.m4
index e43beeb..1e98dc9 100644
--- a/gl/m4/warn-on-use.m4
+++ b/gl/m4/warn-on-use.m4
@@ -1,5 +1,5 @@
 # warn-on-use.m4 serial 5
-dnl Copyright (C) 2010-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/wchar_h.m4 b/gl/m4/wchar_h.m4
index bedb15a..9d1b0f8 100644
--- a/gl/m4/wchar_h.m4
+++ b/gl/m4/wchar_h.m4
@@ -1,6 +1,6 @@
 dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
 
-dnl Copyright (C) 2007-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/wchar_t.m4 b/gl/m4/wchar_t.m4
index e1e1e69..dc964e6 100644
--- a/gl/m4/wchar_t.m4
+++ b/gl/m4/wchar_t.m4
@@ -1,5 +1,5 @@
 # wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/wcrtomb.m4 b/gl/m4/wcrtomb.m4
index f56b5ba..7e3fe3f 100644
--- a/gl/m4/wcrtomb.m4
+++ b/gl/m4/wcrtomb.m4
@@ -1,5 +1,5 @@
 # wcrtomb.m4 serial 11
-dnl Copyright (C) 2008-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/wctype_h.m4 b/gl/m4/wctype_h.m4
index 82ada0e..95a4705 100644
--- a/gl/m4/wctype_h.m4
+++ b/gl/m4/wctype_h.m4
@@ -2,7 +2,7 @@
 
 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
 
-dnl Copyright (C) 2006-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/m4/wint_t.m4 b/gl/m4/wint_t.m4
index d7cd3db..ca3fd44 100644
--- a/gl/m4/wint_t.m4
+++ b/gl/m4/wint_t.m4
@@ -1,5 +1,5 @@
 # wint_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2003, 2007-2013 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/gl/malloc.c b/gl/malloc.c
deleted file mode 100644
index 8124cad..0000000
--- a/gl/malloc.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* malloc() function that is glibc compatible.
-
-   Copyright (C) 1997-1998, 2006-2007, 2009-2013 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/* written by Jim Meyering and Bruno Haible */
-
-#define _GL_USE_STDLIB_ALLOC 1
-#include <config.h>
-/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
-#ifdef malloc
-# define NEED_MALLOC_GNU 1
-# undef malloc
-/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU.  */
-#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU
-# define NEED_MALLOC_GNU 1
-#endif
-
-#include <stdlib.h>
-
-#include <errno.h>
-
-/* Allocate an N-byte block of memory from the heap.
-   If N is zero, allocate a 1-byte block.  */
-
-void *
-rpl_malloc (size_t n)
-{
-  void *result;
-
-#if NEED_MALLOC_GNU
-  if (n == 0)
-    n = 1;
-#endif
-
-  result = malloc (n);
-
-#if !HAVE_MALLOC_POSIX
-  if (result == NULL)
-    errno = ENOMEM;
-#endif
-
-  return result;
-}
diff --git a/gl/mbrtowc.c b/gl/mbrtowc.c
index 75d10bc..a5d61a0 100644
--- a/gl/mbrtowc.c
+++ b/gl/mbrtowc.c
@@ -1,5 +1,5 @@
 /* Convert multibyte character to wide character.
-   Copyright (C) 1999-2002, 2005-2013 Free Software Foundation, Inc.
+   Copyright (C) 1999-2002, 2005-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno at clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
@@ -328,7 +328,7 @@ mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
 size_t
 rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
 {
-# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG
+# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG
   if (s == NULL)
     {
       pwc = NULL;
@@ -337,6 +337,11 @@ rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
     }
 # endif
 
+# if MBRTOWC_EMPTY_INPUT_BUG
+  if (n == 0)
+    return (size_t) -2;
+# endif
+
 # if MBRTOWC_RETVAL_BUG
   {
     static mbstate_t internal_state;
diff --git a/gl/mbsinit.c b/gl/mbsinit.c
index 98ae1e6..5999783 100644
--- a/gl/mbsinit.c
+++ b/gl/mbsinit.c
@@ -1,5 +1,5 @@
 /* Test for initial conversion state.
-   Copyright (C) 2008-2013 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno at clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/gl/mbtowc-impl.h b/gl/mbtowc-impl.h
index 35b3528..737d763 100644
--- a/gl/mbtowc-impl.h
+++ b/gl/mbtowc-impl.h
@@ -1,5 +1,5 @@
 /* Convert multibyte character to wide character.
-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno at clisp.org>, 2011.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/gl/mbtowc.c b/gl/mbtowc.c
index 7777f0a..be0d609 100644
--- a/gl/mbtowc.c
+++ b/gl/mbtowc.c
@@ -1,5 +1,5 @@
 /* Convert multibyte character to wide character.
-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno at clisp.org>, 2011.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/gl/nl_langinfo.c b/gl/nl_langinfo.c
index 2210b7f..ff0adc4 100644
--- a/gl/nl_langinfo.c
+++ b/gl/nl_langinfo.c
@@ -1,6 +1,6 @@
 /* nl_langinfo() replacement: query locale dependent information.
 
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -20,13 +20,72 @@
 /* Specification.  */
 #include <langinfo.h>
 
+#include <locale.h>
+#include <string.h>
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+# include <windows.h>
+# include <stdio.h>
+#endif
+
+/* Return the codeset of the current locale, if this is easily deducible.
+   Otherwise, return "".  */
+static char *
+ctype_codeset (void)
+{
+  static char buf[2 + 10 + 1];
+  size_t buflen = 0;
+  char const *locale = setlocale (LC_CTYPE, NULL);
+  char *codeset = buf;
+  size_t codesetlen;
+  codeset[0] = '\0';
+
+  if (locale && locale[0])
+    {
+      /* If the locale name contains an encoding after the dot, return it.  */
+      char *dot = strchr (locale, '.');
+
+      if (dot)
+        {
+          /* Look for the possible @... trailer and remove it, if any.  */
+          char *codeset_start = dot + 1;
+          char const *modifier = strchr (codeset_start, '@');
+
+          if (! modifier)
+            codeset = codeset_start;
+          else
+            {
+              codesetlen = modifier - codeset_start;
+              if (codesetlen < sizeof buf)
+                {
+                  codeset = memcpy (buf, codeset_start, codesetlen);
+                  codeset[codesetlen] = '\0';
+                }
+            }
+        }
+    }
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  /* If setlocale is successful, it returns the number of the
+     codepage, as a string.  Otherwise, fall back on Windows API
+     GetACP, which returns the locale's codepage as a number (although
+     this doesn't change according to what the 'setlocale' call specified).
+     Either way, prepend "CP" to make it a valid codeset name.  */
+  codesetlen = strlen (codeset);
+  if (0 < codesetlen && codesetlen < sizeof buf - 2)
+    memmove (buf + 2, codeset, codesetlen + 1);
+  else
+    sprintf (buf + 2, "%u", GetACP ());
+  codeset = memcpy (buf, "CP", 2);
+#endif
+  return codeset;
+}
+
+
 #if REPLACE_NL_LANGINFO
 
 /* Override nl_langinfo with support for added nl_item values.  */
 
-# include <locale.h>
-# include <string.h>
-
 # undef nl_langinfo
 
 char *
@@ -36,36 +95,7 @@ rpl_nl_langinfo (nl_item item)
     {
 # if GNULIB_defined_CODESET
     case CODESET:
-      {
-        const char *locale;
-        static char buf[2 + 10 + 1];
-
-        locale = setlocale (LC_CTYPE, NULL);
-        if (locale != NULL && locale[0] != '\0')
-          {
-            /* If the locale name contains an encoding after the dot, return
-               it.  */
-            const char *dot = strchr (locale, '.');
-
-            if (dot != NULL)
-              {
-                const char *modifier;
-
-                dot++;
-                /* Look for the possible @... trailer and remove it, if any.  */
-                modifier = strchr (dot, '@');
-                if (modifier == NULL)
-                  return dot;
-                if (modifier - dot < sizeof (buf))
-                  {
-                    memcpy (buf, dot, modifier - dot);
-                    buf [modifier - dot] = '\0';
-                    return buf;
-                  }
-              }
-          }
-        return "";
-      }
+      return ctype_codeset ();
 # endif
 # if GNULIB_defined_T_FMT_AMPM
     case T_FMT_AMPM:
@@ -111,42 +141,28 @@ rpl_nl_langinfo (nl_item item)
 
 #else
 
-/* Provide nl_langinfo from scratch.  */
-
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Provide nl_langinfo from scratch, either for native MS-Windows, or
+   for old Unix platforms without locales, such as Linux libc5 or
+   BeOS.  */
 
-/* Native Windows platforms.  */
-
-#  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
-#  include <windows.h>
-
-#  include <stdio.h>
-
-# else
-
-/* An old Unix platform without locales, such as Linux libc5 or BeOS.  */
-
-# endif
-
-# include <locale.h>
+# include <time.h>
 
 char *
 nl_langinfo (nl_item item)
 {
+  static char nlbuf[100];
+  struct tm tmm = { 0 };
+
   switch (item)
     {
     /* nl_langinfo items of the LC_CTYPE category */
     case CODESET:
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
       {
-        static char buf[2 + 10 + 1];
-
-        /* The Windows API has a function returning the locale's codepage as
-           a number.  */
-        sprintf (buf, "CP%u", GetACP ());
-        return buf;
+        char *codeset = ctype_codeset ();
+        if (*codeset)
+          return codeset;
       }
-# elif defined __BEOS__
+# ifdef __BEOS__
       return "UTF-8";
 # else
       return "ISO-8859-1";
@@ -156,6 +172,8 @@ nl_langinfo (nl_item item)
       return localeconv () ->decimal_point;
     case THOUSEP:
       return localeconv () ->thousands_sep;
+    case GROUPING:
+      return localeconv () ->grouping;
     /* nl_langinfo items of the LC_TIME category.
        TODO: Really use the locale.  */
     case D_T_FMT:
@@ -170,93 +188,126 @@ nl_langinfo (nl_item item)
     case T_FMT_AMPM:
       return "%I:%M:%S %p";
     case AM_STR:
-      return "AM";
+      if (!strftime (nlbuf, sizeof nlbuf, "%p", &tmm))
+        return "AM";
+      return nlbuf;
     case PM_STR:
-      return "PM";
+      tmm.tm_hour = 12;
+      if (!strftime (nlbuf, sizeof nlbuf, "%p", &tmm))
+        return "PM";
+      return nlbuf;
     case DAY_1:
-      return "Sunday";
     case DAY_2:
-      return "Monday";
     case DAY_3:
-      return "Tuesday";
     case DAY_4:
-      return "Wednesday";
     case DAY_5:
-      return "Thursday";
     case DAY_6:
-      return "Friday";
     case DAY_7:
-      return "Saturday";
+      {
+        static char const days[][sizeof "Wednesday"] = {
+          "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
+          "Friday", "Saturday"
+        };
+        tmm.tm_wday = item - DAY_1;
+        if (!strftime (nlbuf, sizeof nlbuf, "%A", &tmm))
+          return (char *) days[item - DAY_1];
+        return nlbuf;
+      }
     case ABDAY_1:
-      return "Sun";
     case ABDAY_2:
-      return "Mon";
     case ABDAY_3:
-      return "Tue";
     case ABDAY_4:
-      return "Wed";
     case ABDAY_5:
-      return "Thu";
     case ABDAY_6:
-      return "Fri";
     case ABDAY_7:
-      return "Sat";
+      {
+        static char const abdays[][sizeof "Sun"] = {
+          "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+        };
+        tmm.tm_wday = item - ABDAY_1;
+        if (!strftime (nlbuf, sizeof nlbuf, "%a", &tmm))
+          return (char *) abdays[item - ABDAY_1];
+        return nlbuf;
+      }
     case MON_1:
-      return "January";
     case MON_2:
-      return "February";
     case MON_3:
-      return "March";
     case MON_4:
-      return "April";
     case MON_5:
-      return "May";
     case MON_6:
-      return "June";
     case MON_7:
-      return "July";
     case MON_8:
-      return "August";
     case MON_9:
-      return "September";
     case MON_10:
-      return "October";
     case MON_11:
-      return "November";
     case MON_12:
-      return "December";
+      {
+        static char const months[][sizeof "September"] = {
+          "January", "February", "March", "April", "May", "June", "July",
+          "September", "October", "November", "December"
+        };
+        tmm.tm_mon = item - MON_1;
+        if (!strftime (nlbuf, sizeof nlbuf, "%B", &tmm))
+          return (char *) months[item - MON_1];
+        return nlbuf;
+      }
     case ABMON_1:
-      return "Jan";
     case ABMON_2:
-      return "Feb";
     case ABMON_3:
-      return "Mar";
     case ABMON_4:
-      return "Apr";
     case ABMON_5:
-      return "May";
     case ABMON_6:
-      return "Jun";
     case ABMON_7:
-      return "Jul";
     case ABMON_8:
-      return "Aug";
     case ABMON_9:
-      return "Sep";
     case ABMON_10:
-      return "Oct";
     case ABMON_11:
-      return "Nov";
     case ABMON_12:
-      return "Dec";
+      {
+        static char const abmonths[][sizeof "Jan"] = {
+          "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
+          "Sep", "Oct", "Nov", "Dec"
+        };
+        tmm.tm_mon = item - ABMON_1;
+        if (!strftime (nlbuf, sizeof nlbuf, "%b", &tmm))
+          return (char *) abmonths[item - ABMON_1];
+        return nlbuf;
+      }
     case ERA:
       return "";
     case ALT_DIGITS:
       return "\0\0\0\0\0\0\0\0\0\0";
-    /* nl_langinfo items of the LC_MONETARY category
-       TODO: Really use the locale. */
+    /* nl_langinfo items of the LC_MONETARY category.  */
     case CRNCYSTR:
-      return "-";
+      return localeconv () ->currency_symbol;
+    case INT_CURR_SYMBOL:
+      return localeconv () ->int_curr_symbol;
+    case MON_DECIMAL_POINT:
+      return localeconv () ->mon_decimal_point;
+    case MON_THOUSANDS_SEP:
+      return localeconv () ->mon_thousands_sep;
+    case MON_GROUPING:
+      return localeconv () ->mon_grouping;
+    case POSITIVE_SIGN:
+      return localeconv () ->positive_sign;
+    case NEGATIVE_SIGN:
+      return localeconv () ->negative_sign;
+    case FRAC_DIGITS:
+      return & localeconv () ->frac_digits;
+    case INT_FRAC_DIGITS:
+      return & localeconv () ->int_frac_digits;
+    case P_CS_PRECEDES:
+      return & localeconv () ->p_cs_precedes;
+    case N_CS_PRECEDES:
+      return & localeconv () ->n_cs_precedes;
+    case P_SEP_BY_SPACE:
+      return & localeconv () ->p_sep_by_space;
+    case N_SEP_BY_SPACE:
+      return & localeconv () ->n_sep_by_space;
+    case P_SIGN_POSN:
+      return & localeconv () ->p_sign_posn;
+    case N_SIGN_POSN:
+      return & localeconv () ->n_sign_posn;
     /* nl_langinfo items of the LC_MESSAGES category
        TODO: Really use the locale. */
     case YESEXPR:
diff --git a/gl/ref-add.sin b/gl/ref-add.sin
index 7cbdec5..4d406a3 100644
--- a/gl/ref-add.sin
+++ b/gl/ref-add.sin
@@ -1,6 +1,6 @@
 # Add this package to a list of references stored in a text file.
 #
-#   Copyright (C) 2000, 2009-2013 Free Software Foundation, Inc.
+#   Copyright (C) 2000, 2009-2015 Free Software Foundation, Inc.
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/ref-del.sin b/gl/ref-del.sin
index cf7b492..5b4ff62 100644
--- a/gl/ref-del.sin
+++ b/gl/ref-del.sin
@@ -1,6 +1,6 @@
 # Remove this package from a list of references stored in a text file.
 #
-#   Copyright (C) 2000, 2009-2013 Free Software Foundation, Inc.
+#   Copyright (C) 2000, 2009-2015 Free Software Foundation, Inc.
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/regcomp.c b/gl/regcomp.c
index 4de2ed2..840220f 100644
--- a/gl/regcomp.c
+++ b/gl/regcomp.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu at yamato.ibm.com>.
 
@@ -2199,7 +2199,11 @@ parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
 	{
 	  branch = parse_branch (regexp, preg, token, syntax, nest, err);
 	  if (BE (*err != REG_NOERROR && branch == NULL, 0))
-	    return NULL;
+	    {
+	      if (tree != NULL)
+		postorder (tree, free_tree, NULL);
+	      return NULL;
+	    }
 	}
       else
 	branch = NULL;
@@ -2460,14 +2464,22 @@ parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token,
   while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS
 	 || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM)
     {
-      tree = parse_dup_op (tree, regexp, dfa, token, syntax, err);
-      if (BE (*err != REG_NOERROR && tree == NULL, 0))
-	return NULL;
+      bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token,
+					   syntax, err);
+      if (BE (*err != REG_NOERROR && dup_tree == NULL, 0))
+	{
+	  if (tree != NULL)
+	    postorder (tree, free_tree, NULL);
+	  return NULL;
+	}
+      tree = dup_tree;
       /* In BRE consecutive duplications are not allowed.  */
       if ((syntax & RE_CONTEXT_INVALID_DUP)
 	  && (token->type == OP_DUP_ASTERISK
 	      || token->type == OP_OPEN_DUP_NUM))
 	{
+	  if (tree != NULL)
+	    postorder (tree, free_tree, NULL);
 	  *err = REG_BADRPT;
 	  return NULL;
 	}
@@ -2623,6 +2635,8 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa,
 
       /* Duplicate ELEM before it is marked optional.  */
       elem = duplicate_tree (elem, dfa);
+      if (BE (elem == NULL, 0))
+        goto parse_dup_op_espace;
       old_tree = tree;
     }
   else
diff --git a/gl/regex.c b/gl/regex.c
index 361f763..1adc8a8 100644
--- a/gl/regex.c
+++ b/gl/regex.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu at yamato.ibm.com>.
 
diff --git a/gl/regex.h b/gl/regex.h
index 74645ca..dd12ee9 100644
--- a/gl/regex.h
+++ b/gl/regex.h
@@ -1,6 +1,6 @@
 /* Definitions for data structures and routines for the regular
    expression library.
-   Copyright (C) 1985, 1989-1993, 1995-1998, 2000-2003, 2005-2013 Free Software
+   Copyright (C) 1985, 1989-1993, 1995-1998, 2000-2003, 2005-2015 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -608,7 +608,7 @@ extern void re_set_registers (struct re_pattern_buffer *__buffer,
 			      regoff_t *__starts, regoff_t *__ends);
 #endif	/* Use GNU */
 
-#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_BSD)
+#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC)
 # ifndef _CRAY
 /* 4.2 bsd compatibility.  */
 extern char *re_comp (const char *);
diff --git a/gl/regex_internal.c b/gl/regex_internal.c
index f679f87..36ae6ab 100644
--- a/gl/regex_internal.c
+++ b/gl/regex_internal.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu at yamato.ibm.com>.
 
@@ -311,12 +311,11 @@ build_wcs_upper_buffer (re_string_t *pstr)
 			       + byte_idx), remain_len, &pstr->cur_state);
 	  if (BE (mbclen < (size_t) -2, 1))
 	    {
-	      wchar_t wcu = wc;
-	      if (iswlower (wc))
+	      wchar_t wcu = towupper (wc);
+	      if (wcu != wc)
 		{
 		  size_t mbcdlen;
 
-		  wcu = towupper (wc);
 		  mbcdlen = wcrtomb (buf, wcu, &prev_st);
 		  if (BE (mbclen == mbcdlen, 1))
 		    memcpy (pstr->mbs + byte_idx, buf, mbclen);
@@ -381,12 +380,11 @@ build_wcs_upper_buffer (re_string_t *pstr)
 	mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
 	if (BE (mbclen < (size_t) -2, 1))
 	  {
-	    wchar_t wcu = wc;
-	    if (iswlower (wc))
+	    wchar_t wcu = towupper (wc);
+	    if (wcu != wc)
 	      {
 		size_t mbcdlen;
 
-		wcu = towupper (wc);
 		mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st);
 		if (BE (mbclen == mbcdlen, 1))
 		  memcpy (pstr->mbs + byte_idx, buf, mbclen);
@@ -538,10 +536,7 @@ build_upper_buffer (re_string_t *pstr)
       int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx];
       if (BE (pstr->trans != NULL, 0))
 	ch = pstr->trans[ch];
-      if (islower (ch))
-	pstr->mbs[char_idx] = toupper (ch);
-      else
-	pstr->mbs[char_idx] = ch;
+      pstr->mbs[char_idx] = toupper (ch);
     }
   pstr->valid_len = char_idx;
   pstr->valid_raw_len = char_idx;
@@ -682,7 +677,7 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags)
 			 pstr->valid_len - offset);
 	      pstr->valid_len -= offset;
 	      pstr->valid_raw_len -= offset;
-#if DEBUG
+#if defined DEBUG && DEBUG
 	      assert (pstr->valid_len > 0);
 #endif
 	    }
@@ -941,7 +936,7 @@ re_string_context_at (const re_string_t *input, Idx idx, int eflags)
       Idx wc_idx = idx;
       while(input->wcs[wc_idx] == WEOF)
 	{
-#ifdef DEBUG
+#if defined DEBUG && DEBUG
 	  /* It must not happen.  */
 	  assert (REG_VALID_INDEX (wc_idx));
 #endif
diff --git a/gl/regex_internal.h b/gl/regex_internal.h
index 0d19f35..ff486bb 100644
--- a/gl/regex_internal.h
+++ b/gl/regex_internal.h
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu at yamato.ibm.com>.
 
@@ -40,7 +40,7 @@
 # define lock_fini(lock) 0
 # define lock_lock(lock) __libc_lock_lock (lock)
 # define lock_unlock(lock) __libc_lock_unlock (lock)
-#elif defined GNULIB_LOCK
+#elif defined GNULIB_LOCK && !defined USE_UNLOCKED_IO
 # include "glthread/lock.h"
   /* Use gl_lock_define if empty macro arguments are known to work.
      Otherwise, fall back on less-portable substitutes.  */
@@ -62,7 +62,7 @@
 # define lock_fini(lock) glthread_lock_destroy (&(lock))
 # define lock_lock(lock) glthread_lock_lock (&(lock))
 # define lock_unlock(lock) glthread_lock_unlock (&(lock))
-#elif defined GNULIB_PTHREAD
+#elif defined GNULIB_PTHREAD && !defined USE_UNLOCKED_IO
 # include <pthread.h>
 # define lock_define(name) pthread_mutex_t name;
 # define lock_init(lock) pthread_mutex_init (&(lock), 0)
@@ -110,7 +110,7 @@
 # define gettext_noop(String) String
 #endif
 
-#if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC
+#if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE) || _LIBC
 # define RE_ENABLE_I18N
 #endif
 
diff --git a/gl/regexec.c b/gl/regexec.c
index 21d14ad..d3920c4 100644
--- a/gl/regexec.c
+++ b/gl/regexec.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu at yamato.ibm.com>.
 
diff --git a/gl/stdbool.in.h b/gl/stdbool.in.h
index bd629ed..fb1cde0 100644
--- a/gl/stdbool.in.h
+++ b/gl/stdbool.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2003, 2006-2013 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2003, 2006-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <haible at clisp.cons.org>, 2001.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/gl/stddef.in.h b/gl/stddef.in.h
index 614c9bc..383d441 100644
--- a/gl/stddef.in.h
+++ b/gl/stddef.in.h
@@ -1,6 +1,6 @@
 /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
 
-   Copyright (C) 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -39,7 +39,6 @@
 
 # if !(defined _ at GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
 #  ifdef __need_wint_t
-#   undef _ at GUARD_PREFIX@_STDDEF_H
 #   define _GL_STDDEF_WINT_T
 #  endif
 #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
@@ -54,33 +53,56 @@
 
 #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
 
-#  ifndef _ at GUARD_PREFIX@_STDDEF_H
-#   define _ at GUARD_PREFIX@_STDDEF_H
-
 /* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
-#if @REPLACE_NULL@
-# undef NULL
-# ifdef __cplusplus
+#  if (@REPLACE_NULL@ \
+       && (!defined _ at GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
+#   undef NULL
+#   ifdef __cplusplus
    /* ISO C++ says that the macro NULL must expand to an integer constant
       expression, hence '((void *) 0)' is not allowed in C++.  */
-#  if __GNUG__ >= 3
+#    if __GNUG__ >= 3
     /* GNU C++ has a __null macro that behaves like an integer ('int' or
        'long') but has the same size as a pointer.  Use that, to avoid
        warnings.  */
-#   define NULL __null
-#  else
-#   define NULL 0L
+#     define NULL __null
+#    else
+#     define NULL 0L
+#    endif
+#   else
+#    define NULL ((void *) 0)
+#   endif
 #  endif
-# else
-#  define NULL ((void *) 0)
-# endif
-#endif
+
+#  ifndef _ at GUARD_PREFIX@_STDDEF_H
+#   define _ at GUARD_PREFIX@_STDDEF_H
 
 /* Some platforms lack wchar_t.  */
 #if !@HAVE_WCHAR_T@
 # define wchar_t int
 #endif
 
+/* Some platforms lack max_align_t.  */
+#if !@HAVE_MAX_ALIGN_T@
+/* On the x86, the maximum storage alignment of double, long, etc. is 4,
+   but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
+   and the C11 standard allows this.  Work around this problem by
+   using __alignof__ (which returns 8 for double) rather than _Alignof
+   (which returns 4), and align each union member accordingly.  */
+# ifdef __GNUC__
+#  define _GL_STDDEF_ALIGNAS(type) \
+     __attribute__ ((__aligned__ (__alignof__ (type))))
+# else
+#  define _GL_STDDEF_ALIGNAS(type) /* */
+# endif
+typedef union
+{
+  char *__p _GL_STDDEF_ALIGNAS (char *);
+  double __d _GL_STDDEF_ALIGNAS (double);
+  long double __ld _GL_STDDEF_ALIGNAS (long double);
+  long int __i _GL_STDDEF_ALIGNAS (long int);
+} max_align_t;
+#endif
+
 #  endif /* _ at GUARD_PREFIX@_STDDEF_H */
 # endif /* _ at GUARD_PREFIX@_STDDEF_H */
 #endif /* __need_XXX */
diff --git a/gl/stdint.in.h b/gl/stdint.in.h
index 889bca7..cf36558 100644
--- a/gl/stdint.in.h
+++ b/gl/stdint.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2002, 2004-2013 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2015 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
    This file is part of gnulib.
 
@@ -38,8 +38,7 @@
    other system header files; just include the system's <stdint.h>.
    Ideally we should test __BIONIC__ here, but it is only defined after
    <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
-#if defined __ANDROID__ \
-    && defined _SYS_TYPES_H_ && !defined __need_size_t
+#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
 # @INCLUDE_NEXT@ @NEXT_STDINT_H@
 #else
 
diff --git a/gl/stdlib.in.h b/gl/stdlib.in.h
index 552fdf0..fc46a21 100644
--- a/gl/stdlib.in.h
+++ b/gl/stdlib.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdlib.h>.
 
-   Copyright (C) 1995, 2001-2004, 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2004, 2006-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -520,6 +520,29 @@ _GL_CXXALIAS_SYS (putenv, int, (char *string));
 _GL_CXXALIASWARN (putenv);
 #endif
 
+#if @GNULIB_QSORT_R@
+# if @REPLACE_QSORT_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef qsort_r
+#   define qsort_r rpl_qsort_r
+#  endif
+_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg) _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg));
+# else
+_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg));
+# endif
+_GL_CXXALIASWARN (qsort_r);
+#endif
+
 
 #if @GNULIB_RANDOM_R@
 # if !@HAVE_RANDOM_R@
diff --git a/gl/streq.h b/gl/streq.h
index 03ede61..85ce271 100644
--- a/gl/streq.h
+++ b/gl/streq.h
@@ -1,5 +1,5 @@
 /* Optimized string comparison.
-   Copyright (C) 2001-2002, 2007, 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002, 2007, 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/gl/sys_types.in.h b/gl/sys_types.in.h
index 520f6c8..f313b85 100644
--- a/gl/sys_types.in.h
+++ b/gl/sys_types.in.h
@@ -1,6 +1,6 @@
 /* Provide a more complete sys/types.h.
 
-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -23,7 +23,9 @@
 #ifndef _ at GUARD_PREFIX@_SYS_TYPES_H
 
 /* The include_next requires a split double-inclusion guard.  */
+# define _GL_INCLUDING_SYS_TYPES_H
 #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+# undef _GL_INCLUDING_SYS_TYPES_H
 
 #ifndef _ at GUARD_PREFIX@_SYS_TYPES_H
 #define _ at GUARD_PREFIX@_SYS_TYPES_H
diff --git a/gl/unistd.in.h b/gl/unistd.in.h
index 9ffb1a7..c0bc8c7 100644
--- a/gl/unistd.in.h
+++ b/gl/unistd.in.h
@@ -1,5 +1,5 @@
 /* Substitute for and wrapper around <unistd.h>.
-   Copyright (C) 2003-2013 Free Software Foundation, Inc.
+   Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -21,9 +21,23 @@
 #endif
 @PRAGMA_COLUMNS@
 
+#ifdef _GL_INCLUDING_UNISTD_H
+/* Special invocation convention:
+   - On Mac OS X 10.3.9 we have a sequence of nested includes
+     <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h>
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
+
+#@INCLUDE_NEXT@ @NEXT_UNISTD_H@
+
+#else
+/* Normal invocation convention.  */
+
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_UNISTD_H@
+# define _GL_INCLUDING_UNISTD_H
 # @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+# undef _GL_INCLUDING_UNISTD_H
 #endif
 
 /* Get all possible declarations of gethostname().  */
@@ -387,6 +401,12 @@ _GL_WARN_ON_USE (dup3, "dup3 is unportable - "
 /* Set of environment variables and values.  An array of strings of the form
    "VARIABLE=VALUE", terminated with a NULL.  */
 #  if defined __APPLE__ && defined __MACH__
+#   include <TargetConditionals.h>
+#   if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
+#    define _GL_USE_CRT_EXTERNS
+#   endif
+#  endif
+#  ifdef _GL_USE_CRT_EXTERNS
 #   include <crt_externs.h>
 #   define environ (*_NSGetEnviron ())
 #  else
@@ -1273,13 +1293,24 @@ _GL_WARN_ON_USE (readlink, "readlink is unportable - "
 
 
 #if @GNULIB_READLINKAT@
-# if !@HAVE_READLINKAT@
+# if @REPLACE_READLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlinkat rpl_readlinkat
+#  endif
+_GL_FUNCDECL_RPL (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+# else
+#  if !@HAVE_READLINKAT@
 _GL_FUNCDECL_SYS (readlinkat, ssize_t,
                   (int fd, char const *file, char *buf, size_t len)
                   _GL_ARG_NONNULL ((2, 3)));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (readlinkat, ssize_t,
                   (int fd, char const *file, char *buf, size_t len));
+# endif
 _GL_CXXALIASWARN (readlinkat);
 #elif defined GNULIB_POSIXCHECK
 # undef readlinkat
@@ -1393,13 +1424,25 @@ _GL_WARN_ON_USE (symlink, "symlink is not portable - "
 
 
 #if @GNULIB_SYMLINKAT@
-# if !@HAVE_SYMLINKAT@
+# if @REPLACE_SYMLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlinkat
+#   define symlinkat rpl_symlinkat
+#  endif
+_GL_FUNCDECL_RPL (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+# else
+#  if !@HAVE_SYMLINKAT@
 _GL_FUNCDECL_SYS (symlinkat, int,
                   (char const *contents, int fd, char const *file)
                   _GL_ARG_NONNULL ((1, 3)));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (symlinkat, int,
                   (char const *contents, int fd, char const *file));
+# endif
 _GL_CXXALIASWARN (symlinkat);
 #elif defined GNULIB_POSIXCHECK
 # undef symlinkat
@@ -1539,4 +1582,5 @@ _GL_CXXALIASWARN (write);
 _GL_INLINE_HEADER_END
 
 #endif /* _ at GUARD_PREFIX@_UNISTD_H */
+#endif /* _GL_INCLUDING_UNISTD_H */
 #endif /* _ at GUARD_PREFIX@_UNISTD_H */
diff --git a/gl/verify.h b/gl/verify.h
index 13e2085..db52900 100644
--- a/gl/verify.h
+++ b/gl/verify.h
@@ -1,6 +1,6 @@
 /* Compile-time assert-like macros.
 
-   Copyright (C) 2005-2006, 2009-2013 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/gl/wchar.in.h b/gl/wchar.in.h
index 97f7dc8..b15ad4b 100644
--- a/gl/wchar.in.h
+++ b/gl/wchar.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
 
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -30,9 +30,14 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+#if (((defined __need_mbstate_t || defined __need_wint_t)               \
+      && !defined __MINGW32__)                                          \
+     || (defined __hpux                                                 \
+         && ((defined _INTTYPES_INCLUDED && !defined strtoimax)         \
+             || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H))               \
+     || defined _GL_ALREADY_INCLUDING_WCHAR_H)
 /* Special invocation convention:
-   - Inside glibc and uClibc header files.
+   - Inside glibc and uClibc header files, but not MinGW.
    - On HP-UX 11.00 we have a sequence of nested includes
      <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
      once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
diff --git a/gl/wcrtomb.c b/gl/wcrtomb.c
index 0aab985..bd7a7ba 100644
--- a/gl/wcrtomb.c
+++ b/gl/wcrtomb.c
@@ -1,5 +1,5 @@
 /* Convert wide character to multibyte character.
-   Copyright (C) 2008-2013 Free Software Foundation, Inc.
+   Copyright (C) 2008-2015 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno at clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/gl/wctype.in.h b/gl/wctype.in.h
index 58835c7..2c6fe4a 100644
--- a/gl/wctype.in.h
+++ b/gl/wctype.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
 
-   Copyright (C) 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/libdap.spec b/libdap.spec
index 56cbc44..c796680 100644
--- a/libdap.spec
+++ b/libdap.spec
@@ -1,6 +1,8 @@
 Name: libdap
 Summary: The C++ DAP2/DAP4 library from OPeNDAP
-Version: 3.14.0
+# updated 7/6/15 to match the update in configure.ac for a new source
+# dist. There's not (yet) a  binary dist with this version. jhrg 7/6/15
+Version: 3.15.1
 Release: 1%{?dist}
 
 License: LGPLv2+
diff --git a/main_page.doxygen.in b/main_page.doxygen.in
index 90dd0b7..39cda8f 100644
--- a/main_page.doxygen.in
+++ b/main_page.doxygen.in
@@ -11,8 +11,7 @@
 This reference documentation corresponds to version @PACKAGE_VERSION@ of libdap, a C++
 implementation of DAP2, with some extensions. The libdap library
 includes classes and functions which implement DAP 2.0 as well as utilities
-which simpify building clients and servers for DAP 2.0. The library also
-contains a few new features which will eventually become part of DAP 4.0. 
+which simpify building clients and servers for DAP 2.0 and DAP4.0. 
 
 \section conventions Doxygen Conventions
 
diff --git a/media_types.h b/media_types.h
index 54e9575..c652754 100644
--- a/media_types.h
+++ b/media_types.h
@@ -26,6 +26,8 @@
 #ifndef MEDIA_TYPES_H_
 #define MEDIA_TYPES_H_
 
+#include <string>
+
 static std::string DAS1 = "dods_das";
 static std::string DAS2 = "dods-das";
 
diff --git a/mime_util.h b/mime_util.h
index c145c72..a4a48c9 100644
--- a/mime_util.h
+++ b/mime_util.h
@@ -47,6 +47,8 @@
 #include "EncodingType.h"
 #endif
 
+#include <string>
+
 namespace libdap
 {
 
diff --git a/tests/DASTest b/tests/DASTest
index fd4ae99..cfea269 100755
--- a/tests/DASTest
+++ b/tests/DASTest
@@ -941,7 +941,7 @@ fi
 # List of tests.
 if $at_list_p; then
   cat <<_ATEOF || at_write_fail=1
-libdap 3.14.0 test suite: das-test test groups:
+libdap 3.15.1 test suite: das-test test groups:
 
  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
@@ -982,7 +982,7 @@ _ATEOF
   exit $at_write_fail
 fi
 if $at_version_p; then
-  $as_echo "$as_me (libdap 3.14.0)" &&
+  $as_echo "$as_me (libdap 3.15.1)" &&
   cat <<\_ATEOF || at_write_fail=1
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1159,11 +1159,11 @@ exec 5>>"$at_suite_log"
 
 # Banners and logs.
 $as_echo "## ----------------------------------- ##
-## libdap 3.14.0 test suite: das-test. ##
+## libdap 3.15.1 test suite: das-test. ##
 ## ----------------------------------- ##"
 {
   $as_echo "## ----------------------------------- ##
-## libdap 3.14.0 test suite: das-test. ##
+## libdap 3.15.1 test suite: das-test. ##
 ## ----------------------------------- ##"
   echo
 
@@ -2007,7 +2007,7 @@ _ASBOX
   $as_echo "Please send $at_msg and all information you think might help:
 
    To: <opendap-tech at opendap.org>
-   Subject: [libdap 3.14.0] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+   Subject: [libdap 3.15.1] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
 
 You may investigate any problem if you feel able to do so, in which
 case the test suite provides a good starting point.  Its output may
diff --git a/tests/DDSTest b/tests/DDSTest
index e729251..11554f1 100755
--- a/tests/DDSTest
+++ b/tests/DDSTest
@@ -930,7 +930,7 @@ fi
 # List of tests.
 if $at_list_p; then
   cat <<_ATEOF || at_write_fail=1
-libdap 3.14.0 test suite: dds-test test groups:
+libdap 3.15.1 test suite: dds-test test groups:
 
  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
@@ -971,7 +971,7 @@ _ATEOF
   exit $at_write_fail
 fi
 if $at_version_p; then
-  $as_echo "$as_me (libdap 3.14.0)" &&
+  $as_echo "$as_me (libdap 3.15.1)" &&
   cat <<\_ATEOF || at_write_fail=1
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1148,11 +1148,11 @@ exec 5>>"$at_suite_log"
 
 # Banners and logs.
 $as_echo "## ----------------------------------- ##
-## libdap 3.14.0 test suite: dds-test. ##
+## libdap 3.15.1 test suite: dds-test. ##
 ## ----------------------------------- ##"
 {
   $as_echo "## ----------------------------------- ##
-## libdap 3.14.0 test suite: dds-test. ##
+## libdap 3.15.1 test suite: dds-test. ##
 ## ----------------------------------- ##"
   echo
 
@@ -1996,7 +1996,7 @@ _ASBOX
   $as_echo "Please send $at_msg and all information you think might help:
 
    To: <opendap-tech at opendap.org>
-   Subject: [libdap 3.14.0] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+   Subject: [libdap 3.15.1] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
 
 You may investigate any problem if you feel able to do so, in which
 case the test suite provides a good starting point.  Its output may
diff --git a/tests/DMRTest b/tests/DMRTest
index f148689..1ae2231 100755
--- a/tests/DMRTest
+++ b/tests/DMRTest
@@ -1135,7 +1135,7 @@ fi
 # List of tests.
 if $at_list_p; then
   cat <<_ATEOF || at_write_fail=1
-libdap 3.14.0 test suite: dmr-test test groups:
+libdap 3.15.1 test suite: dmr-test test groups:
 
  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
@@ -1176,7 +1176,7 @@ _ATEOF
   exit $at_write_fail
 fi
 if $at_version_p; then
-  $as_echo "$as_me (libdap 3.14.0)" &&
+  $as_echo "$as_me (libdap 3.15.1)" &&
   cat <<\_ATEOF || at_write_fail=1
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1353,11 +1353,11 @@ exec 5>>"$at_suite_log"
 
 # Banners and logs.
 $as_echo "## ----------------------------------- ##
-## libdap 3.14.0 test suite: dmr-test. ##
+## libdap 3.15.1 test suite: dmr-test. ##
 ## ----------------------------------- ##"
 {
   $as_echo "## ----------------------------------- ##
-## libdap 3.14.0 test suite: dmr-test. ##
+## libdap 3.15.1 test suite: dmr-test. ##
 ## ----------------------------------- ##"
   echo
 
@@ -2201,7 +2201,7 @@ _ASBOX
   $as_echo "Please send $at_msg and all information you think might help:
 
    To: <opendap-tech at opendap.org>
-   Subject: [libdap 3.14.0] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+   Subject: [libdap 3.15.1] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
 
 You may investigate any problem if you feel able to do so, in which
 case the test suite provides a good starting point.  Its output may
diff --git a/tests/EXPRTest b/tests/EXPRTest
index 515b539..7af3380 100755
--- a/tests/EXPRTest
+++ b/tests/EXPRTest
@@ -1019,7 +1019,7 @@ fi
 # List of tests.
 if $at_list_p; then
   cat <<_ATEOF || at_write_fail=1
-libdap 3.14.0 test suite: expr-test test groups:
+libdap 3.15.1 test suite: expr-test test groups:
 
  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
@@ -1060,7 +1060,7 @@ _ATEOF
   exit $at_write_fail
 fi
 if $at_version_p; then
-  $as_echo "$as_me (libdap 3.14.0)" &&
+  $as_echo "$as_me (libdap 3.15.1)" &&
   cat <<\_ATEOF || at_write_fail=1
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1237,11 +1237,11 @@ exec 5>>"$at_suite_log"
 
 # Banners and logs.
 $as_echo "## ------------------------------------ ##
-## libdap 3.14.0 test suite: expr-test. ##
+## libdap 3.15.1 test suite: expr-test. ##
 ## ------------------------------------ ##"
 {
   $as_echo "## ------------------------------------ ##
-## libdap 3.14.0 test suite: expr-test. ##
+## libdap 3.15.1 test suite: expr-test. ##
 ## ------------------------------------ ##"
   echo
 
@@ -2085,7 +2085,7 @@ _ASBOX
   $as_echo "Please send $at_msg and all information you think might help:
 
    To: <opendap-tech at opendap.org>
-   Subject: [libdap 3.14.0] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+   Subject: [libdap 3.15.1] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
 
 You may investigate any problem if you feel able to do so, in which
 case the test suite provides a good starting point.  Its output may
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0b76411..a66cb67 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -3,7 +3,8 @@
 AUTOMAKE_OPTIONS = foreign
 
 # Arrange to build with the backward compatibility mode enabled.
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/GNU -I$(top_srcdir)/d4_ce $(XML2_CFLAGS) $(CURL_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/GNU -I$(top_srcdir)/d4_ce \
+-I$(top_srcdir)/d4_function $(XML2_CFLAGS) $(CURL_CFLAGS)
 AM_CXXFLAGS =  
 
 if COMPILER_IS_GCC
@@ -23,9 +24,14 @@ if DAP4_DEFINED
 check_PROGRAMS += dmr-test
 endif
 
-TESTS = DASTest DDSTest EXPRTest DMRTest getdapTest
+# This will use automake's test envokation code. It's better to use
+# our own so we can pass in flags for autotest, esp --jobs=N to get
+# the autotest tests to run in parallel. See check-local: below.
 
-dist_check_SCRIPTS = DASTest DDSTest EXPRTest DMRTest getdapTest atconfig atlocal
+# TESTS = DASTest DDSTest EXPRTest DMRTest getdapTest
+
+check_SCRIPTS = $(DASTESTSUITE) $(DDSTESTSUITE) $(EXPRTESTSUITE) \
+	$(DMRTESTSUITE) $(GETDAPTESTSUITE)
 
 # Build the test drivers. The drivers all use the
 # subclassed types in Test*.cc and the TestTypesFactory.
@@ -70,14 +76,16 @@ TEST_HDR = TestArray.h TestByte.h TestCommon.h TestFloat32.h TestFloat64.h    \
 DIRS_EXTRA = das-testsuite dds-testsuite expr-testsuite dmr-testsuite \
 	getdap-testsuite
 
-EXTRA_DIST = DASTest.at  $(DASTESTSUITE) DDSTest.at $(DDSTESTSUITE) \
+EXTRA_DIST = DASTest.at $(DASTESTSUITE) DDSTest.at $(DDSTESTSUITE) \
 	EXPRTest.at $(EXPRTESTSUITE) DMRTest.at $(DMRTESTSUITE) \
-	 getdapTest.at getdap-testsuite atlocal.in $(srcdir)/package.m4 $(DIRS_EXTRA)
+	getdapTest.at $(GETDAPTESTSUITE) getdap-testsuite atlocal.in \
+	$(srcdir)/package.m4 $(DIRS_EXTRA)
 
 CLEANFILES = dmr-testsuite.tar.gz
 
-DISTCLEANFILES = *.log DASTest.dir/* DDSTest.dir/* EXPRTest.dir/* DMRTest.dir/* \
-	getdapTest.dir/*
+DISTCLEANFILES = *.log
+
+# DASTest.dir/* DDSTest.dir/* EXPRTest.dir/* DMRTest.dir/* getdapTest.dir/*
 
 dmr-testsuite.tar.gz: dmr-testsuite/*.xml
 	tar -czf $@ $^
@@ -86,22 +94,30 @@ dmr-testsuite.tar.gz: dmr-testsuite/*.xml
 
 AUTOM4TE = autom4te
 
+TESTSUITEFLAGS =
+
 DASTESTSUITE = $(srcdir)/DASTest
-DASTESTSUITEFLAGS =
 
 DDSTESTSUITE = $(srcdir)/DDSTest
-DDSTESTSUITEFLAGS =
 
 EXPRTESTSUITE = $(srcdir)/EXPRTest
-EXPRTESTSUITEFLAGS =
 
 DMRTESTSUITE = $(srcdir)/DMRTest
-DMRTESTSUITEFLAGS =
 
 GETDAPTESTSUITE = $(srcdir)/getdapTest
-GETDAPTESTSUITEFLAGS =
+
+check-local: atconfig atlocal $(DASTESTSUITE) $(DDSTESTSUITE) \
+$(EXPRTESTSUITE) $(DMRTESTSUITE) $(GETDAPTESTSUITE) 
+	$(SHELL) '$(DASTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(DDSTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(EXPRTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(DMRTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(GETDAPTESTSUITE)' $(TESTSUITEFLAGS)
 
 # Make sure there are no spaces after the DASTESTSUITE names. jhrg 3/16/15
+# Delete the scripts here and not using CLEANFILES because this target is
+# run after the 'regular' clean: and we need the test scripts to run their
+# --clean option. Once that's done, then remove them. 
 clean-local:
 	test ! -f '$(DASTESTSUITE)' || $(SHELL) $(DASTESTSUITE) --clean
 	test ! -f '$(DDSTESTSUITE)' || $(SHELL) $(DDSTESTSUITE) --clean
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 02dc972..5375942 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,23 +18,51 @@
 
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -59,11 +86,12 @@ check_PROGRAMS = das-test$(EXEEXT) dds-test$(EXEEXT) \
 	expr-test$(EXEEXT) $(am__EXEEXT_1)
 @DAP4_DEFINED_TRUE at am__append_3 = dmr-test
 subdir = tests
-DIST_COMMON = README $(dist_check_SCRIPTS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/atlocal.in \
-	$(testheaders_HEADERS) $(top_srcdir)/conf/depcomp
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(srcdir)/atlocal.in $(top_srcdir)/conf/depcomp \
+	$(testheaders_HEADERS) README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -84,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -143,6 +171,10 @@ am__uninstall_files_from_dir = { \
   }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(testheadersdir)"
 LIBRARIES = $(lib_LIBRARIES)
+AM_V_AR = $(am__v_AR_ at AM_V@)
+am__v_AR_ = $(am__v_AR_ at AM_DEFAULT_V@)
+am__v_AR_0 = @echo "  AR      " $@;
+am__v_AR_1 = 
 libtest_types_a_AR = $(AR) $(ARFLAGS)
 libtest_types_a_LIBADD =
 am__objects_1 = libtest_types_a-TestByte.$(OBJEXT) \
@@ -177,6 +209,10 @@ am_das_test_OBJECTS = das-test.$(OBJEXT)
 das_test_OBJECTS = $(am_das_test_OBJECTS)
 das_test_DEPENDENCIES = libtest-types.a ../libdapserver.la \
 	../libdap.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
 am_dds_test_OBJECTS = dds-test.$(OBJEXT)
 dds_test_OBJECTS = $(am_dds_test_OBJECTS)
 dds_test_DEPENDENCIES = libtest-types.a ../libdapserver.la \
@@ -192,28 +228,58 @@ am_expr_test_OBJECTS = expr-test.$(OBJEXT) ResponseBuilder.$(OBJEXT)
 expr_test_OBJECTS = $(am_expr_test_OBJECTS)
 expr_test_DEPENDENCIES = libtest-types.a ../libdapserver.la \
 	../libdapclient.la ../libdap.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/conf/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(libtest_types_a_SOURCES) $(das_test_SOURCES) \
 	$(dds_test_SOURCES) $(dmr_test_SOURCES) $(expr_test_SOURCES)
 DIST_SOURCES = $(libtest_types_a_SOURCES) $(das_test_SOURCES) \
@@ -225,18 +291,32 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 HEADERS = $(testheaders_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
-am__tty_colors_dummy = \
-  mgn= red= grn= lgn= blu= brg= std=; \
-  am__color_tests=no
-am__tty_colors = $(am__tty_colors_dummy)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -348,6 +428,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -465,6 +546,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -673,9 +755,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -685,6 +769,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -789,12 +874,21 @@ xmlprivatereq = @xmlprivatereq@
 AUTOMAKE_OPTIONS = foreign
 
 # Arrange to build with the backward compatibility mode enabled.
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/GNU -I$(top_srcdir)/d4_ce $(XML2_CFLAGS) $(CURL_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/GNU -I$(top_srcdir)/d4_ce \
+-I$(top_srcdir)/d4_function $(XML2_CFLAGS) $(CURL_CFLAGS)
+
 AM_CXXFLAGS = $(am__append_1) $(am__append_2)
 CXXFLAGS_DEBUG = -g3 -O0  -Wall -W -Wcast-align
 TEST_COV_FLAGS = -ftest-coverage -fprofile-arcs
-TESTS = DASTest DDSTest EXPRTest DMRTest getdapTest
-dist_check_SCRIPTS = DASTest DDSTest EXPRTest DMRTest getdapTest atconfig atlocal
+
+# This will use automake's test envokation code. It's better to use
+# our own so we can pass in flags for autotest, esp --jobs=N to get
+# the autotest tests to run in parallel. See check-local: below.
+
+# TESTS = DASTest DDSTest EXPRTest DMRTest getdapTest
+check_SCRIPTS = $(DASTESTSUITE) $(DDSTESTSUITE) $(EXPRTESTSUITE) \
+	$(DMRTESTSUITE) $(GETDAPTESTSUITE)
+
 
 # Build the test drivers. The drivers all use the
 # subclassed types in Test*.cc and the TestTypesFactory.
@@ -829,27 +923,22 @@ TEST_HDR = TestArray.h TestByte.h TestCommon.h TestFloat32.h TestFloat64.h    \
 DIRS_EXTRA = das-testsuite dds-testsuite expr-testsuite dmr-testsuite \
 	getdap-testsuite
 
-EXTRA_DIST = DASTest.at  $(DASTESTSUITE) DDSTest.at $(DDSTESTSUITE) \
+EXTRA_DIST = DASTest.at $(DASTESTSUITE) DDSTest.at $(DDSTESTSUITE) \
 	EXPRTest.at $(EXPRTESTSUITE) DMRTest.at $(DMRTESTSUITE) \
-	 getdapTest.at getdap-testsuite atlocal.in $(srcdir)/package.m4 $(DIRS_EXTRA)
+	getdapTest.at $(GETDAPTESTSUITE) getdap-testsuite atlocal.in \
+	$(srcdir)/package.m4 $(DIRS_EXTRA)
 
 CLEANFILES = dmr-testsuite.tar.gz
-DISTCLEANFILES = *.log DASTest.dir/* DDSTest.dir/* EXPRTest.dir/* DMRTest.dir/* \
-	getdapTest.dir/*
-
+DISTCLEANFILES = *.log
 
 ############## Autotest follows #####################
 AUTOM4TE = autom4te
+TESTSUITEFLAGS = 
 DASTESTSUITE = $(srcdir)/DASTest
-DASTESTSUITEFLAGS = 
 DDSTESTSUITE = $(srcdir)/DDSTest
-DDSTESTSUITEFLAGS = 
 EXPRTESTSUITE = $(srcdir)/EXPRTest
-EXPRTESTSUITEFLAGS = 
 DMRTESTSUITE = $(srcdir)/DMRTest
-DMRTESTSUITEFLAGS = 
 GETDAPTESTSUITE = $(srcdir)/getdapTest
-GETDAPTESTSUITEFLAGS = 
 AUTOTEST = $(AUTOM4TE) --language=autotest
 all: all-am
 
@@ -918,10 +1007,11 @@ uninstall-libLIBRARIES:
 
 clean-libLIBRARIES:
 	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+
 libtest-types.a: $(libtest_types_a_OBJECTS) $(libtest_types_a_DEPENDENCIES) $(EXTRA_libtest_types_a_DEPENDENCIES) 
-	-rm -f libtest-types.a
-	$(libtest_types_a_AR) libtest-types.a $(libtest_types_a_OBJECTS) $(libtest_types_a_LIBADD)
-	$(RANLIB) libtest-types.a
+	$(AM_V_at)-rm -f libtest-types.a
+	$(AM_V_AR)$(libtest_types_a_AR) libtest-types.a $(libtest_types_a_OBJECTS) $(libtest_types_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libtest-types.a
 
 clean-checkPROGRAMS:
 	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
@@ -931,18 +1021,22 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
+
 das-test$(EXEEXT): $(das_test_OBJECTS) $(das_test_DEPENDENCIES) $(EXTRA_das_test_DEPENDENCIES) 
 	@rm -f das-test$(EXEEXT)
-	$(CXXLINK) $(das_test_OBJECTS) $(das_test_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(das_test_OBJECTS) $(das_test_LDADD) $(LIBS)
+
 dds-test$(EXEEXT): $(dds_test_OBJECTS) $(dds_test_DEPENDENCIES) $(EXTRA_dds_test_DEPENDENCIES) 
 	@rm -f dds-test$(EXEEXT)
-	$(CXXLINK) $(dds_test_OBJECTS) $(dds_test_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(dds_test_OBJECTS) $(dds_test_LDADD) $(LIBS)
+
 dmr-test$(EXEEXT): $(dmr_test_OBJECTS) $(dmr_test_DEPENDENCIES) $(EXTRA_dmr_test_DEPENDENCIES) 
 	@rm -f dmr-test$(EXEEXT)
-	$(CXXLINK) $(dmr_test_OBJECTS) $(dmr_test_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(dmr_test_OBJECTS) $(dmr_test_LDADD) $(LIBS)
+
 expr-test$(EXEEXT): $(expr_test_OBJECTS) $(expr_test_DEPENDENCIES) $(EXTRA_expr_test_DEPENDENCIES) 
 	@rm -f expr-test$(EXEEXT)
-	$(CXXLINK) $(expr_test_OBJECTS) $(expr_test_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(expr_test_OBJECTS) $(expr_test_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -982,361 +1076,361 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libtest_types_a-TestUrl.Po at am__quote@
 
 .cc.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 libtest_types_a-TestByte.o: TestByte.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestByte.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestByte.Tpo -c -o libtest_types_a-TestByte.o `test -f 'TestByte.cc' || echo '$(srcdir)/'`TestByte.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestByte.Tpo $(DEPDIR)/libtest_types_a-TestByte.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestByte.cc' object='libtest_types_a-TestByte.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestByte.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestByte.Tpo -c -o libtest_types_a-TestByte.o `test -f 'TestByte.cc' || echo '$(srcdir)/'`TestByte.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestByte.Tpo $(DEPDIR)/libtest_types_a-TestByte.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestByte.cc' object='libtest_types_a-TestByte.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestByte.o `test -f 'TestByte.cc' || echo '$(srcdir)/'`TestByte.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestByte.o `test -f 'TestByte.cc' || echo '$(srcdir)/'`TestByte.cc
 
 libtest_types_a-TestByte.obj: TestByte.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestByte.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestByte.Tpo -c -o libtest_types_a-TestByte.obj `if test -f 'TestByte.cc'; then $(CYGPATH_W) 'TestByte.cc'; else $(CYGPATH_W) '$(srcdir)/TestByte.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestByte.Tpo $(DEPDIR)/libtest_types_a-TestByte.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestByte.cc' object='libtest_types_a-TestByte.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestByte.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestByte.Tpo -c -o libtest_types_a-TestByte.obj `if test -f 'TestByte.cc'; then $(CYGPATH_W) 'TestByte.cc'; else $(CYGPATH_W) '$(srcdir)/TestByte.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestByte.Tpo $(DEPDIR)/libtest_types_a-TestByte.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestByte.cc' object='libtest_types_a-TestByte.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestByte.obj `if test -f 'TestByte.cc'; then $(CYGPATH_W) 'TestByte.cc'; else $(CYGPATH_W) '$(srcdir)/TestByte.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestByte.obj `if test -f 'TestByte.cc'; then $(CYGPATH_W) 'TestByte.cc'; else $(CYGPATH_W) '$(srcdir)/TestByte.cc'; fi`
 
 libtest_types_a-TestInt32.o: TestInt32.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt32.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt32.Tpo -c -o libtest_types_a-TestInt32.o `test -f 'TestInt32.cc' || echo '$(srcdir)/'`TestInt32.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt32.Tpo $(DEPDIR)/libtest_types_a-TestInt32.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt32.cc' object='libtest_types_a-TestInt32.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt32.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt32.Tpo -c -o libtest_types_a-TestInt32.o `test -f 'TestInt32.cc' || echo '$(srcdir)/'`TestInt32.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt32.Tpo $(DEPDIR)/libtest_types_a-TestInt32.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt32.cc' object='libtest_types_a-TestInt32.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt32.o `test -f 'TestInt32.cc' || echo '$(srcdir)/'`TestInt32.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt32.o `test -f 'TestInt32.cc' || echo '$(srcdir)/'`TestInt32.cc
 
 libtest_types_a-TestInt32.obj: TestInt32.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt32.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt32.Tpo -c -o libtest_types_a-TestInt32.obj `if test -f 'TestInt32.cc'; then $(CYGPATH_W) 'TestInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt32.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt32.Tpo $(DEPDIR)/libtest_types_a-TestInt32.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt32.cc' object='libtest_types_a-TestInt32.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt32.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt32.Tpo -c -o libtest_types_a-TestInt32.obj `if test -f 'TestInt32.cc'; then $(CYGPATH_W) 'TestInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt32.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt32.Tpo $(DEPDIR)/libtest_types_a-TestInt32.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt32.cc' object='libtest_types_a-TestInt32.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt32.obj `if test -f 'TestInt32.cc'; then $(CYGPATH_W) 'TestInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt32.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt32.obj `if test -f 'TestInt32.cc'; then $(CYGPATH_W) 'TestInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt32.cc'; fi`
 
 libtest_types_a-TestFloat64.o: TestFloat64.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat64.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat64.Tpo -c -o libtest_types_a-TestFloat64.o `test -f 'TestFloat64.cc' || echo '$(srcdir)/'`TestFloat64.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat64.Tpo $(DEPDIR)/libtest_types_a-TestFloat64.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestFloat64.cc' object='libtest_types_a-TestFloat64.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat64.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat64.Tpo -c -o libtest_types_a-TestFloat64.o `test -f 'TestFloat64.cc' || echo '$(srcdir)/'`TestFloat64.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat64.Tpo $(DEPDIR)/libtest_types_a-TestFloat64.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestFloat64.cc' object='libtest_types_a-TestFloat64.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat64.o `test -f 'TestFloat64.cc' || echo '$(srcdir)/'`TestFloat64.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat64.o `test -f 'TestFloat64.cc' || echo '$(srcdir)/'`TestFloat64.cc
 
 libtest_types_a-TestFloat64.obj: TestFloat64.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat64.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat64.Tpo -c -o libtest_types_a-TestFloat64.obj `if test -f 'TestFloat64.cc'; then $(CYGPATH_W) 'TestFloat64.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat64.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat64.Tpo $(DEPDIR)/libtest_types_a-TestFloat64.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestFloat64.cc' object='libtest_types_a-TestFloat64.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat64.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat64.Tpo -c -o libtest_types_a-TestFloat64.obj `if test -f 'TestFloat64.cc'; then $(CYGPATH_W) 'TestFloat64.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat64.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat64.Tpo $(DEPDIR)/libtest_types_a-TestFloat64.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestFloat64.cc' object='libtest_types_a-TestFloat64.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat64.obj `if test -f 'TestFloat64.cc'; then $(CYGPATH_W) 'TestFloat64.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat64.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat64.obj `if test -f 'TestFloat64.cc'; then $(CYGPATH_W) 'TestFloat64.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat64.cc'; fi`
 
 libtest_types_a-TestStr.o: TestStr.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStr.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStr.Tpo -c -o libtest_types_a-TestStr.o `test -f 'TestStr.cc' || echo '$(srcdir)/'`TestStr.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestStr.Tpo $(DEPDIR)/libtest_types_a-TestStr.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestStr.cc' object='libtest_types_a-TestStr.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStr.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStr.Tpo -c -o libtest_types_a-TestStr.o `test -f 'TestStr.cc' || echo '$(srcdir)/'`TestStr.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestStr.Tpo $(DEPDIR)/libtest_types_a-TestStr.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestStr.cc' object='libtest_types_a-TestStr.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStr.o `test -f 'TestStr.cc' || echo '$(srcdir)/'`TestStr.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStr.o `test -f 'TestStr.cc' || echo '$(srcdir)/'`TestStr.cc
 
 libtest_types_a-TestStr.obj: TestStr.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStr.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStr.Tpo -c -o libtest_types_a-TestStr.obj `if test -f 'TestStr.cc'; then $(CYGPATH_W) 'TestStr.cc'; else $(CYGPATH_W) '$(srcdir)/TestStr.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestStr.Tpo $(DEPDIR)/libtest_types_a-TestStr.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestStr.cc' object='libtest_types_a-TestStr.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStr.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStr.Tpo -c -o libtest_types_a-TestStr.obj `if test -f 'TestStr.cc'; then $(CYGPATH_W) 'TestStr.cc'; else $(CYGPATH_W) '$(srcdir)/TestStr.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestStr.Tpo $(DEPDIR)/libtest_types_a-TestStr.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestStr.cc' object='libtest_types_a-TestStr.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStr.obj `if test -f 'TestStr.cc'; then $(CYGPATH_W) 'TestStr.cc'; else $(CYGPATH_W) '$(srcdir)/TestStr.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStr.obj `if test -f 'TestStr.cc'; then $(CYGPATH_W) 'TestStr.cc'; else $(CYGPATH_W) '$(srcdir)/TestStr.cc'; fi`
 
 libtest_types_a-TestUrl.o: TestUrl.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUrl.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUrl.Tpo -c -o libtest_types_a-TestUrl.o `test -f 'TestUrl.cc' || echo '$(srcdir)/'`TestUrl.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUrl.Tpo $(DEPDIR)/libtest_types_a-TestUrl.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUrl.cc' object='libtest_types_a-TestUrl.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUrl.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUrl.Tpo -c -o libtest_types_a-TestUrl.o `test -f 'TestUrl.cc' || echo '$(srcdir)/'`TestUrl.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUrl.Tpo $(DEPDIR)/libtest_types_a-TestUrl.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUrl.cc' object='libtest_types_a-TestUrl.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUrl.o `test -f 'TestUrl.cc' || echo '$(srcdir)/'`TestUrl.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUrl.o `test -f 'TestUrl.cc' || echo '$(srcdir)/'`TestUrl.cc
 
 libtest_types_a-TestUrl.obj: TestUrl.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUrl.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUrl.Tpo -c -o libtest_types_a-TestUrl.obj `if test -f 'TestUrl.cc'; then $(CYGPATH_W) 'TestUrl.cc'; else $(CYGPATH_W) '$(srcdir)/TestUrl.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUrl.Tpo $(DEPDIR)/libtest_types_a-TestUrl.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUrl.cc' object='libtest_types_a-TestUrl.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUrl.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUrl.Tpo -c -o libtest_types_a-TestUrl.obj `if test -f 'TestUrl.cc'; then $(CYGPATH_W) 'TestUrl.cc'; else $(CYGPATH_W) '$(srcdir)/TestUrl.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUrl.Tpo $(DEPDIR)/libtest_types_a-TestUrl.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUrl.cc' object='libtest_types_a-TestUrl.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUrl.obj `if test -f 'TestUrl.cc'; then $(CYGPATH_W) 'TestUrl.cc'; else $(CYGPATH_W) '$(srcdir)/TestUrl.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUrl.obj `if test -f 'TestUrl.cc'; then $(CYGPATH_W) 'TestUrl.cc'; else $(CYGPATH_W) '$(srcdir)/TestUrl.cc'; fi`
 
 libtest_types_a-TestArray.o: TestArray.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestArray.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestArray.Tpo -c -o libtest_types_a-TestArray.o `test -f 'TestArray.cc' || echo '$(srcdir)/'`TestArray.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestArray.Tpo $(DEPDIR)/libtest_types_a-TestArray.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestArray.cc' object='libtest_types_a-TestArray.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestArray.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestArray.Tpo -c -o libtest_types_a-TestArray.o `test -f 'TestArray.cc' || echo '$(srcdir)/'`TestArray.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestArray.Tpo $(DEPDIR)/libtest_types_a-TestArray.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestArray.cc' object='libtest_types_a-TestArray.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestArray.o `test -f 'TestArray.cc' || echo '$(srcdir)/'`TestArray.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestArray.o `test -f 'TestArray.cc' || echo '$(srcdir)/'`TestArray.cc
 
 libtest_types_a-TestArray.obj: TestArray.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestArray.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestArray.Tpo -c -o libtest_types_a-TestArray.obj `if test -f 'TestArray.cc'; then $(CYGPATH_W) 'TestArray.cc'; else $(CYGPATH_W) '$(srcdir)/TestArray.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestArray.Tpo $(DEPDIR)/libtest_types_a-TestArray.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestArray.cc' object='libtest_types_a-TestArray.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestArray.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestArray.Tpo -c -o libtest_types_a-TestArray.obj `if test -f 'TestArray.cc'; then $(CYGPATH_W) 'TestArray.cc'; else $(CYGPATH_W) '$(srcdir)/TestArray.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestArray.Tpo $(DEPDIR)/libtest_types_a-TestArray.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestArray.cc' object='libtest_types_a-TestArray.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestArray.obj `if test -f 'TestArray.cc'; then $(CYGPATH_W) 'TestArray.cc'; else $(CYGPATH_W) '$(srcdir)/TestArray.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestArray.obj `if test -f 'TestArray.cc'; then $(CYGPATH_W) 'TestArray.cc'; else $(CYGPATH_W) '$(srcdir)/TestArray.cc'; fi`
 
 libtest_types_a-TestStructure.o: TestStructure.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStructure.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStructure.Tpo -c -o libtest_types_a-TestStructure.o `test -f 'TestStructure.cc' || echo '$(srcdir)/'`TestStructure.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestStructure.Tpo $(DEPDIR)/libtest_types_a-TestStructure.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestStructure.cc' object='libtest_types_a-TestStructure.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStructure.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStructure.Tpo -c -o libtest_types_a-TestStructure.o `test -f 'TestStructure.cc' || echo '$(srcdir)/'`TestStructure.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestStructure.Tpo $(DEPDIR)/libtest_types_a-TestStructure.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestStructure.cc' object='libtest_types_a-TestStructure.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStructure.o `test -f 'TestStructure.cc' || echo '$(srcdir)/'`TestStructure.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStructure.o `test -f 'TestStructure.cc' || echo '$(srcdir)/'`TestStructure.cc
 
 libtest_types_a-TestStructure.obj: TestStructure.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStructure.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStructure.Tpo -c -o libtest_types_a-TestStructure.obj `if test -f 'TestStructure.cc'; then $(CYGPATH_W) 'TestStructure.cc'; else $(CYGPATH_W) '$(srcdir)/TestStructure.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestStructure.Tpo $(DEPDIR)/libtest_types_a-TestStructure.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestStructure.cc' object='libtest_types_a-TestStructure.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestStructure.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestStructure.Tpo -c -o libtest_types_a-TestStructure.obj `if test -f 'TestStructure.cc'; then $(CYGPATH_W) 'TestStructure.cc'; else $(CYGPATH_W) '$(srcdir)/TestStructure.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestStructure.Tpo $(DEPDIR)/libtest_types_a-TestStructure.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestStructure.cc' object='libtest_types_a-TestStructure.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStructure.obj `if test -f 'TestStructure.cc'; then $(CYGPATH_W) 'TestStructure.cc'; else $(CYGPATH_W) '$(srcdir)/TestStructure.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestStructure.obj `if test -f 'TestStructure.cc'; then $(CYGPATH_W) 'TestStructure.cc'; else $(CYGPATH_W) '$(srcdir)/TestStructure.cc'; fi`
 
 libtest_types_a-TestSequence.o: TestSequence.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestSequence.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestSequence.Tpo -c -o libtest_types_a-TestSequence.o `test -f 'TestSequence.cc' || echo '$(srcdir)/'`TestSequence.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestSequence.Tpo $(DEPDIR)/libtest_types_a-TestSequence.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestSequence.cc' object='libtest_types_a-TestSequence.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestSequence.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestSequence.Tpo -c -o libtest_types_a-TestSequence.o `test -f 'TestSequence.cc' || echo '$(srcdir)/'`TestSequence.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestSequence.Tpo $(DEPDIR)/libtest_types_a-TestSequence.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestSequence.cc' object='libtest_types_a-TestSequence.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestSequence.o `test -f 'TestSequence.cc' || echo '$(srcdir)/'`TestSequence.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestSequence.o `test -f 'TestSequence.cc' || echo '$(srcdir)/'`TestSequence.cc
 
 libtest_types_a-TestSequence.obj: TestSequence.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestSequence.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestSequence.Tpo -c -o libtest_types_a-TestSequence.obj `if test -f 'TestSequence.cc'; then $(CYGPATH_W) 'TestSequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestSequence.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestSequence.Tpo $(DEPDIR)/libtest_types_a-TestSequence.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestSequence.cc' object='libtest_types_a-TestSequence.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestSequence.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestSequence.Tpo -c -o libtest_types_a-TestSequence.obj `if test -f 'TestSequence.cc'; then $(CYGPATH_W) 'TestSequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestSequence.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestSequence.Tpo $(DEPDIR)/libtest_types_a-TestSequence.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestSequence.cc' object='libtest_types_a-TestSequence.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestSequence.obj `if test -f 'TestSequence.cc'; then $(CYGPATH_W) 'TestSequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestSequence.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestSequence.obj `if test -f 'TestSequence.cc'; then $(CYGPATH_W) 'TestSequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestSequence.cc'; fi`
 
 libtest_types_a-TestGrid.o: TestGrid.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestGrid.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestGrid.Tpo -c -o libtest_types_a-TestGrid.o `test -f 'TestGrid.cc' || echo '$(srcdir)/'`TestGrid.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestGrid.Tpo $(DEPDIR)/libtest_types_a-TestGrid.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestGrid.cc' object='libtest_types_a-TestGrid.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestGrid.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestGrid.Tpo -c -o libtest_types_a-TestGrid.o `test -f 'TestGrid.cc' || echo '$(srcdir)/'`TestGrid.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestGrid.Tpo $(DEPDIR)/libtest_types_a-TestGrid.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestGrid.cc' object='libtest_types_a-TestGrid.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestGrid.o `test -f 'TestGrid.cc' || echo '$(srcdir)/'`TestGrid.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestGrid.o `test -f 'TestGrid.cc' || echo '$(srcdir)/'`TestGrid.cc
 
 libtest_types_a-TestGrid.obj: TestGrid.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestGrid.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestGrid.Tpo -c -o libtest_types_a-TestGrid.obj `if test -f 'TestGrid.cc'; then $(CYGPATH_W) 'TestGrid.cc'; else $(CYGPATH_W) '$(srcdir)/TestGrid.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestGrid.Tpo $(DEPDIR)/libtest_types_a-TestGrid.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestGrid.cc' object='libtest_types_a-TestGrid.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestGrid.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestGrid.Tpo -c -o libtest_types_a-TestGrid.obj `if test -f 'TestGrid.cc'; then $(CYGPATH_W) 'TestGrid.cc'; else $(CYGPATH_W) '$(srcdir)/TestGrid.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestGrid.Tpo $(DEPDIR)/libtest_types_a-TestGrid.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestGrid.cc' object='libtest_types_a-TestGrid.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestGrid.obj `if test -f 'TestGrid.cc'; then $(CYGPATH_W) 'TestGrid.cc'; else $(CYGPATH_W) '$(srcdir)/TestGrid.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestGrid.obj `if test -f 'TestGrid.cc'; then $(CYGPATH_W) 'TestGrid.cc'; else $(CYGPATH_W) '$(srcdir)/TestGrid.cc'; fi`
 
 libtest_types_a-TestUInt32.o: TestUInt32.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt32.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt32.Tpo -c -o libtest_types_a-TestUInt32.o `test -f 'TestUInt32.cc' || echo '$(srcdir)/'`TestUInt32.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt32.Tpo $(DEPDIR)/libtest_types_a-TestUInt32.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUInt32.cc' object='libtest_types_a-TestUInt32.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt32.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt32.Tpo -c -o libtest_types_a-TestUInt32.o `test -f 'TestUInt32.cc' || echo '$(srcdir)/'`TestUInt32.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt32.Tpo $(DEPDIR)/libtest_types_a-TestUInt32.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUInt32.cc' object='libtest_types_a-TestUInt32.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt32.o `test -f 'TestUInt32.cc' || echo '$(srcdir)/'`TestUInt32.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt32.o `test -f 'TestUInt32.cc' || echo '$(srcdir)/'`TestUInt32.cc
 
 libtest_types_a-TestUInt32.obj: TestUInt32.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt32.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt32.Tpo -c -o libtest_types_a-TestUInt32.obj `if test -f 'TestUInt32.cc'; then $(CYGPATH_W) 'TestUInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt32.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt32.Tpo $(DEPDIR)/libtest_types_a-TestUInt32.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUInt32.cc' object='libtest_types_a-TestUInt32.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt32.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt32.Tpo -c -o libtest_types_a-TestUInt32.obj `if test -f 'TestUInt32.cc'; then $(CYGPATH_W) 'TestUInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt32.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt32.Tpo $(DEPDIR)/libtest_types_a-TestUInt32.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUInt32.cc' object='libtest_types_a-TestUInt32.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt32.obj `if test -f 'TestUInt32.cc'; then $(CYGPATH_W) 'TestUInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt32.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt32.obj `if test -f 'TestUInt32.cc'; then $(CYGPATH_W) 'TestUInt32.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt32.cc'; fi`
 
 libtest_types_a-TestInt16.o: TestInt16.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt16.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt16.Tpo -c -o libtest_types_a-TestInt16.o `test -f 'TestInt16.cc' || echo '$(srcdir)/'`TestInt16.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt16.Tpo $(DEPDIR)/libtest_types_a-TestInt16.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt16.cc' object='libtest_types_a-TestInt16.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt16.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt16.Tpo -c -o libtest_types_a-TestInt16.o `test -f 'TestInt16.cc' || echo '$(srcdir)/'`TestInt16.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt16.Tpo $(DEPDIR)/libtest_types_a-TestInt16.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt16.cc' object='libtest_types_a-TestInt16.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt16.o `test -f 'TestInt16.cc' || echo '$(srcdir)/'`TestInt16.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt16.o `test -f 'TestInt16.cc' || echo '$(srcdir)/'`TestInt16.cc
 
 libtest_types_a-TestInt16.obj: TestInt16.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt16.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt16.Tpo -c -o libtest_types_a-TestInt16.obj `if test -f 'TestInt16.cc'; then $(CYGPATH_W) 'TestInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt16.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt16.Tpo $(DEPDIR)/libtest_types_a-TestInt16.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt16.cc' object='libtest_types_a-TestInt16.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt16.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt16.Tpo -c -o libtest_types_a-TestInt16.obj `if test -f 'TestInt16.cc'; then $(CYGPATH_W) 'TestInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt16.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt16.Tpo $(DEPDIR)/libtest_types_a-TestInt16.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt16.cc' object='libtest_types_a-TestInt16.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt16.obj `if test -f 'TestInt16.cc'; then $(CYGPATH_W) 'TestInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt16.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt16.obj `if test -f 'TestInt16.cc'; then $(CYGPATH_W) 'TestInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt16.cc'; fi`
 
 libtest_types_a-TestUInt16.o: TestUInt16.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt16.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt16.Tpo -c -o libtest_types_a-TestUInt16.o `test -f 'TestUInt16.cc' || echo '$(srcdir)/'`TestUInt16.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt16.Tpo $(DEPDIR)/libtest_types_a-TestUInt16.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUInt16.cc' object='libtest_types_a-TestUInt16.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt16.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt16.Tpo -c -o libtest_types_a-TestUInt16.o `test -f 'TestUInt16.cc' || echo '$(srcdir)/'`TestUInt16.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt16.Tpo $(DEPDIR)/libtest_types_a-TestUInt16.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUInt16.cc' object='libtest_types_a-TestUInt16.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt16.o `test -f 'TestUInt16.cc' || echo '$(srcdir)/'`TestUInt16.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt16.o `test -f 'TestUInt16.cc' || echo '$(srcdir)/'`TestUInt16.cc
 
 libtest_types_a-TestUInt16.obj: TestUInt16.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt16.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt16.Tpo -c -o libtest_types_a-TestUInt16.obj `if test -f 'TestUInt16.cc'; then $(CYGPATH_W) 'TestUInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt16.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt16.Tpo $(DEPDIR)/libtest_types_a-TestUInt16.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUInt16.cc' object='libtest_types_a-TestUInt16.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt16.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt16.Tpo -c -o libtest_types_a-TestUInt16.obj `if test -f 'TestUInt16.cc'; then $(CYGPATH_W) 'TestUInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt16.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt16.Tpo $(DEPDIR)/libtest_types_a-TestUInt16.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUInt16.cc' object='libtest_types_a-TestUInt16.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt16.obj `if test -f 'TestUInt16.cc'; then $(CYGPATH_W) 'TestUInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt16.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt16.obj `if test -f 'TestUInt16.cc'; then $(CYGPATH_W) 'TestUInt16.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt16.cc'; fi`
 
 libtest_types_a-TestFloat32.o: TestFloat32.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat32.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat32.Tpo -c -o libtest_types_a-TestFloat32.o `test -f 'TestFloat32.cc' || echo '$(srcdir)/'`TestFloat32.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat32.Tpo $(DEPDIR)/libtest_types_a-TestFloat32.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestFloat32.cc' object='libtest_types_a-TestFloat32.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat32.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat32.Tpo -c -o libtest_types_a-TestFloat32.o `test -f 'TestFloat32.cc' || echo '$(srcdir)/'`TestFloat32.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat32.Tpo $(DEPDIR)/libtest_types_a-TestFloat32.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestFloat32.cc' object='libtest_types_a-TestFloat32.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat32.o `test -f 'TestFloat32.cc' || echo '$(srcdir)/'`TestFloat32.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat32.o `test -f 'TestFloat32.cc' || echo '$(srcdir)/'`TestFloat32.cc
 
 libtest_types_a-TestFloat32.obj: TestFloat32.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat32.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat32.Tpo -c -o libtest_types_a-TestFloat32.obj `if test -f 'TestFloat32.cc'; then $(CYGPATH_W) 'TestFloat32.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat32.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat32.Tpo $(DEPDIR)/libtest_types_a-TestFloat32.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestFloat32.cc' object='libtest_types_a-TestFloat32.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFloat32.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFloat32.Tpo -c -o libtest_types_a-TestFloat32.obj `if test -f 'TestFloat32.cc'; then $(CYGPATH_W) 'TestFloat32.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat32.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestFloat32.Tpo $(DEPDIR)/libtest_types_a-TestFloat32.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestFloat32.cc' object='libtest_types_a-TestFloat32.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat32.obj `if test -f 'TestFloat32.cc'; then $(CYGPATH_W) 'TestFloat32.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat32.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFloat32.obj `if test -f 'TestFloat32.cc'; then $(CYGPATH_W) 'TestFloat32.cc'; else $(CYGPATH_W) '$(srcdir)/TestFloat32.cc'; fi`
 
 libtest_types_a-TestTypeFactory.o: TestTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestTypeFactory.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo -c -o libtest_types_a-TestTypeFactory.o `test -f 'TestTypeFactory.cc' || echo '$(srcdir)/'`TestTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-TestTypeFactory.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestTypeFactory.cc' object='libtest_types_a-TestTypeFactory.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestTypeFactory.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo -c -o libtest_types_a-TestTypeFactory.o `test -f 'TestTypeFactory.cc' || echo '$(srcdir)/'`TestTypeFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-TestTypeFactory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestTypeFactory.cc' object='libtest_types_a-TestTypeFactory.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestTypeFactory.o `test -f 'TestTypeFactory.cc' || echo '$(srcdir)/'`TestTypeFactory.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestTypeFactory.o `test -f 'TestTypeFactory.cc' || echo '$(srcdir)/'`TestTypeFactory.cc
 
 libtest_types_a-TestTypeFactory.obj: TestTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestTypeFactory.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo -c -o libtest_types_a-TestTypeFactory.obj `if test -f 'TestTypeFactory.cc'; then $(CYGPATH_W) 'TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/TestTypeFactory.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-TestTypeFactory.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestTypeFactory.cc' object='libtest_types_a-TestTypeFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestTypeFactory.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo -c -o libtest_types_a-TestTypeFactory.obj `if test -f 'TestTypeFactory.cc'; then $(CYGPATH_W) 'TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/TestTypeFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-TestTypeFactory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestTypeFactory.cc' object='libtest_types_a-TestTypeFactory.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestTypeFactory.obj `if test -f 'TestTypeFactory.cc'; then $(CYGPATH_W) 'TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/TestTypeFactory.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestTypeFactory.obj `if test -f 'TestTypeFactory.cc'; then $(CYGPATH_W) 'TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/TestTypeFactory.cc'; fi`
 
 libtest_types_a-D4TestTypeFactory.o: D4TestTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestTypeFactory.o -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo -c -o libtest_types_a-D4TestTypeFactory.o `test -f 'D4TestTypeFactory.cc' || echo '$(srcdir)/'`D4TestTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4TestTypeFactory.cc' object='libtest_types_a-D4TestTypeFactory.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestTypeFactory.o -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo -c -o libtest_types_a-D4TestTypeFactory.o `test -f 'D4TestTypeFactory.cc' || echo '$(srcdir)/'`D4TestTypeFactory.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4TestTypeFactory.cc' object='libtest_types_a-D4TestTypeFactory.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestTypeFactory.o `test -f 'D4TestTypeFactory.cc' || echo '$(srcdir)/'`D4TestTypeFactory.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestTypeFactory.o `test -f 'D4TestTypeFactory.cc' || echo '$(srcdir)/'`D4TestTypeFactory.cc
 
 libtest_types_a-D4TestTypeFactory.obj: D4TestTypeFactory.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestTypeFactory.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo -c -o libtest_types_a-D4TestTypeFactory.obj `if test -f 'D4TestTypeFactory.cc'; then $(CYGPATH_W) 'D4TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestTypeFactory.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4TestTypeFactory.cc' object='libtest_types_a-D4TestTypeFactory.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestTypeFactory.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo -c -o libtest_types_a-D4TestTypeFactory.obj `if test -f 'D4TestTypeFactory.cc'; then $(CYGPATH_W) 'D4TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestTypeFactory.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Tpo $(DEPDIR)/libtest_types_a-D4TestTypeFactory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4TestTypeFactory.cc' object='libtest_types_a-D4TestTypeFactory.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestTypeFactory.obj `if test -f 'D4TestTypeFactory.cc'; then $(CYGPATH_W) 'D4TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestTypeFactory.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestTypeFactory.obj `if test -f 'D4TestTypeFactory.cc'; then $(CYGPATH_W) 'D4TestTypeFactory.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestTypeFactory.cc'; fi`
 
 libtest_types_a-TestD4Group.o: TestD4Group.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Group.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Group.Tpo -c -o libtest_types_a-TestD4Group.o `test -f 'TestD4Group.cc' || echo '$(srcdir)/'`TestD4Group.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Group.Tpo $(DEPDIR)/libtest_types_a-TestD4Group.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Group.cc' object='libtest_types_a-TestD4Group.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Group.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Group.Tpo -c -o libtest_types_a-TestD4Group.o `test -f 'TestD4Group.cc' || echo '$(srcdir)/'`TestD4Group.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Group.Tpo $(DEPDIR)/libtest_types_a-TestD4Group.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Group.cc' object='libtest_types_a-TestD4Group.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Group.o `test -f 'TestD4Group.cc' || echo '$(srcdir)/'`TestD4Group.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Group.o `test -f 'TestD4Group.cc' || echo '$(srcdir)/'`TestD4Group.cc
 
 libtest_types_a-TestD4Group.obj: TestD4Group.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Group.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Group.Tpo -c -o libtest_types_a-TestD4Group.obj `if test -f 'TestD4Group.cc'; then $(CYGPATH_W) 'TestD4Group.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Group.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Group.Tpo $(DEPDIR)/libtest_types_a-TestD4Group.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Group.cc' object='libtest_types_a-TestD4Group.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Group.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Group.Tpo -c -o libtest_types_a-TestD4Group.obj `if test -f 'TestD4Group.cc'; then $(CYGPATH_W) 'TestD4Group.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Group.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Group.Tpo $(DEPDIR)/libtest_types_a-TestD4Group.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Group.cc' object='libtest_types_a-TestD4Group.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Group.obj `if test -f 'TestD4Group.cc'; then $(CYGPATH_W) 'TestD4Group.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Group.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Group.obj `if test -f 'TestD4Group.cc'; then $(CYGPATH_W) 'TestD4Group.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Group.cc'; fi`
 
 libtest_types_a-TestInt8.o: TestInt8.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt8.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt8.Tpo -c -o libtest_types_a-TestInt8.o `test -f 'TestInt8.cc' || echo '$(srcdir)/'`TestInt8.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt8.Tpo $(DEPDIR)/libtest_types_a-TestInt8.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt8.cc' object='libtest_types_a-TestInt8.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt8.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt8.Tpo -c -o libtest_types_a-TestInt8.o `test -f 'TestInt8.cc' || echo '$(srcdir)/'`TestInt8.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt8.Tpo $(DEPDIR)/libtest_types_a-TestInt8.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt8.cc' object='libtest_types_a-TestInt8.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt8.o `test -f 'TestInt8.cc' || echo '$(srcdir)/'`TestInt8.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt8.o `test -f 'TestInt8.cc' || echo '$(srcdir)/'`TestInt8.cc
 
 libtest_types_a-TestInt8.obj: TestInt8.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt8.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt8.Tpo -c -o libtest_types_a-TestInt8.obj `if test -f 'TestInt8.cc'; then $(CYGPATH_W) 'TestInt8.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt8.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt8.Tpo $(DEPDIR)/libtest_types_a-TestInt8.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt8.cc' object='libtest_types_a-TestInt8.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt8.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt8.Tpo -c -o libtest_types_a-TestInt8.obj `if test -f 'TestInt8.cc'; then $(CYGPATH_W) 'TestInt8.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt8.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt8.Tpo $(DEPDIR)/libtest_types_a-TestInt8.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt8.cc' object='libtest_types_a-TestInt8.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt8.obj `if test -f 'TestInt8.cc'; then $(CYGPATH_W) 'TestInt8.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt8.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt8.obj `if test -f 'TestInt8.cc'; then $(CYGPATH_W) 'TestInt8.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt8.cc'; fi`
 
 libtest_types_a-TestInt64.o: TestInt64.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt64.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt64.Tpo -c -o libtest_types_a-TestInt64.o `test -f 'TestInt64.cc' || echo '$(srcdir)/'`TestInt64.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt64.Tpo $(DEPDIR)/libtest_types_a-TestInt64.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt64.cc' object='libtest_types_a-TestInt64.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt64.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt64.Tpo -c -o libtest_types_a-TestInt64.o `test -f 'TestInt64.cc' || echo '$(srcdir)/'`TestInt64.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt64.Tpo $(DEPDIR)/libtest_types_a-TestInt64.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt64.cc' object='libtest_types_a-TestInt64.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt64.o `test -f 'TestInt64.cc' || echo '$(srcdir)/'`TestInt64.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt64.o `test -f 'TestInt64.cc' || echo '$(srcdir)/'`TestInt64.cc
 
 libtest_types_a-TestInt64.obj: TestInt64.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt64.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt64.Tpo -c -o libtest_types_a-TestInt64.obj `if test -f 'TestInt64.cc'; then $(CYGPATH_W) 'TestInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt64.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestInt64.Tpo $(DEPDIR)/libtest_types_a-TestInt64.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestInt64.cc' object='libtest_types_a-TestInt64.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestInt64.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestInt64.Tpo -c -o libtest_types_a-TestInt64.obj `if test -f 'TestInt64.cc'; then $(CYGPATH_W) 'TestInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt64.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestInt64.Tpo $(DEPDIR)/libtest_types_a-TestInt64.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestInt64.cc' object='libtest_types_a-TestInt64.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt64.obj `if test -f 'TestInt64.cc'; then $(CYGPATH_W) 'TestInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt64.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestInt64.obj `if test -f 'TestInt64.cc'; then $(CYGPATH_W) 'TestInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestInt64.cc'; fi`
 
 libtest_types_a-TestUInt64.o: TestUInt64.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt64.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt64.Tpo -c -o libtest_types_a-TestUInt64.o `test -f 'TestUInt64.cc' || echo '$(srcdir)/'`TestUInt64.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt64.Tpo $(DEPDIR)/libtest_types_a-TestUInt64.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUInt64.cc' object='libtest_types_a-TestUInt64.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt64.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt64.Tpo -c -o libtest_types_a-TestUInt64.o `test -f 'TestUInt64.cc' || echo '$(srcdir)/'`TestUInt64.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt64.Tpo $(DEPDIR)/libtest_types_a-TestUInt64.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUInt64.cc' object='libtest_types_a-TestUInt64.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt64.o `test -f 'TestUInt64.cc' || echo '$(srcdir)/'`TestUInt64.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt64.o `test -f 'TestUInt64.cc' || echo '$(srcdir)/'`TestUInt64.cc
 
 libtest_types_a-TestUInt64.obj: TestUInt64.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt64.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt64.Tpo -c -o libtest_types_a-TestUInt64.obj `if test -f 'TestUInt64.cc'; then $(CYGPATH_W) 'TestUInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt64.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt64.Tpo $(DEPDIR)/libtest_types_a-TestUInt64.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestUInt64.cc' object='libtest_types_a-TestUInt64.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestUInt64.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestUInt64.Tpo -c -o libtest_types_a-TestUInt64.obj `if test -f 'TestUInt64.cc'; then $(CYGPATH_W) 'TestUInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt64.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestUInt64.Tpo $(DEPDIR)/libtest_types_a-TestUInt64.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestUInt64.cc' object='libtest_types_a-TestUInt64.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt64.obj `if test -f 'TestUInt64.cc'; then $(CYGPATH_W) 'TestUInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt64.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestUInt64.obj `if test -f 'TestUInt64.cc'; then $(CYGPATH_W) 'TestUInt64.cc'; else $(CYGPATH_W) '$(srcdir)/TestUInt64.cc'; fi`
 
 libtest_types_a-TestD4Sequence.o: TestD4Sequence.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Sequence.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo -c -o libtest_types_a-TestD4Sequence.o `test -f 'TestD4Sequence.cc' || echo '$(srcdir)/'`TestD4Sequence.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo $(DEPDIR)/libtest_types_a-TestD4Sequence.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Sequence.cc' object='libtest_types_a-TestD4Sequence.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Sequence.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo -c -o libtest_types_a-TestD4Sequence.o `test -f 'TestD4Sequence.cc' || echo '$(srcdir)/'`TestD4Sequence.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo $(DEPDIR)/libtest_types_a-TestD4Sequence.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Sequence.cc' object='libtest_types_a-TestD4Sequence.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Sequence.o `test -f 'TestD4Sequence.cc' || echo '$(srcdir)/'`TestD4Sequence.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Sequence.o `test -f 'TestD4Sequence.cc' || echo '$(srcdir)/'`TestD4Sequence.cc
 
 libtest_types_a-TestD4Sequence.obj: TestD4Sequence.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Sequence.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo -c -o libtest_types_a-TestD4Sequence.obj `if test -f 'TestD4Sequence.cc'; then $(CYGPATH_W) 'TestD4Sequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Sequence.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo $(DEPDIR)/libtest_types_a-TestD4Sequence.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Sequence.cc' object='libtest_types_a-TestD4Sequence.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Sequence.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo -c -o libtest_types_a-TestD4Sequence.obj `if test -f 'TestD4Sequence.cc'; then $(CYGPATH_W) 'TestD4Sequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Sequence.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Sequence.Tpo $(DEPDIR)/libtest_types_a-TestD4Sequence.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Sequence.cc' object='libtest_types_a-TestD4Sequence.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Sequence.obj `if test -f 'TestD4Sequence.cc'; then $(CYGPATH_W) 'TestD4Sequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Sequence.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Sequence.obj `if test -f 'TestD4Sequence.cc'; then $(CYGPATH_W) 'TestD4Sequence.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Sequence.cc'; fi`
 
 libtest_types_a-TestD4Enum.o: TestD4Enum.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Enum.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo -c -o libtest_types_a-TestD4Enum.o `test -f 'TestD4Enum.cc' || echo '$(srcdir)/'`TestD4Enum.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo $(DEPDIR)/libtest_types_a-TestD4Enum.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Enum.cc' object='libtest_types_a-TestD4Enum.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Enum.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo -c -o libtest_types_a-TestD4Enum.o `test -f 'TestD4Enum.cc' || echo '$(srcdir)/'`TestD4Enum.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo $(DEPDIR)/libtest_types_a-TestD4Enum.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Enum.cc' object='libtest_types_a-TestD4Enum.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Enum.o `test -f 'TestD4Enum.cc' || echo '$(srcdir)/'`TestD4Enum.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Enum.o `test -f 'TestD4Enum.cc' || echo '$(srcdir)/'`TestD4Enum.cc
 
 libtest_types_a-TestD4Enum.obj: TestD4Enum.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Enum.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo -c -o libtest_types_a-TestD4Enum.obj `if test -f 'TestD4Enum.cc'; then $(CYGPATH_W) 'TestD4Enum.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Enum.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo $(DEPDIR)/libtest_types_a-TestD4Enum.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Enum.cc' object='libtest_types_a-TestD4Enum.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Enum.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo -c -o libtest_types_a-TestD4Enum.obj `if test -f 'TestD4Enum.cc'; then $(CYGPATH_W) 'TestD4Enum.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Enum.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Enum.Tpo $(DEPDIR)/libtest_types_a-TestD4Enum.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Enum.cc' object='libtest_types_a-TestD4Enum.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Enum.obj `if test -f 'TestD4Enum.cc'; then $(CYGPATH_W) 'TestD4Enum.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Enum.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Enum.obj `if test -f 'TestD4Enum.cc'; then $(CYGPATH_W) 'TestD4Enum.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Enum.cc'; fi`
 
 libtest_types_a-TestD4Opaque.o: TestD4Opaque.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Opaque.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo -c -o libtest_types_a-TestD4Opaque.o `test -f 'TestD4Opaque.cc' || echo '$(srcdir)/'`TestD4Opaque.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo $(DEPDIR)/libtest_types_a-TestD4Opaque.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Opaque.cc' object='libtest_types_a-TestD4Opaque.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Opaque.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo -c -o libtest_types_a-TestD4Opaque.o `test -f 'TestD4Opaque.cc' || echo '$(srcdir)/'`TestD4Opaque.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo $(DEPDIR)/libtest_types_a-TestD4Opaque.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Opaque.cc' object='libtest_types_a-TestD4Opaque.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Opaque.o `test -f 'TestD4Opaque.cc' || echo '$(srcdir)/'`TestD4Opaque.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Opaque.o `test -f 'TestD4Opaque.cc' || echo '$(srcdir)/'`TestD4Opaque.cc
 
 libtest_types_a-TestD4Opaque.obj: TestD4Opaque.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Opaque.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo -c -o libtest_types_a-TestD4Opaque.obj `if test -f 'TestD4Opaque.cc'; then $(CYGPATH_W) 'TestD4Opaque.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Opaque.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo $(DEPDIR)/libtest_types_a-TestD4Opaque.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestD4Opaque.cc' object='libtest_types_a-TestD4Opaque.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestD4Opaque.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo -c -o libtest_types_a-TestD4Opaque.obj `if test -f 'TestD4Opaque.cc'; then $(CYGPATH_W) 'TestD4Opaque.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Opaque.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestD4Opaque.Tpo $(DEPDIR)/libtest_types_a-TestD4Opaque.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestD4Opaque.cc' object='libtest_types_a-TestD4Opaque.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Opaque.obj `if test -f 'TestD4Opaque.cc'; then $(CYGPATH_W) 'TestD4Opaque.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Opaque.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestD4Opaque.obj `if test -f 'TestD4Opaque.cc'; then $(CYGPATH_W) 'TestD4Opaque.cc'; else $(CYGPATH_W) '$(srcdir)/TestD4Opaque.cc'; fi`
 
 libtest_types_a-TestFunction.o: TestFunction.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFunction.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFunction.Tpo -c -o libtest_types_a-TestFunction.o `test -f 'TestFunction.cc' || echo '$(srcdir)/'`TestFunction.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestFunction.Tpo $(DEPDIR)/libtest_types_a-TestFunction.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestFunction.cc' object='libtest_types_a-TestFunction.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFunction.o -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFunction.Tpo -c -o libtest_types_a-TestFunction.o `test -f 'TestFunction.cc' || echo '$(srcdir)/'`TestFunction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestFunction.Tpo $(DEPDIR)/libtest_types_a-TestFunction.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestFunction.cc' object='libtest_types_a-TestFunction.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFunction.o `test -f 'TestFunction.cc' || echo '$(srcdir)/'`TestFunction.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFunction.o `test -f 'TestFunction.cc' || echo '$(srcdir)/'`TestFunction.cc
 
 libtest_types_a-TestFunction.obj: TestFunction.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFunction.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFunction.Tpo -c -o libtest_types_a-TestFunction.obj `if test -f 'TestFunction.cc'; then $(CYGPATH_W) 'TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/TestFunction.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-TestFunction.Tpo $(DEPDIR)/libtest_types_a-TestFunction.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='TestFunction.cc' object='libtest_types_a-TestFunction.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-TestFunction.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-TestFunction.Tpo -c -o libtest_types_a-TestFunction.obj `if test -f 'TestFunction.cc'; then $(CYGPATH_W) 'TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/TestFunction.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-TestFunction.Tpo $(DEPDIR)/libtest_types_a-TestFunction.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='TestFunction.cc' object='libtest_types_a-TestFunction.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFunction.obj `if test -f 'TestFunction.cc'; then $(CYGPATH_W) 'TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/TestFunction.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-TestFunction.obj `if test -f 'TestFunction.cc'; then $(CYGPATH_W) 'TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/TestFunction.cc'; fi`
 
 libtest_types_a-D4TestFunction.o: D4TestFunction.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestFunction.o -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo -c -o libtest_types_a-D4TestFunction.o `test -f 'D4TestFunction.cc' || echo '$(srcdir)/'`D4TestFunction.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo $(DEPDIR)/libtest_types_a-D4TestFunction.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4TestFunction.cc' object='libtest_types_a-D4TestFunction.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestFunction.o -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo -c -o libtest_types_a-D4TestFunction.o `test -f 'D4TestFunction.cc' || echo '$(srcdir)/'`D4TestFunction.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo $(DEPDIR)/libtest_types_a-D4TestFunction.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4TestFunction.cc' object='libtest_types_a-D4TestFunction.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestFunction.o `test -f 'D4TestFunction.cc' || echo '$(srcdir)/'`D4TestFunction.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestFunction.o `test -f 'D4TestFunction.cc' || echo '$(srcdir)/'`D4TestFunction.cc
 
 libtest_types_a-D4TestFunction.obj: D4TestFunction.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestFunction.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo -c -o libtest_types_a-D4TestFunction.obj `if test -f 'D4TestFunction.cc'; then $(CYGPATH_W) 'D4TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestFunction.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo $(DEPDIR)/libtest_types_a-D4TestFunction.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='D4TestFunction.cc' object='libtest_types_a-D4TestFunction.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -MT libtest_types_a-D4TestFunction.obj -MD -MP -MF $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo -c -o libtest_types_a-D4TestFunction.obj `if test -f 'D4TestFunction.cc'; then $(CYGPATH_W) 'D4TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestFunction.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libtest_types_a-D4TestFunction.Tpo $(DEPDIR)/libtest_types_a-D4TestFunction.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='D4TestFunction.cc' object='libtest_types_a-D4TestFunction.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestFunction.obj `if test -f 'D4TestFunction.cc'; then $(CYGPATH_W) 'D4TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestFunction.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_types_a_CXXFLAGS) $(CXXFLAGS) -c -o libtest_types_a-D4TestFunction.obj `if test -f 'D4TestFunction.cc'; then $(CYGPATH_W) 'D4TestFunction.cc'; else $(CYGPATH_W) '$(srcdir)/D4TestFunction.cc'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -1365,26 +1459,15 @@ uninstall-testheadersHEADERS:
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(testheadersdir)'; $(am__uninstall_files_from_dir)
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -1396,15 +1479,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -1413,9 +1492,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -1431,99 +1511,6 @@ cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-check-TESTS: $(TESTS)
-	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
-	srcdir=$(srcdir); export srcdir; \
-	list=' $(TESTS) '; \
-	$(am__tty_colors); \
-	if test -n "$$list"; then \
-	  for tst in $$list; do \
-	    if test -f ./$$tst; then dir=./; \
-	    elif test -f $$tst; then dir=; \
-	    else dir="$(srcdir)/"; fi; \
-	    if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *[\ \	]$$tst[\ \	]*) \
-		xpass=`expr $$xpass + 1`; \
-		failed=`expr $$failed + 1`; \
-		col=$$red; res=XPASS; \
-	      ;; \
-	      *) \
-		col=$$grn; res=PASS; \
-	      ;; \
-	      esac; \
-	    elif test $$? -ne 77; then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *[\ \	]$$tst[\ \	]*) \
-		xfail=`expr $$xfail + 1`; \
-		col=$$lgn; res=XFAIL; \
-	      ;; \
-	      *) \
-		failed=`expr $$failed + 1`; \
-		col=$$red; res=FAIL; \
-	      ;; \
-	      esac; \
-	    else \
-	      skip=`expr $$skip + 1`; \
-	      col=$$blu; res=SKIP; \
-	    fi; \
-	    echo "$${col}$$res$${std}: $$tst"; \
-	  done; \
-	  if test "$$all" -eq 1; then \
-	    tests="test"; \
-	    All=""; \
-	  else \
-	    tests="tests"; \
-	    All="All "; \
-	  fi; \
-	  if test "$$failed" -eq 0; then \
-	    if test "$$xfail" -eq 0; then \
-	      banner="$$All$$all $$tests passed"; \
-	    else \
-	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
-	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
-	    fi; \
-	  else \
-	    if test "$$xpass" -eq 0; then \
-	      banner="$$failed of $$all $$tests failed"; \
-	    else \
-	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
-	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
-	    fi; \
-	  fi; \
-	  dashes="$$banner"; \
-	  skipped=""; \
-	  if test "$$skip" -ne 0; then \
-	    if test "$$skip" -eq 1; then \
-	      skipped="($$skip test was not run)"; \
-	    else \
-	      skipped="($$skip tests were not run)"; \
-	    fi; \
-	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$skipped"; \
-	  fi; \
-	  report=""; \
-	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-	    report="Please report to $(PACKAGE_BUGREPORT)"; \
-	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$report"; \
-	  fi; \
-	  dashes=`echo "$$dashes" | sed s/./=/g`; \
-	  if test "$$failed" -eq 0; then \
-	    col="$$grn"; \
-	  else \
-	    col="$$red"; \
-	  fi; \
-	  echo "$${col}$$dashes$${std}"; \
-	  echo "$${col}$$banner$${std}"; \
-	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
-	  test -z "$$report" || echo "$${col}$$report$${std}"; \
-	  echo "$${col}$$dashes$${std}"; \
-	  test "$$failed" -eq 0; \
-	else :; fi
-
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -1555,9 +1542,8 @@ distdir: $(DISTFILES)
 	  fi; \
 	done
 check-am: all-am
-	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
-	  $(dist_check_SCRIPTS)
-	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-local
 check: check-am
 all-am: Makefile $(LIBRARIES) $(HEADERS)
 installdirs:
@@ -1669,28 +1655,41 @@ uninstall-am: uninstall-libLIBRARIES uninstall-testheadersHEADERS
 
 .MAKE: check-am install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
 	clean-checkPROGRAMS clean-generic clean-libLIBRARIES \
-	clean-libtool clean-local cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-local distclean-tags distdir dvi dvi-am html html-am \
-	info info-am install install-am install-data install-data-am \
-	install-dvi install-dvi-am install-exec install-exec-am \
-	install-html install-html-am install-info install-info-am \
-	install-libLIBRARIES install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip \
-	install-testheadersHEADERS installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-libLIBRARIES \
+	clean-libtool clean-local cscopelist-am ctags ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-local distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-libLIBRARIES install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-testheadersHEADERS installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am uninstall-libLIBRARIES \
 	uninstall-testheadersHEADERS
 
 
+# DASTest.dir/* DDSTest.dir/* EXPRTest.dir/* DMRTest.dir/* getdapTest.dir/*
+
 dmr-testsuite.tar.gz: dmr-testsuite/*.xml
 	tar -czf $@ $^
 
+check-local: atconfig atlocal $(DASTESTSUITE) $(DDSTESTSUITE) \
+$(EXPRTESTSUITE) $(DMRTESTSUITE) $(GETDAPTESTSUITE) 
+	$(SHELL) '$(DASTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(DDSTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(EXPRTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(DMRTESTSUITE)' $(TESTSUITEFLAGS)
+	$(SHELL) '$(GETDAPTESTSUITE)' $(TESTSUITEFLAGS)
+
 # Make sure there are no spaces after the DASTESTSUITE names. jhrg 3/16/15
+# Delete the scripts here and not using CLEANFILES because this target is
+# run after the 'regular' clean: and we need the test scripts to run their
+# --clean option. Once that's done, then remove them. 
 clean-local:
 	test ! -f '$(DASTESTSUITE)' || $(SHELL) $(DASTESTSUITE) --clean
 	test ! -f '$(DDSTESTSUITE)' || $(SHELL) $(DDSTESTSUITE) --clean
diff --git a/tests/ResponseBuilder.cc b/tests/ResponseBuilder.cc
index 0c4c561..dd3a784 100644
--- a/tests/ResponseBuilder.cc
+++ b/tests/ResponseBuilder.cc
@@ -27,7 +27,14 @@
 #include <signal.h>
 #include <unistd.h>
 #include <sys/stat.h>
+
+#ifdef HAVE_UUID_UUID_H
 #include <uuid/uuid.h>  // used to build CID header value for data ddx
+#elif defined(HAVE_UUID_H)
+#include <uuid.h>
+#else
+#error "Could not find UUID library header"
+#endif
 
 #ifndef WIN32
 #include <sys/wait.h>
diff --git a/tests/TestArray.cc b/tests/TestArray.cc
index e651b05..6e619ae 100644
--- a/tests/TestArray.cc
+++ b/tests/TestArray.cc
@@ -90,17 +90,17 @@ TestArray::ptr_duplicate()
 }
 
 TestArray::TestArray(const string &n, BaseType *v, bool is_dap4) :
-    Array(n, v, is_dap4), d_series_values(false)
+        Array(n, v, is_dap4), d_series_values(false)
 {
 }
 
 TestArray::TestArray(const string &n, const string &d, BaseType *v, bool is_dap4) :
-    Array(n, d, v, is_dap4), d_series_values(false)
+        Array(n, d, v, is_dap4), d_series_values(false)
 {
 }
 
 TestArray::TestArray(const TestArray &rhs) :
-    Array(rhs), TestCommon(rhs)
+        Array(rhs), TestCommon(rhs)
 {
     _duplicate(rhs);
 }
@@ -112,17 +112,15 @@ TestArray::~TestArray()
 TestArray &
 TestArray::operator=(const TestArray &rhs)
 {
-    if (this == &rhs)
-        return *this;
+    if (this == &rhs) return *this;
 
-    dynamic_cast<Array &> (*this) = rhs;
+    dynamic_cast<Array &>(*this) = rhs;
 
     _duplicate(rhs);
 
     return *this;
 }
 
-
 // This code calls 'output_values()' because print_val() does not test
 // the value of send_p(). We need to wrap a method around the calls to
 // print_val() to ensure that only values for variables with send_p() set
@@ -136,10 +134,10 @@ unsigned int TestArray::m_print_array(ostream &out, unsigned int index, unsigned
     if (dims == 1) {
         out << "{";
         for (unsigned i = 0; i < shape[0] - 1; ++i) {
-            dynamic_cast<TestCommon&> (*var(index++)).output_values(out);
+            dynamic_cast<TestCommon&>(*var(index++)).output_values(out);
             out << ", ";
         }
-        dynamic_cast<TestCommon&> (*var(index++)).output_values(out);
+        dynamic_cast<TestCommon&>(*var(index++)).output_values(out);
         out << "}";
 
         return index;
@@ -165,15 +163,17 @@ unsigned int TestArray::m_print_array(ostream &out, unsigned int index, unsigned
 
 void TestArray::output_values(std::ostream &out)
 {
-    unsigned int *shape = new unsigned int[dimensions(true)];
+    //unsigned int *shape = new unsigned int[dimensions(true)];
+
+    vector<unsigned int> shape(dimensions(true));
     unsigned int index = 0;
     for (Dim_iter i = dim_begin(); i != dim_end() && index < dimensions(true); ++i)
         shape[index++] = dimension_size(i, true);
 
-    m_print_array(out, 0, dimensions(true), shape);
+    m_print_array(out, 0, dimensions(true), &shape[0]);
 
-    delete[] shape;
-    shape = 0;
+    //delete[] shape;
+    //shape = 0;
 }
 
 /** Special names are ones that start with 'lat' or 'lon'. These indicate
@@ -188,27 +188,30 @@ void TestArray::m_build_special_values()
 {
     if (name().find("lat_reversed") != string::npos) {
         int array_len = length();
-        double *lat_data = new double[array_len];
+        //double *lat_data = new double[array_len];
+        vector<double> lat_data(array_len);
         for (int i = 0; i < array_len; ++i) {
             lat_data[i] = -89 + (180 / array_len) * (i + 1);
         }
-        libdap::set_array_using_double(this, lat_data, array_len);
+        libdap::set_array_using_double(this, &lat_data[0], array_len);
     }
     else if (name().find("lat") != string::npos) {
         int array_len = length();
-        double *lat_data = new double[array_len];
+        // double *lat_data = new double[array_len];
+        vector<double> lat_data(array_len);
         for (int i = 0; i < array_len; ++i) {
             lat_data[i] = 90 - (180 / array_len) * (i + 1);
         }
-        libdap::set_array_using_double(this, lat_data, array_len);
+        libdap::set_array_using_double(this, &lat_data[0], array_len);
     }
     else if (name().find("lon") != string::npos) {
         int array_len = length();
-        double *lon_data = new double[array_len];
+        //double *lon_data = new double[array_len];
+        vector<double> lon_data(array_len);
         for (int i = 0; i < array_len; ++i) {
             lon_data[i] = (360 / array_len) * (i + 1);
         }
-        libdap::set_array_using_double(this, lon_data, array_len);
+        libdap::set_array_using_double(this, &lon_data[0], array_len);
     }
     else {
         throw InternalErr(__FILE__, __LINE__, "Unrecognized name");
@@ -229,7 +232,7 @@ int TestArray::m_offset(int y, Dim_iter X, int x)
  *
  * @param constrained_array
  */
-template <typename T, class C>
+template<typename T, class C>
 void TestArray::m_constrained_matrix(vector<T>&constrained_array)
 {
     int unconstrained_size = 1;
@@ -243,10 +246,10 @@ void TestArray::m_constrained_matrix(vector<T>&constrained_array)
         var()->read();
 #if 0
         if (var()->type() == dods_enum_c)
-            static_cast<C*>(var())->value(&v);
+        static_cast<C*>(var())->value(&v);
         else
 #endif
-            v = static_cast<C*>(var())->value();
+        v = static_cast<C*>(var())->value();
 
         whole_array[i] = v;
         var()->set_read_p(false); // pick up the next value
@@ -257,10 +260,7 @@ void TestArray::m_constrained_matrix(vector<T>&constrained_array)
     Dim_iter Y = dim_begin();
     Dim_iter X = Y + 1;
 
-    DBG(cerr << "dimension_start(Y): " << dimension_start(Y) << endl);
-    DBG(cerr << "dimension_stop(Y): " << dimension_stop(Y) << endl);
-    DBG(cerr << "dimension_start(X): " << dimension_start(X) << endl);
-    DBG(cerr << "dimension_stop(X): " << dimension_stop(X) << endl);
+    DBG(cerr << "dimension_start(Y): " << dimension_start(Y) << endl); DBG(cerr << "dimension_stop(Y): " << dimension_stop(Y) << endl); DBG(cerr << "dimension_start(X): " << dimension_start(X) << endl); DBG(cerr << "dimension_stop(X): " << dimension_stop(X) << endl);
 
     int constrained_size = 0;
     int y = dimension_start(Y);
@@ -276,7 +276,7 @@ void TestArray::m_constrained_matrix(vector<T>&constrained_array)
     }
 }
 
-template <typename T>
+template<typename T>
 void TestArray::m_enum_constrained_matrix(vector<T>&constrained_array)
 {
     int unconstrained_size = 1;
@@ -298,10 +298,7 @@ void TestArray::m_enum_constrained_matrix(vector<T>&constrained_array)
     Dim_iter Y = dim_begin();
     Dim_iter X = Y + 1;
 
-    DBG(cerr << "dimension_start(Y): " << dimension_start(Y) << endl);
-    DBG(cerr << "dimension_stop(Y): " << dimension_stop(Y) << endl);
-    DBG(cerr << "dimension_start(X): " << dimension_start(X) << endl);
-    DBG(cerr << "dimension_stop(X): " << dimension_stop(X) << endl);
+    DBG(cerr << "dimension_start(Y): " << dimension_start(Y) << endl); DBG(cerr << "dimension_stop(Y): " << dimension_stop(Y) << endl); DBG(cerr << "dimension_start(X): " << dimension_start(X) << endl); DBG(cerr << "dimension_stop(X): " << dimension_stop(X) << endl);
 
     int constrained_size = 0;
     int y = dimension_start(Y);
@@ -321,7 +318,7 @@ void TestArray::m_enum_constrained_matrix(vector<T>&constrained_array)
  * Load the variable's internal data buffer with values, simulating a read()
  * call to some data store. A private method.
  */
-template <typename T, class C>
+template<typename T, class C>
 void TestArray::m_cardinal_type_read_helper()
 {
     if (get_series_values()) {
@@ -362,7 +359,7 @@ void TestArray::m_cardinal_type_read_helper()
  * Load the variable's internal data buffer with values, simulating a read()
  * call to some data store. A private method.
  */
-template <typename T>
+template<typename T>
 void TestArray::m_enum_type_read_helper()
 {
     if (get_series_values()) {
@@ -401,152 +398,149 @@ void TestArray::m_enum_type_read_helper()
 
 bool TestArray::read()
 {
-    if (read_p())
-        return true;
+    if (read_p()) return true;
 
-    if (test_variable_sleep_interval > 0)
-        sleep(test_variable_sleep_interval);
+    if (test_variable_sleep_interval > 0) sleep(test_variable_sleep_interval);
 
     int64_t array_len = length(); // elements in the array
 
     switch (var()->type()) {
-		// These are the DAP2 types and the classes that implement them all define
-		// the old buf2val() and val2buf() methods. For the new DAP4 types see below.
-        //case dods_byte_c:
-        //case dods_uint8_c:
+    // These are the DAP2 types and the classes that implement them all define
+    // the old buf2val() and val2buf() methods. For the new DAP4 types see below.
+    //case dods_byte_c:
+    //case dods_uint8_c:
+    case dods_int16_c:
+        m_cardinal_type_read_helper<dods_int16, Int16>();
+        break;
+
+    case dods_uint16_c:
+        m_cardinal_type_read_helper<dods_uint16, UInt16>();
+        break;
+
+    case dods_int32_c:
+        m_cardinal_type_read_helper<dods_int32, Int32>();
+        break;
+
+    case dods_uint32_c:
+        m_cardinal_type_read_helper<dods_uint32, UInt32>();
+        break;
+
+    case dods_float32_c:
+        m_cardinal_type_read_helper<dods_float32, Float32>();
+        break;
+
+    case dods_float64_c:
+        m_cardinal_type_read_helper<dods_float64, Float64>();
+        break;
+
+    case dods_int8_c:
+        m_cardinal_type_read_helper<dods_int8, Int8>();
+        break;
+
+    case dods_byte_c:
+    case dods_char_c:
+    case dods_uint8_c:
+        m_cardinal_type_read_helper<dods_byte, Byte>();
+        break;
+
+    case dods_int64_c:
+        m_cardinal_type_read_helper<dods_int64, Int64>();
+        break;
+
+    case dods_uint64_c:
+        m_cardinal_type_read_helper<dods_uint64, UInt64>();
+        break;
+
+    case dods_enum_c:
+        switch (static_cast<D4Enum*>(var())->element_type()) {
+        case dods_byte_c:
+        case dods_char_c:
+        case dods_uint8_c:
+            m_enum_type_read_helper<dods_byte>();
+            break;
+        case dods_int8_c:
+            m_enum_type_read_helper<dods_int8>();
+            break;
         case dods_int16_c:
-        	m_cardinal_type_read_helper<dods_int16, Int16>();
-        	break;
-
+            m_enum_type_read_helper<dods_int16>();
+            break;
         case dods_uint16_c:
-        	m_cardinal_type_read_helper<dods_uint16, UInt16>();
-        	break;
-
+            m_enum_type_read_helper<dods_uint16>();
+            break;
         case dods_int32_c:
-        	m_cardinal_type_read_helper<dods_int32, Int32>();
-        	break;
-
-       case dods_uint32_c:
-        	m_cardinal_type_read_helper<dods_uint32, UInt32>();
-        	break;
-
-        case dods_float32_c:
-        	m_cardinal_type_read_helper<dods_float32, Float32>();
-        	break;
+            m_enum_type_read_helper<dods_int32>();
+            break;
+        case dods_uint32_c:
+            m_enum_type_read_helper<dods_uint32>();
+            break;
+        case dods_int64_c:
+            m_enum_type_read_helper<dods_int64>();
+            break;
+        case dods_uint64_c:
+            m_enum_type_read_helper<dods_uint64>();
+            break;
+        default:
+            throw InternalErr(__FILE__, __LINE__, "Enum with undefined type.");
+        }
+        break;
 
-        case dods_float64_c:
-        	m_cardinal_type_read_helper<dods_float64, Float64>();
-        	break;
+    case dods_str_c:
+    case dods_url_c: {
+        vector<string> tmp(array_len);
 
-        case dods_int8_c:
-        	m_cardinal_type_read_helper<dods_int8, Int8>();
-        	break;
-
-        case dods_byte_c:
-        case dods_char_c:
-        case dods_uint8_c:
-        	m_cardinal_type_read_helper<dods_byte, Byte>();
-        	break;
+        if (get_series_values()) {
+            for (int64_t i = 0; i < array_len; ++i) {
+                var()->read();
+                // URL isa Str
+                tmp[i] = static_cast<Str*>(var())->value();
+                var()->set_read_p(false); // pick up the next value
+            }
+        }
+        else {
+            var()->read();
+            string value = static_cast<Str*>(var())->value();
 
-        case dods_int64_c:
-        	m_cardinal_type_read_helper<dods_int64, Int64>();
-        	break;
+            for (unsigned i = 0; i < array_len; ++i)
+                tmp[i] = value;
+        }
 
-        case dods_uint64_c:
-        	m_cardinal_type_read_helper<dods_uint64, UInt64>();
-        	break;
-
-        case dods_enum_c:
-            switch (static_cast<D4Enum*>(var())->element_type()) {
-            case dods_byte_c:
-            case dods_char_c:
-            case dods_uint8_c:
-                m_enum_type_read_helper<dods_byte>();
-                break;
-            case dods_int8_c:
-                m_enum_type_read_helper<dods_int8>();
-                break;
-            case dods_int16_c:
-                m_enum_type_read_helper<dods_int16>();
-                break;
-            case dods_uint16_c:
-                m_enum_type_read_helper<dods_uint16>();
-                break;
-            case dods_int32_c:
-                m_enum_type_read_helper<dods_int32>();
-                break;
-            case dods_uint32_c:
-                m_enum_type_read_helper<dods_uint32>();
-                break;
-            case dods_int64_c:
-                m_enum_type_read_helper<dods_int64>();
-                break;
-            case dods_uint64_c:
-                m_enum_type_read_helper<dods_uint64>();
-                break;
-            default:
-                throw InternalErr(__FILE__, __LINE__, "Enum with undefined type.");
-            }
-            break;
+        set_value(tmp, array_len);
+        break;
+    }
 
-        case dods_str_c:
-        case dods_url_c: {
-        	vector<string> tmp(array_len);
-
-			if (get_series_values()) {
-				for (int64_t i = 0; i < array_len; ++i) {
-					var()->read();
-					// URL isa Str
-					tmp[i] = static_cast<Str*>(var())->value();
-					var()->set_read_p(false); // pick up the next value
-				}
-			}
-			else {
-				var()->read();
-				string value = static_cast<Str*>(var())->value();
-
-				for (unsigned i = 0; i < array_len; ++i)
-					tmp[i] = value;
-			}
-
-			set_value(tmp, array_len);
-			break;
+    case dods_opaque_c:
+    case dods_structure_c:
+        for (unsigned i = 0; i < array_len; ++i) {
+            // Copy the prototype and read a value into it
+            BaseType *elem = var()->ptr_duplicate();
+            elem->read();
+            // Load the new value into this object's array
+            set_vec(i, elem);
         }
 
-        case dods_opaque_c:
-        case dods_structure_c:
-            for (unsigned i = 0; i < array_len; ++i) {
-            	// Copy the prototype and read a value into it
-                BaseType *elem = var()->ptr_duplicate();
-                elem->read();
-                // Load the new value into this object's array
-                set_vec(i, elem);
-            }
+        break;
 
-            break;
+    case dods_sequence_c:
+        // No sequence arrays in DAP2
+        if (!is_dap4()) throw InternalErr(__FILE__, __LINE__, "Bad data type");
 
-        case dods_sequence_c:
-            // No sequence arrays in DAP2
-        	if (!is_dap4())
-        		throw InternalErr(__FILE__, __LINE__, "Bad data type");
-
-            for (unsigned i = 0; i < array_len; ++i) {
-            	// Copy the prototype and read a value into it
-                BaseType *elem = var()->ptr_duplicate();
-                //elem->read();
-                // Load the new value into this object's array
-                set_vec(i, elem);
-            }
+        for (unsigned i = 0; i < array_len; ++i) {
+            // Copy the prototype and read a value into it
+            BaseType *elem = var()->ptr_duplicate();
+            //elem->read();
+            // Load the new value into this object's array
+            set_vec(i, elem);
+        }
 
-            break;
+        break;
 
-            // No Grids in DAP4; No arrays of arrays and no null-typed vars in DAP2 or 4
-        case dods_grid_c:
-        case dods_array_c:
-        case dods_null_c:
-        default:
-            throw InternalErr(__FILE__, __LINE__, "Bad data type");
-            break;
+        // No Grids in DAP4; No arrays of arrays and no null-typed vars in DAP2 or 4
+    case dods_grid_c:
+    case dods_array_c:
+    case dods_null_c:
+    default:
+        throw InternalErr(__FILE__, __LINE__, "Bad data type");
+        break;
     }
 
     set_read_p(true);
@@ -556,6 +550,6 @@ bool TestArray::read()
 
 void TestArray::set_series_values(bool sv)
 {
-    dynamic_cast<TestCommon&> (*var()).set_series_values(sv);
+    dynamic_cast<TestCommon&>(*var()).set_series_values(sv);
     d_series_values = sv;
 }
diff --git a/tests/TestFunction.cc b/tests/TestFunction.cc
index 7b513aa..410d9fb 100644
--- a/tests/TestFunction.cc
+++ b/tests/TestFunction.cc
@@ -109,4 +109,4 @@ function_scale(int argc, BaseType * argv[], DDS &, BaseType **btpp)
     return;
 }
 
-} // namesspace libdap
+} // namespace libdap
diff --git a/tests/atconfig b/tests/atconfig
deleted file mode 100644
index 3e63a74..0000000
--- a/tests/atconfig
+++ /dev/null
@@ -1,20 +0,0 @@
-# Configurable variable values for building test suites.
-# Generated by ./config.status.
-# Copyright (C) 2012 Free Software Foundation, Inc.
-
-# The test suite will define top_srcdir=/../.. etc.
-at_testdir='tests'
-abs_builddir='/Users/jimg/src/opendap/hyrax_git/libdap4/tests'
-at_srcdir='.'
-abs_srcdir='/Users/jimg/src/opendap/hyrax_git/libdap4/tests'
-at_top_srcdir='..'
-abs_top_srcdir='/Users/jimg/src/opendap/hyrax_git/libdap4'
-at_top_build_prefix='../'
-abs_top_builddir='/Users/jimg/src/opendap/hyrax_git/libdap4'
-
-# Backward compatibility with Autotest <= 2.59b:
-at_top_builddir=$at_top_build_prefix
-
-AUTOTEST_PATH='.'
-
-SHELL=${CONFIG_SHELL-'/bin/sh'}
diff --git a/tests/atlocal b/tests/atlocal
deleted file mode 100644
index fa30917..0000000
--- a/tests/atlocal
+++ /dev/null
@@ -1,5 +0,0 @@
-# 
-# Empty file. Use this to customize shell variables, et c., passed to the 
-# autotest-generated script.
-# 
-# : ${path_to_exec=`pwd`}
diff --git a/tests/das-test.cc b/tests/das-test.cc
index b9985c4..0ce09b1 100644
--- a/tests/das-test.cc
+++ b/tests/das-test.cc
@@ -89,7 +89,7 @@ int main(int argc, char *argv[])
     bool code_test = false;
     bool deref_alias = false;
     bool as_xml = false;
-    while ((option_char = getopt ()) != EOF)
+    while ((option_char = getopt ()) != -1)
 	switch (option_char)
 	  {
 	    case 'p':
diff --git a/tests/dds-test.cc b/tests/dds-test.cc
index d34f61a..52302c3 100644
--- a/tests/dds-test.cc
+++ b/tests/dds-test.cc
@@ -99,7 +99,7 @@ int main(int argc, char *argv[]) {
     string name = "";
     // process options
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             ddsdebug = 1;
diff --git a/tests/dmr-test.cc b/tests/dmr-test.cc
index 9c467c0..72f295f 100644
--- a/tests/dmr-test.cc
+++ b/tests/dmr-test.cc
@@ -301,7 +301,7 @@ main(int argc, char *argv[])
 
     // process options
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'p':
             parse = true;
diff --git a/tests/expr-test.cc b/tests/expr-test.cc
index e065783..5829571 100644
--- a/tests/expr-test.cc
+++ b/tests/expr-test.cc
@@ -170,7 +170,7 @@ int main(int argc, char *argv[])
 
     // process options
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'b':
             series_values = true;
diff --git a/tests/expr-testsuite/test.2 b/tests/expr-testsuite/test.2
index 93de2d3..aad1846 100644
--- a/tests/expr-testsuite/test.2
+++ b/tests/expr-testsuite/test.2
@@ -6,16 +6,16 @@
 
 dataset {
     Structure {
-	Int32 j;
-	Int32 k;
+	   Int32 j;
+	   Int32 k;
     } s1;
     Structure {
-	Int32 l;
-	Int32 m;
+	   Int32 l;
+	   Int32 m;
     } s2[10];
     Structure {
-	Int32 n;
-	Int32 o;
+	   Int32 n;
+	   Int32 o;
     } s3;
 } test2;
 
diff --git a/tests/expr-testsuite/test.2a b/tests/expr-testsuite/test.2a
index 57a29ee..1f6732b 100644
--- a/tests/expr-testsuite/test.2a
+++ b/tests/expr-testsuite/test.2a
@@ -6,17 +6,17 @@
 
 dataset {
     Structure {
-	Int32 j;
-	Int32 k;
+	   Int32 j;
+	   Int32 k;
     } s1;
     Structure {
-	Int32 l[100];
-	Int32 m[100];
-	Int32 p;
+	   Int32 l[100];
+	   Int32 m[100];
+	   Int32 p;
     } s2[10];
     Structure {
-	Int32 n;
-	Int32 o;
+	   Int32 n;
+	   Int32 o;
     } s3;
 } test2;
 
diff --git a/tests/getdapTest b/tests/getdapTest
index efb4662..3b74e23 100755
--- a/tests/getdapTest
+++ b/tests/getdapTest
@@ -902,7 +902,7 @@ fi
 # List of tests.
 if $at_list_p; then
   cat <<_ATEOF || at_write_fail=1
-libdap 3.14.0 test suite: getdap test groups:
+libdap 3.15.1 test suite: getdap test groups:
 
  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
@@ -943,7 +943,7 @@ _ATEOF
   exit $at_write_fail
 fi
 if $at_version_p; then
-  $as_echo "$as_me (libdap 3.14.0)" &&
+  $as_echo "$as_me (libdap 3.15.1)" &&
   cat <<\_ATEOF || at_write_fail=1
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1120,11 +1120,11 @@ exec 5>>"$at_suite_log"
 
 # Banners and logs.
 $as_echo "## --------------------------------- ##
-## libdap 3.14.0 test suite: getdap. ##
+## libdap 3.15.1 test suite: getdap. ##
 ## --------------------------------- ##"
 {
   $as_echo "## --------------------------------- ##
-## libdap 3.14.0 test suite: getdap. ##
+## libdap 3.15.1 test suite: getdap. ##
 ## --------------------------------- ##"
   echo
 
@@ -1968,7 +1968,7 @@ _ASBOX
   $as_echo "Please send $at_msg and all information you think might help:
 
    To: <opendap-tech at opendap.org>
-   Subject: [libdap 3.14.0] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+   Subject: [libdap 3.15.1] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
 
 You may investigate any problem if you feel able to do so, in which
 case the test suite provides a good starting point.  Its output may
diff --git a/tests/package.m4 b/tests/package.m4
index ae0356e..1edad11 100644
--- a/tests/package.m4
+++ b/tests/package.m4
@@ -1,6 +1,6 @@
 # Signature of the current package.
 m4_define([AT_PACKAGE_NAME],      [libdap])
 m4_define([AT_PACKAGE_TARNAME],   [libdap])
-m4_define([AT_PACKAGE_VERSION],   [3.14.0])
-m4_define([AT_PACKAGE_STRING],    [libdap 3.14.0])
+m4_define([AT_PACKAGE_VERSION],   [3.15.1])
+m4_define([AT_PACKAGE_STRING],    [libdap 3.15.1])
 m4_define([AT_PACKAGE_BUGREPORT], [opendap-tech at opendap.org])
diff --git a/unit-tests/AttrTableTest.cc b/unit-tests/AttrTableTest.cc
index 1bb3cf7..5c2f997 100644
--- a/unit-tests/AttrTableTest.cc
+++ b/unit-tests/AttrTableTest.cc
@@ -417,9 +417,9 @@ int
 main(int argc, char *argv[])
 {
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
             case 'd':
                 debug = 1;  // debug is a static global
diff --git a/unit-tests/D4AsyncDocTest.cc b/unit-tests/D4AsyncDocTest.cc
index 6ef042b..f6fe394 100644
--- a/unit-tests/D4AsyncDocTest.cc
+++ b/unit-tests/D4AsyncDocTest.cc
@@ -304,8 +304,8 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
-    while ((option_char = getopt()) != EOF)
+    int option_char;
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/D4DimensionsTest.cc b/unit-tests/D4DimensionsTest.cc
index 17fcd08..ff8445d 100644
--- a/unit-tests/D4DimensionsTest.cc
+++ b/unit-tests/D4DimensionsTest.cc
@@ -226,9 +226,9 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/D4EnumTest.cc b/unit-tests/D4EnumTest.cc
index dd33804..acbcd4d 100644
--- a/unit-tests/D4EnumTest.cc
+++ b/unit-tests/D4EnumTest.cc
@@ -222,8 +222,8 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
-    while ((option_char = getopt()) != EOF)
+    int option_char;
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/D4GroupTest.cc b/unit-tests/D4GroupTest.cc
index f345652..a11aca5 100644
--- a/unit-tests/D4GroupTest.cc
+++ b/unit-tests/D4GroupTest.cc
@@ -348,9 +348,9 @@ int
 main(int argc, char *argv[])
 {
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
             case 'd':
                 debug = 1;  // debug is a static global
diff --git a/unit-tests/D4MarshallerTest.cc b/unit-tests/D4MarshallerTest.cc
index 509a5f2..b309acf 100644
--- a/unit-tests/D4MarshallerTest.cc
+++ b/unit-tests/D4MarshallerTest.cc
@@ -350,9 +350,9 @@ int main(int argc, char*argv[]) {
     runner.setOutputter(CppUnit::CompilerOutputter::defaultOutputter(&runner.result(), std::cerr));
 
     GetOpt getopt(argc, argv, "dw");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = true;  // debug is a static global
diff --git a/unit-tests/D4ParserSax2Test.cc b/unit-tests/D4ParserSax2Test.cc
index 943c748..4606bea 100644
--- a/unit-tests/D4ParserSax2Test.cc
+++ b/unit-tests/D4ParserSax2Test.cc
@@ -344,9 +344,9 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "dp");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/D4UnMarshallerTest.cc b/unit-tests/D4UnMarshallerTest.cc
index 5830b91..9a4ccce 100644
--- a/unit-tests/D4UnMarshallerTest.cc
+++ b/unit-tests/D4UnMarshallerTest.cc
@@ -330,9 +330,9 @@ int main(int argc, char*argv[]) {
     runner.setOutputter(CppUnit::CompilerOutputter::defaultOutputter(&runner.result(), std::cerr));
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = true;  // debug is a static global
diff --git a/unit-tests/DDSTest.cc b/unit-tests/DDSTest.cc
index 61f10c3..26d15ea 100644
--- a/unit-tests/DDSTest.cc
+++ b/unit-tests/DDSTest.cc
@@ -73,7 +73,7 @@ private:
     DDS *dds_dap4;
 
 public:
-    DDSTest() {
+    DDSTest() : dds1(0), dds2(0), dds_dap4(0) {
     }
     ~DDSTest() {
     }
@@ -483,7 +483,7 @@ int main(int argc, char*argv[]) {
     GetOpt getopt(argc, argv, "d");
     int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/DDXParserTest.cc b/unit-tests/DDXParserTest.cc
index a4bc081..2931421 100644
--- a/unit-tests/DDXParserTest.cc
+++ b/unit-tests/DDXParserTest.cc
@@ -700,7 +700,7 @@ int main(int argc, char*argv[]) {
 
     GetOpt getopt(argc, argv, "d");
     int option_char;
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
 	switch (option_char) {
 	  case 'd':
 	    debug = 1;  // debug is a static global
diff --git a/unit-tests/DMRTest.cc b/unit-tests/DMRTest.cc
index 74108d0..06d9393 100644
--- a/unit-tests/DMRTest.cc
+++ b/unit-tests/DMRTest.cc
@@ -293,9 +293,9 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/HTTPCacheTest.cc b/unit-tests/HTTPCacheTest.cc
index d57f9fb..42c7200 100644
--- a/unit-tests/HTTPCacheTest.cc
+++ b/unit-tests/HTTPCacheTest.cc
@@ -901,9 +901,9 @@ int main(int argc, char*argv[])
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
             case 'd':
                 debug = 1;  // debug is a static global
diff --git a/unit-tests/HTTPConnectTest.cc b/unit-tests/HTTPConnectTest.cc
index 4cd8c5b..6f6c0c2 100644
--- a/unit-tests/HTTPConnectTest.cc
+++ b/unit-tests/HTTPConnectTest.cc
@@ -735,9 +735,9 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/Makefile.am b/unit-tests/Makefile.am
index 32cb54b..9278bd5 100644
--- a/unit-tests/Makefile.am
+++ b/unit-tests/Makefile.am
@@ -10,7 +10,7 @@ AUTOMAKE_OPTIONS = foreign
 AM_CPPFLAGS = -I$(top_srcdir)/GNU -I$(top_srcdir) -I$(top_srcdir)/tests $(CURL_CFLAGS) $(XML2_CFLAGS)
 AM_LDADD =
 AM_CXXFLAGS = 
-CXXFLAGS = 
+# CXXFLAGS =
 
 if COMPILER_IS_GCC
 AM_CXXFLAGS += -Wall -W -Wcast-align
@@ -47,7 +47,8 @@ DIRS_EXTRA = das-testsuite dds-testsuite ddx-testsuite		\
 	rcreader-testsuite server-testsuite cgi-util-tests D4-xml \
 	chunked-io D4-marshaller
 
-EXTRA_DIST = $(DIRS_EXTRA) testFile.cc testFile.h test_config.h.in
+EXTRA_DIST = $(DIRS_EXTRA) testFile.cc testFile.h test_config.h.in \
+	valgrind_suppressions.txt
 
 CLEANFILES = testout .dodsrc  *.gcda *.gcno D4-xml.tar.gz
 
diff --git a/unit-tests/Makefile.in b/unit-tests/Makefile.in
index 4d6081b..bde7415 100644
--- a/unit-tests/Makefile.in
+++ b/unit-tests/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,23 +15,51 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -50,6 +77,7 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
+# CXXFLAGS =
 @COMPILER_IS_GCC_TRUE at am__append_1 = -Wall -W -Wcast-align
 @CPPUNIT_TRUE at am__append_2 = $(CPPUNIT_CFLAGS)
 @CPPUNIT_TRUE at am__append_3 = $(CPPUNIT_LIBS)
@@ -64,10 +92,12 @@ TESTS = $(am__EXEEXT_2)
 @CPPUNIT_TRUE@@DAP4_DEFINED_TRUE@	chunked_iostream_test D4AsyncDocTest DMRTest
 
 subdir = unit-tests
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/conf/depcomp
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/conf/depcomp $(noinst_HEADERS) \
+	$(top_srcdir)/conf/test-driver
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -88,8 +118,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -150,6 +180,10 @@ am__DEPENDENCIES_1 =
 @CPPUNIT_TRUE at am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2)
 ArrayTest_DEPENDENCIES = ../libdap.la $(am__DEPENDENCIES_3)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
 am__objects_1 = testFile.$(OBJEXT)
 am_AttrTableTest_OBJECTS = AttrTableTest.$(OBJEXT) $(am__objects_1)
 AttrTableTest_OBJECTS = $(am_AttrTableTest_OBJECTS)
@@ -313,28 +347,58 @@ am_structT_OBJECTS = structT.$(OBJEXT)
 structT_OBJECTS = $(am_structT_OBJECTS)
 structT_DEPENDENCIES = ../tests/libtest-types.a ../libdap.la \
 	$(am__DEPENDENCIES_3)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/conf/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(ArrayTest_SOURCES) $(AttrTableTest_SOURCES) \
 	$(ByteTest_SOURCES) $(D4AsyncDocTest_SOURCES) \
 	$(D4AttributesTest_SOURCES) $(D4DimensionsTest_SOURCES) \
@@ -373,13 +437,14 @@ DIST_SOURCES = $(ArrayTest_SOURCES) $(AttrTableTest_SOURCES) \
 	$(ddsT_SOURCES) $(generalUtilTest_SOURCES) $(marshT_SOURCES) \
 	$(parserUtilTest_SOURCES) $(sequenceT_SOURCES) \
 	$(structT_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -388,15 +453,234 @@ am__can_run_installinfo = \
 HEADERS = $(noinst_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	check recheck distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors_dummy = \
   mgn= red= grn= lgn= blu= brg= std=; \
   am__color_tests=no
-am__tty_colors = $(am__tty_colors_dummy)
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/conf/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/conf/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
 DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
@@ -429,6 +713,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -460,7 +745,7 @@ CURL_STATIC_LIBS = @CURL_STATIC_LIBS@
 CXX = @CXX@
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = 
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DAPLIB_AGE = @DAPLIB_AGE@
 DAPLIB_CURRENT = @DAPLIB_CURRENT@
@@ -540,6 +825,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -657,6 +943,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -865,9 +1152,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -877,6 +1166,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -998,7 +1288,9 @@ DIRS_EXTRA = das-testsuite dds-testsuite ddx-testsuite		\
 	rcreader-testsuite server-testsuite cgi-util-tests D4-xml \
 	chunked-io D4-marshaller
 
-EXTRA_DIST = $(DIRS_EXTRA) testFile.cc testFile.h test_config.h.in
+EXTRA_DIST = $(DIRS_EXTRA) testFile.cc testFile.h test_config.h.in \
+	valgrind_suppressions.txt
+
 CLEANFILES = testout .dodsrc  *.gcda *.gcno D4-xml.tar.gz
 DISTCLEANFILES = test_config.h *.strm *.file tmp.txt
 @CPPUNIT_FALSE at UNIT_TESTS = 
@@ -1106,7 +1398,7 @@ ServerFunctionsListUnitTest_LDADD = ../libdap.la $(AM_LDADD)
 all: all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .cc .lo .o .obj
+.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -1146,114 +1438,150 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
+
 ArrayTest$(EXEEXT): $(ArrayTest_OBJECTS) $(ArrayTest_DEPENDENCIES) $(EXTRA_ArrayTest_DEPENDENCIES) 
 	@rm -f ArrayTest$(EXEEXT)
-	$(CXXLINK) $(ArrayTest_OBJECTS) $(ArrayTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(ArrayTest_OBJECTS) $(ArrayTest_LDADD) $(LIBS)
+
 AttrTableTest$(EXEEXT): $(AttrTableTest_OBJECTS) $(AttrTableTest_DEPENDENCIES) $(EXTRA_AttrTableTest_DEPENDENCIES) 
 	@rm -f AttrTableTest$(EXEEXT)
-	$(CXXLINK) $(AttrTableTest_OBJECTS) $(AttrTableTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(AttrTableTest_OBJECTS) $(AttrTableTest_LDADD) $(LIBS)
+
 ByteTest$(EXEEXT): $(ByteTest_OBJECTS) $(ByteTest_DEPENDENCIES) $(EXTRA_ByteTest_DEPENDENCIES) 
 	@rm -f ByteTest$(EXEEXT)
-	$(CXXLINK) $(ByteTest_OBJECTS) $(ByteTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(ByteTest_OBJECTS) $(ByteTest_LDADD) $(LIBS)
+
 D4AsyncDocTest$(EXEEXT): $(D4AsyncDocTest_OBJECTS) $(D4AsyncDocTest_DEPENDENCIES) $(EXTRA_D4AsyncDocTest_DEPENDENCIES) 
 	@rm -f D4AsyncDocTest$(EXEEXT)
-	$(CXXLINK) $(D4AsyncDocTest_OBJECTS) $(D4AsyncDocTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4AsyncDocTest_OBJECTS) $(D4AsyncDocTest_LDADD) $(LIBS)
+
 D4AttributesTest$(EXEEXT): $(D4AttributesTest_OBJECTS) $(D4AttributesTest_DEPENDENCIES) $(EXTRA_D4AttributesTest_DEPENDENCIES) 
 	@rm -f D4AttributesTest$(EXEEXT)
-	$(CXXLINK) $(D4AttributesTest_OBJECTS) $(D4AttributesTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4AttributesTest_OBJECTS) $(D4AttributesTest_LDADD) $(LIBS)
+
 D4DimensionsTest$(EXEEXT): $(D4DimensionsTest_OBJECTS) $(D4DimensionsTest_DEPENDENCIES) $(EXTRA_D4DimensionsTest_DEPENDENCIES) 
 	@rm -f D4DimensionsTest$(EXEEXT)
-	$(CXXLINK) $(D4DimensionsTest_OBJECTS) $(D4DimensionsTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4DimensionsTest_OBJECTS) $(D4DimensionsTest_LDADD) $(LIBS)
+
 D4EnumDefsTest$(EXEEXT): $(D4EnumDefsTest_OBJECTS) $(D4EnumDefsTest_DEPENDENCIES) $(EXTRA_D4EnumDefsTest_DEPENDENCIES) 
 	@rm -f D4EnumDefsTest$(EXEEXT)
-	$(CXXLINK) $(D4EnumDefsTest_OBJECTS) $(D4EnumDefsTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4EnumDefsTest_OBJECTS) $(D4EnumDefsTest_LDADD) $(LIBS)
+
 D4EnumTest$(EXEEXT): $(D4EnumTest_OBJECTS) $(D4EnumTest_DEPENDENCIES) $(EXTRA_D4EnumTest_DEPENDENCIES) 
 	@rm -f D4EnumTest$(EXEEXT)
-	$(CXXLINK) $(D4EnumTest_OBJECTS) $(D4EnumTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4EnumTest_OBJECTS) $(D4EnumTest_LDADD) $(LIBS)
+
 D4GroupTest$(EXEEXT): $(D4GroupTest_OBJECTS) $(D4GroupTest_DEPENDENCIES) $(EXTRA_D4GroupTest_DEPENDENCIES) 
 	@rm -f D4GroupTest$(EXEEXT)
-	$(CXXLINK) $(D4GroupTest_OBJECTS) $(D4GroupTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4GroupTest_OBJECTS) $(D4GroupTest_LDADD) $(LIBS)
+
 D4MarshallerTest$(EXEEXT): $(D4MarshallerTest_OBJECTS) $(D4MarshallerTest_DEPENDENCIES) $(EXTRA_D4MarshallerTest_DEPENDENCIES) 
 	@rm -f D4MarshallerTest$(EXEEXT)
-	$(CXXLINK) $(D4MarshallerTest_OBJECTS) $(D4MarshallerTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4MarshallerTest_OBJECTS) $(D4MarshallerTest_LDADD) $(LIBS)
+
 D4ParserSax2Test$(EXEEXT): $(D4ParserSax2Test_OBJECTS) $(D4ParserSax2Test_DEPENDENCIES) $(EXTRA_D4ParserSax2Test_DEPENDENCIES) 
 	@rm -f D4ParserSax2Test$(EXEEXT)
-	$(CXXLINK) $(D4ParserSax2Test_OBJECTS) $(D4ParserSax2Test_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4ParserSax2Test_OBJECTS) $(D4ParserSax2Test_LDADD) $(LIBS)
+
 D4UnMarshallerTest$(EXEEXT): $(D4UnMarshallerTest_OBJECTS) $(D4UnMarshallerTest_DEPENDENCIES) $(EXTRA_D4UnMarshallerTest_DEPENDENCIES) 
 	@rm -f D4UnMarshallerTest$(EXEEXT)
-	$(CXXLINK) $(D4UnMarshallerTest_OBJECTS) $(D4UnMarshallerTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(D4UnMarshallerTest_OBJECTS) $(D4UnMarshallerTest_LDADD) $(LIBS)
+
 DASTest$(EXEEXT): $(DASTest_OBJECTS) $(DASTest_DEPENDENCIES) $(EXTRA_DASTest_DEPENDENCIES) 
 	@rm -f DASTest$(EXEEXT)
-	$(CXXLINK) $(DASTest_OBJECTS) $(DASTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(DASTest_OBJECTS) $(DASTest_LDADD) $(LIBS)
+
 DDSTest$(EXEEXT): $(DDSTest_OBJECTS) $(DDSTest_DEPENDENCIES) $(EXTRA_DDSTest_DEPENDENCIES) 
 	@rm -f DDSTest$(EXEEXT)
-	$(CXXLINK) $(DDSTest_OBJECTS) $(DDSTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(DDSTest_OBJECTS) $(DDSTest_LDADD) $(LIBS)
+
 DDXParserTest$(EXEEXT): $(DDXParserTest_OBJECTS) $(DDXParserTest_DEPENDENCIES) $(EXTRA_DDXParserTest_DEPENDENCIES) 
 	@rm -f DDXParserTest$(EXEEXT)
-	$(CXXLINK) $(DDXParserTest_OBJECTS) $(DDXParserTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(DDXParserTest_OBJECTS) $(DDXParserTest_LDADD) $(LIBS)
+
 DMRTest$(EXEEXT): $(DMRTest_OBJECTS) $(DMRTest_DEPENDENCIES) $(EXTRA_DMRTest_DEPENDENCIES) 
 	@rm -f DMRTest$(EXEEXT)
-	$(CXXLINK) $(DMRTest_OBJECTS) $(DMRTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(DMRTest_OBJECTS) $(DMRTest_LDADD) $(LIBS)
+
 HTTPCacheTest$(EXEEXT): $(HTTPCacheTest_OBJECTS) $(HTTPCacheTest_DEPENDENCIES) $(EXTRA_HTTPCacheTest_DEPENDENCIES) 
 	@rm -f HTTPCacheTest$(EXEEXT)
-	$(CXXLINK) $(HTTPCacheTest_OBJECTS) $(HTTPCacheTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(HTTPCacheTest_OBJECTS) $(HTTPCacheTest_LDADD) $(LIBS)
+
 HTTPConnectTest$(EXEEXT): $(HTTPConnectTest_OBJECTS) $(HTTPConnectTest_DEPENDENCIES) $(EXTRA_HTTPConnectTest_DEPENDENCIES) 
 	@rm -f HTTPConnectTest$(EXEEXT)
-	$(CXXLINK) $(HTTPConnectTest_OBJECTS) $(HTTPConnectTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(HTTPConnectTest_OBJECTS) $(HTTPConnectTest_LDADD) $(LIBS)
+
 MIMEUtilTest$(EXEEXT): $(MIMEUtilTest_OBJECTS) $(MIMEUtilTest_DEPENDENCIES) $(EXTRA_MIMEUtilTest_DEPENDENCIES) 
 	@rm -f MIMEUtilTest$(EXEEXT)
-	$(CXXLINK) $(MIMEUtilTest_OBJECTS) $(MIMEUtilTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(MIMEUtilTest_OBJECTS) $(MIMEUtilTest_LDADD) $(LIBS)
+
 MarshallerTest$(EXEEXT): $(MarshallerTest_OBJECTS) $(MarshallerTest_DEPENDENCIES) $(EXTRA_MarshallerTest_DEPENDENCIES) 
 	@rm -f MarshallerTest$(EXEEXT)
-	$(CXXLINK) $(MarshallerTest_OBJECTS) $(MarshallerTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(MarshallerTest_OBJECTS) $(MarshallerTest_LDADD) $(LIBS)
+
 RCReaderTest$(EXEEXT): $(RCReaderTest_OBJECTS) $(RCReaderTest_DEPENDENCIES) $(EXTRA_RCReaderTest_DEPENDENCIES) 
 	@rm -f RCReaderTest$(EXEEXT)
-	$(CXXLINK) $(RCReaderTest_OBJECTS) $(RCReaderTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(RCReaderTest_OBJECTS) $(RCReaderTest_LDADD) $(LIBS)
+
 RegexTest$(EXEEXT): $(RegexTest_OBJECTS) $(RegexTest_DEPENDENCIES) $(EXTRA_RegexTest_DEPENDENCIES) 
 	@rm -f RegexTest$(EXEEXT)
-	$(CXXLINK) $(RegexTest_OBJECTS) $(RegexTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(RegexTest_OBJECTS) $(RegexTest_LDADD) $(LIBS)
+
 SequenceTest$(EXEEXT): $(SequenceTest_OBJECTS) $(SequenceTest_DEPENDENCIES) $(EXTRA_SequenceTest_DEPENDENCIES) 
 	@rm -f SequenceTest$(EXEEXT)
-	$(CXXLINK) $(SequenceTest_OBJECTS) $(SequenceTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(SequenceTest_OBJECTS) $(SequenceTest_LDADD) $(LIBS)
+
 ServerFunctionsListUnitTest$(EXEEXT): $(ServerFunctionsListUnitTest_OBJECTS) $(ServerFunctionsListUnitTest_DEPENDENCIES) $(EXTRA_ServerFunctionsListUnitTest_DEPENDENCIES) 
 	@rm -f ServerFunctionsListUnitTest$(EXEEXT)
-	$(CXXLINK) $(ServerFunctionsListUnitTest_OBJECTS) $(ServerFunctionsListUnitTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(ServerFunctionsListUnitTest_OBJECTS) $(ServerFunctionsListUnitTest_LDADD) $(LIBS)
+
 SignalHandlerTest$(EXEEXT): $(SignalHandlerTest_OBJECTS) $(SignalHandlerTest_DEPENDENCIES) $(EXTRA_SignalHandlerTest_DEPENDENCIES) 
 	@rm -f SignalHandlerTest$(EXEEXT)
-	$(CXXLINK) $(SignalHandlerTest_OBJECTS) $(SignalHandlerTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(SignalHandlerTest_OBJECTS) $(SignalHandlerTest_LDADD) $(LIBS)
+
 ancT$(EXEEXT): $(ancT_OBJECTS) $(ancT_DEPENDENCIES) $(EXTRA_ancT_DEPENDENCIES) 
 	@rm -f ancT$(EXEEXT)
-	$(CXXLINK) $(ancT_OBJECTS) $(ancT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(ancT_OBJECTS) $(ancT_LDADD) $(LIBS)
+
 arrayT$(EXEEXT): $(arrayT_OBJECTS) $(arrayT_DEPENDENCIES) $(EXTRA_arrayT_DEPENDENCIES) 
 	@rm -f arrayT$(EXEEXT)
-	$(CXXLINK) $(arrayT_OBJECTS) $(arrayT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(arrayT_OBJECTS) $(arrayT_LDADD) $(LIBS)
+
 attrTableT$(EXEEXT): $(attrTableT_OBJECTS) $(attrTableT_DEPENDENCIES) $(EXTRA_attrTableT_DEPENDENCIES) 
 	@rm -f attrTableT$(EXEEXT)
-	$(CXXLINK) $(attrTableT_OBJECTS) $(attrTableT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(attrTableT_OBJECTS) $(attrTableT_LDADD) $(LIBS)
+
 chunked_iostream_test$(EXEEXT): $(chunked_iostream_test_OBJECTS) $(chunked_iostream_test_DEPENDENCIES) $(EXTRA_chunked_iostream_test_DEPENDENCIES) 
 	@rm -f chunked_iostream_test$(EXEEXT)
-	$(CXXLINK) $(chunked_iostream_test_OBJECTS) $(chunked_iostream_test_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(chunked_iostream_test_OBJECTS) $(chunked_iostream_test_LDADD) $(LIBS)
+
 dasT$(EXEEXT): $(dasT_OBJECTS) $(dasT_DEPENDENCIES) $(EXTRA_dasT_DEPENDENCIES) 
 	@rm -f dasT$(EXEEXT)
-	$(CXXLINK) $(dasT_OBJECTS) $(dasT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(dasT_OBJECTS) $(dasT_LDADD) $(LIBS)
+
 ddsT$(EXEEXT): $(ddsT_OBJECTS) $(ddsT_DEPENDENCIES) $(EXTRA_ddsT_DEPENDENCIES) 
 	@rm -f ddsT$(EXEEXT)
-	$(CXXLINK) $(ddsT_OBJECTS) $(ddsT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(ddsT_OBJECTS) $(ddsT_LDADD) $(LIBS)
+
 generalUtilTest$(EXEEXT): $(generalUtilTest_OBJECTS) $(generalUtilTest_DEPENDENCIES) $(EXTRA_generalUtilTest_DEPENDENCIES) 
 	@rm -f generalUtilTest$(EXEEXT)
-	$(CXXLINK) $(generalUtilTest_OBJECTS) $(generalUtilTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(generalUtilTest_OBJECTS) $(generalUtilTest_LDADD) $(LIBS)
+
 marshT$(EXEEXT): $(marshT_OBJECTS) $(marshT_DEPENDENCIES) $(EXTRA_marshT_DEPENDENCIES) 
 	@rm -f marshT$(EXEEXT)
-	$(CXXLINK) $(marshT_OBJECTS) $(marshT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(marshT_OBJECTS) $(marshT_LDADD) $(LIBS)
+
 parserUtilTest$(EXEEXT): $(parserUtilTest_OBJECTS) $(parserUtilTest_DEPENDENCIES) $(EXTRA_parserUtilTest_DEPENDENCIES) 
 	@rm -f parserUtilTest$(EXEEXT)
-	$(CXXLINK) $(parserUtilTest_OBJECTS) $(parserUtilTest_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(parserUtilTest_OBJECTS) $(parserUtilTest_LDADD) $(LIBS)
+
 sequenceT$(EXEEXT): $(sequenceT_OBJECTS) $(sequenceT_DEPENDENCIES) $(EXTRA_sequenceT_DEPENDENCIES) 
 	@rm -f sequenceT$(EXEEXT)
-	$(CXXLINK) $(sequenceT_OBJECTS) $(sequenceT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(sequenceT_OBJECTS) $(sequenceT_LDADD) $(LIBS)
+
 structT$(EXEEXT): $(structT_OBJECTS) $(structT_DEPENDENCIES) $(EXTRA_structT_DEPENDENCIES) 
 	@rm -f structT$(EXEEXT)
-	$(CXXLINK) $(structT_OBJECTS) $(structT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(structT_OBJECTS) $(structT_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -1300,67 +1628,67 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testFile.Po at am__quote@
 
 .cc.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cc.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cc.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 DDXParserTest-DDXParserTest.o: DDXParserTest.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DDXParserTest-DDXParserTest.o -MD -MP -MF $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo -c -o DDXParserTest-DDXParserTest.o `test -f 'DDXParserTest.cc' || echo '$(srcdir)/'`DDXParserTest.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo $(DEPDIR)/DDXParserTest-DDXParserTest.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DDXParserTest.cc' object='DDXParserTest-DDXParserTest.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DDXParserTest-DDXParserTest.o -MD -MP -MF $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo -c -o DDXParserTest-DDXParserTest.o `test -f 'DDXParserTest.cc' || echo '$(srcdir)/'`DDXParserTest.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo $(DEPDIR)/DDXParserTest-DDXParserTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DDXParserTest.cc' object='DDXParserTest-DDXParserTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DDXParserTest-DDXParserTest.o `test -f 'DDXParserTest.cc' || echo '$(srcdir)/'`DDXParserTest.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DDXParserTest-DDXParserTest.o `test -f 'DDXParserTest.cc' || echo '$(srcdir)/'`DDXParserTest.cc
 
 DDXParserTest-DDXParserTest.obj: DDXParserTest.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DDXParserTest-DDXParserTest.obj -MD -MP -MF $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo -c -o DDXParserTest-DDXParserTest.obj `if test -f 'DDXParserTest.cc'; then $(CYGPATH_W) 'DDXParserTest.cc'; else $(CYGPATH_W) '$(srcdir)/DDXParserTest.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo $(DEPDIR)/DDXParserTest-DDXParserTest.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='DDXParserTest.cc' object='DDXParserTest-DDXParserTest.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DDXParserTest-DDXParserTest.obj -MD -MP -MF $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo -c -o DDXParserTest-DDXParserTest.obj `if test -f 'DDXParserTest.cc'; then $(CYGPATH_W) 'DDXParserTest.cc'; else $(CYGPATH_W) '$(srcdir)/DDXParserTest.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/DDXParserTest-DDXParserTest.Tpo $(DEPDIR)/DDXParserTest-DDXParserTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='DDXParserTest.cc' object='DDXParserTest-DDXParserTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DDXParserTest-DDXParserTest.obj `if test -f 'DDXParserTest.cc'; then $(CYGPATH_W) 'DDXParserTest.cc'; else $(CYGPATH_W) '$(srcdir)/DDXParserTest.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(DDXParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DDXParserTest-DDXParserTest.obj `if test -f 'DDXParserTest.cc'; then $(CYGPATH_W) 'DDXParserTest.cc'; else $(CYGPATH_W) '$(srcdir)/DDXParserTest.cc'; fi`
 
 HTTPCacheTest-HTTPCacheTest.o: HTTPCacheTest.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPCacheTest-HTTPCacheTest.o -MD -MP -MF $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo -c -o HTTPCacheTest-HTTPCacheTest.o `test -f 'HTTPCacheTest.cc' || echo '$(srcdir)/'`HTTPCacheTest.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPCacheTest.cc' object='HTTPCacheTest-HTTPCacheTest.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPCacheTest-HTTPCacheTest.o -MD -MP -MF $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo -c -o HTTPCacheTest-HTTPCacheTest.o `test -f 'HTTPCacheTest.cc' || echo '$(srcdir)/'`HTTPCacheTest.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPCacheTest.cc' object='HTTPCacheTest-HTTPCacheTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPCacheTest-HTTPCacheTest.o `test -f 'HTTPCacheTest.cc' || echo '$(srcdir)/'`HTTPCacheTest.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPCacheTest-HTTPCacheTest.o `test -f 'HTTPCacheTest.cc' || echo '$(srcdir)/'`HTTPCacheTest.cc
 
 HTTPCacheTest-HTTPCacheTest.obj: HTTPCacheTest.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPCacheTest-HTTPCacheTest.obj -MD -MP -MF $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo -c -o HTTPCacheTest-HTTPCacheTest.obj `if test -f 'HTTPCacheTest.cc'; then $(CYGPATH_W) 'HTTPCacheTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPCacheTest.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPCacheTest.cc' object='HTTPCacheTest-HTTPCacheTest.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPCacheTest-HTTPCacheTest.obj -MD -MP -MF $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo -c -o HTTPCacheTest-HTTPCacheTest.obj `if test -f 'HTTPCacheTest.cc'; then $(CYGPATH_W) 'HTTPCacheTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPCacheTest.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Tpo $(DEPDIR)/HTTPCacheTest-HTTPCacheTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPCacheTest.cc' object='HTTPCacheTest-HTTPCacheTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPCacheTest-HTTPCacheTest.obj `if test -f 'HTTPCacheTest.cc'; then $(CYGPATH_W) 'HTTPCacheTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPCacheTest.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPCacheTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPCacheTest-HTTPCacheTest.obj `if test -f 'HTTPCacheTest.cc'; then $(CYGPATH_W) 'HTTPCacheTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPCacheTest.cc'; fi`
 
 HTTPConnectTest-HTTPConnectTest.o: HTTPConnectTest.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPConnectTest-HTTPConnectTest.o -MD -MP -MF $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo -c -o HTTPConnectTest-HTTPConnectTest.o `test -f 'HTTPConnectTest.cc' || echo '$(srcdir)/'`HTTPConnectTest.cc
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPConnectTest.cc' object='HTTPConnectTest-HTTPConnectTest.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPConnectTest-HTTPConnectTest.o -MD -MP -MF $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo -c -o HTTPConnectTest-HTTPConnectTest.o `test -f 'HTTPConnectTest.cc' || echo '$(srcdir)/'`HTTPConnectTest.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPConnectTest.cc' object='HTTPConnectTest-HTTPConnectTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPConnectTest-HTTPConnectTest.o `test -f 'HTTPConnectTest.cc' || echo '$(srcdir)/'`HTTPConnectTest.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPConnectTest-HTTPConnectTest.o `test -f 'HTTPConnectTest.cc' || echo '$(srcdir)/'`HTTPConnectTest.cc
 
 HTTPConnectTest-HTTPConnectTest.obj: HTTPConnectTest.cc
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPConnectTest-HTTPConnectTest.obj -MD -MP -MF $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo -c -o HTTPConnectTest-HTTPConnectTest.obj `if test -f 'HTTPConnectTest.cc'; then $(CYGPATH_W) 'HTTPConnectTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPConnectTest.cc'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='HTTPConnectTest.cc' object='HTTPConnectTest-HTTPConnectTest.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HTTPConnectTest-HTTPConnectTest.obj -MD -MP -MF $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo -c -o HTTPConnectTest-HTTPConnectTest.obj `if test -f 'HTTPConnectTest.cc'; then $(CYGPATH_W) 'HTTPConnectTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPConnectTest.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Tpo $(DEPDIR)/HTTPConnectTest-HTTPConnectTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='HTTPConnectTest.cc' object='HTTPConnectTest-HTTPConnectTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPConnectTest-HTTPConnectTest.obj `if test -f 'HTTPConnectTest.cc'; then $(CYGPATH_W) 'HTTPConnectTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPConnectTest.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HTTPConnectTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HTTPConnectTest-HTTPConnectTest.obj `if test -f 'HTTPConnectTest.cc'; then $(CYGPATH_W) 'HTTPConnectTest.cc'; else $(CYGPATH_W) '$(srcdir)/HTTPConnectTest.cc'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -1374,17 +1702,20 @@ clean-libtool:
 # (1) if the variable is set in 'config.status', edit 'config.status'
 #     (which will cause the Makefiles to be regenerated when you run 'make');
 # (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -1399,61 +1730,12 @@ $(RECURSIVE_TARGETS):
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -1469,12 +1751,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -1486,15 +1763,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -1503,9 +1776,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
 
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -1521,98 +1795,413 @@ cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-check-TESTS: $(TESTS)
-	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
-	srcdir=$(srcdir); export srcdir; \
-	list=' $(TESTS) '; \
-	$(am__tty_colors); \
-	if test -n "$$list"; then \
-	  for tst in $$list; do \
-	    if test -f ./$$tst; then dir=./; \
-	    elif test -f $$tst; then dir=; \
-	    else dir="$(srcdir)/"; fi; \
-	    if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *[\ \	]$$tst[\ \	]*) \
-		xpass=`expr $$xpass + 1`; \
-		failed=`expr $$failed + 1`; \
-		col=$$red; res=XPASS; \
-	      ;; \
-	      *) \
-		col=$$grn; res=PASS; \
-	      ;; \
-	      esac; \
-	    elif test $$? -ne 77; then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *[\ \	]$$tst[\ \	]*) \
-		xfail=`expr $$xfail + 1`; \
-		col=$$lgn; res=XFAIL; \
-	      ;; \
-	      *) \
-		failed=`expr $$failed + 1`; \
-		col=$$red; res=FAIL; \
-	      ;; \
-	      esac; \
-	    else \
-	      skip=`expr $$skip + 1`; \
-	      col=$$blu; res=SKIP; \
-	    fi; \
-	    echo "$${col}$$res$${std}: $$tst"; \
-	  done; \
-	  if test "$$all" -eq 1; then \
-	    tests="test"; \
-	    All=""; \
-	  else \
-	    tests="tests"; \
-	    All="All "; \
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
 	  fi; \
-	  if test "$$failed" -eq 0; then \
-	    if test "$$xfail" -eq 0; then \
-	      banner="$$All$$all $$tests passed"; \
-	    else \
-	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
-	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
-	    fi; \
-	  else \
-	    if test "$$xpass" -eq 0; then \
-	      banner="$$failed of $$all $$tests failed"; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	else \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
 	    else \
-	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
-	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
 	    fi; \
-	  fi; \
-	  dashes="$$banner"; \
-	  skipped=""; \
-	  if test "$$skip" -ne 0; then \
-	    if test "$$skip" -eq 1; then \
-	      skipped="($$skip test was not run)"; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
 	    else \
-	      skipped="($$skip tests were not run)"; \
+	      color_start= color_end=; \
 	    fi; \
-	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$skipped"; \
-	  fi; \
-	  report=""; \
-	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-	    report="Please report to $(PACKAGE_BUGREPORT)"; \
-	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$report"; \
-	  fi; \
-	  dashes=`echo "$$dashes" | sed s/./=/g`; \
-	  if test "$$failed" -eq 0; then \
-	    col="$$grn"; \
-	  else \
-	    col="$$red"; \
-	  fi; \
-	  echo "$${col}$$dashes$${std}"; \
-	  echo "$${col}$$banner$${std}"; \
-	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
-	  test -z "$$report" || echo "$${col}$$report$${std}"; \
-	  echo "$${col}$$dashes$${std}"; \
-	  test "$$failed" -eq 0; \
-	else :; fi
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+marshT.log: marshT$(EXEEXT)
+	@p='marshT$(EXEEXT)'; \
+	b='marshT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+arrayT.log: arrayT$(EXEEXT)
+	@p='arrayT$(EXEEXT)'; \
+	b='arrayT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+attrTableT.log: attrTableT$(EXEEXT)
+	@p='attrTableT$(EXEEXT)'; \
+	b='attrTableT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+structT.log: structT$(EXEEXT)
+	@p='structT$(EXEEXT)'; \
+	b='structT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+sequenceT.log: sequenceT$(EXEEXT)
+	@p='sequenceT$(EXEEXT)'; \
+	b='sequenceT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ddsT.log: ddsT$(EXEEXT)
+	@p='ddsT$(EXEEXT)'; \
+	b='ddsT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+dasT.log: dasT$(EXEEXT)
+	@p='dasT$(EXEEXT)'; \
+	b='dasT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+RegexTest.log: RegexTest$(EXEEXT)
+	@p='RegexTest$(EXEEXT)'; \
+	b='RegexTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ArrayTest.log: ArrayTest$(EXEEXT)
+	@p='ArrayTest$(EXEEXT)'; \
+	b='ArrayTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+AttrTableTest.log: AttrTableTest$(EXEEXT)
+	@p='AttrTableTest$(EXEEXT)'; \
+	b='AttrTableTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ByteTest.log: ByteTest$(EXEEXT)
+	@p='ByteTest$(EXEEXT)'; \
+	b='ByteTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+MIMEUtilTest.log: MIMEUtilTest$(EXEEXT)
+	@p='MIMEUtilTest$(EXEEXT)'; \
+	b='MIMEUtilTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ancT.log: ancT$(EXEEXT)
+	@p='ancT$(EXEEXT)'; \
+	b='ancT'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+DASTest.log: DASTest$(EXEEXT)
+	@p='DASTest$(EXEEXT)'; \
+	b='DASTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+DDSTest.log: DDSTest$(EXEEXT)
+	@p='DDSTest$(EXEEXT)'; \
+	b='DDSTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+DDXParserTest.log: DDXParserTest$(EXEEXT)
+	@p='DDXParserTest$(EXEEXT)'; \
+	b='DDXParserTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+generalUtilTest.log: generalUtilTest$(EXEEXT)
+	@p='generalUtilTest$(EXEEXT)'; \
+	b='generalUtilTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+HTTPConnectTest.log: HTTPConnectTest$(EXEEXT)
+	@p='HTTPConnectTest$(EXEEXT)'; \
+	b='HTTPConnectTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+parserUtilTest.log: parserUtilTest$(EXEEXT)
+	@p='parserUtilTest$(EXEEXT)'; \
+	b='parserUtilTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+RCReaderTest.log: RCReaderTest$(EXEEXT)
+	@p='RCReaderTest$(EXEEXT)'; \
+	b='RCReaderTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+SequenceTest.log: SequenceTest$(EXEEXT)
+	@p='SequenceTest$(EXEEXT)'; \
+	b='SequenceTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+SignalHandlerTest.log: SignalHandlerTest$(EXEEXT)
+	@p='SignalHandlerTest$(EXEEXT)'; \
+	b='SignalHandlerTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+MarshallerTest.log: MarshallerTest$(EXEEXT)
+	@p='MarshallerTest$(EXEEXT)'; \
+	b='MarshallerTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+HTTPCacheTest.log: HTTPCacheTest$(EXEEXT)
+	@p='HTTPCacheTest$(EXEEXT)'; \
+	b='HTTPCacheTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ServerFunctionsListUnitTest.log: ServerFunctionsListUnitTest$(EXEEXT)
+	@p='ServerFunctionsListUnitTest$(EXEEXT)'; \
+	b='ServerFunctionsListUnitTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4MarshallerTest.log: D4MarshallerTest$(EXEEXT)
+	@p='D4MarshallerTest$(EXEEXT)'; \
+	b='D4MarshallerTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4UnMarshallerTest.log: D4UnMarshallerTest$(EXEEXT)
+	@p='D4UnMarshallerTest$(EXEEXT)'; \
+	b='D4UnMarshallerTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4DimensionsTest.log: D4DimensionsTest$(EXEEXT)
+	@p='D4DimensionsTest$(EXEEXT)'; \
+	b='D4DimensionsTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4EnumDefsTest.log: D4EnumDefsTest$(EXEEXT)
+	@p='D4EnumDefsTest$(EXEEXT)'; \
+	b='D4EnumDefsTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4GroupTest.log: D4GroupTest$(EXEEXT)
+	@p='D4GroupTest$(EXEEXT)'; \
+	b='D4GroupTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4ParserSax2Test.log: D4ParserSax2Test$(EXEEXT)
+	@p='D4ParserSax2Test$(EXEEXT)'; \
+	b='D4ParserSax2Test'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4AttributesTest.log: D4AttributesTest$(EXEEXT)
+	@p='D4AttributesTest$(EXEEXT)'; \
+	b='D4AttributesTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4EnumTest.log: D4EnumTest$(EXEEXT)
+	@p='D4EnumTest$(EXEEXT)'; \
+	b='D4EnumTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+chunked_iostream_test.log: chunked_iostream_test$(EXEEXT)
+	@p='chunked_iostream_test$(EXEEXT)'; \
+	b='chunked_iostream_test'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+D4AsyncDocTest.log: D4AsyncDocTest$(EXEEXT)
+	@p='D4AsyncDocTest$(EXEEXT)'; \
+	b='D4AsyncDocTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+DMRTest.log: DMRTest$(EXEEXT)
+	@p='DMRTest$(EXEEXT)'; \
+	b='DMRTest'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -1697,6 +2286,9 @@ install-strip:
 	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
 	fi
 mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
 	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
@@ -1780,25 +2372,22 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-TESTS check-am check-local clean \
-	clean-checkPROGRAMS clean-generic clean-libtool cscopelist \
-	cscopelist-recursive ctags ctags-recursive distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-TESTS check-am check-local clean clean-checkPROGRAMS \
+	clean-generic clean-libtool cscopelist-am ctags ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am uninstall uninstall-am
 
 
 test_config.h: test_config.h.in Makefile
diff --git a/unit-tests/MarshallerTest.cc b/unit-tests/MarshallerTest.cc
index 5531834..c9a4aa4 100644
--- a/unit-tests/MarshallerTest.cc
+++ b/unit-tests/MarshallerTest.cc
@@ -11,6 +11,7 @@
 #include <unistd.h>
 #endif
 #include <fcntl.h>
+#include <pthread.h>
 
 // #define DODS_DEBUG 1
 
@@ -39,58 +40,77 @@
 #include "XDRStreamMarshaller.h"
 #include "XDRFileUnMarshaller.h"
 #include "XDRStreamUnMarshaller.h"
-#if 0
-#include "fdiostream.h"
-#endif
+#include "GetOpt.h"
+//#include "Locker.h"
 #include "debug.h"
 
-using std::cerr;
-using std::cout;
-using std::endl;
-using std::ofstream;
-using std::ifstream;
+int test_variable_sleep_interval = 0; // Used in Test* classes for testing timeouts.
+
+static bool debug = false;
+
+#undef DBG
+#define DBG(x) do { if (debug) {x;} } while(false)
+
+using namespace CppUnit;
+using namespace std;
 
-int test_variable_sleep_interval = 0; // Used in Test* classes for testing
-// timeouts.
+namespace libdap {
 
 class MarshallerTest: public CppUnit::TestFixture {
 
 CPPUNIT_TEST_SUITE( MarshallerTest );
 
-        CPPUNIT_TEST( simple_types_file_serialize_test );
-
-        CPPUNIT_TEST( array_file_serialize_test );
-        CPPUNIT_TEST( structure_file_serialize_test );
-        CPPUNIT_TEST( grid_file_serialize_test );
-        CPPUNIT_TEST( sequence_file_serialize_test );
-
-        CPPUNIT_TEST( simple_types_file_deserialize_test );
-        CPPUNIT_TEST( array_file_deserialize_test );
-        CPPUNIT_TEST( structure_file_deserialize_test );
-        CPPUNIT_TEST( grid_file_deserialize_test );
-        CPPUNIT_TEST( sequence_file_deserialize_test );
-
-        CPPUNIT_TEST( simple_types_stream_serialize_test );
-        CPPUNIT_TEST( array_stream_serialize_test );
-        CPPUNIT_TEST( structure_stream_serialize_test );
-        CPPUNIT_TEST( grid_stream_serialize_test );
-        CPPUNIT_TEST( sequence_stream_serialize_test );
-
-        CPPUNIT_TEST( simple_types_stream_deserialize_test );
-        CPPUNIT_TEST( array_stream_deserialize_test );
-        CPPUNIT_TEST( structure_stream_deserialize_test );
-        CPPUNIT_TEST( grid_stream_deserialize_test );
-        CPPUNIT_TEST( sequence_stream_deserialize_test );
-
-#if CHECKSUMS
-        CPPUNIT_TEST( simple_types_stream_serialize_checksum_test );
-        CPPUNIT_TEST( array_stream_serialize_checksum_test );
-        CPPUNIT_TEST( structure_stream_serialize_checksum_test );
-        CPPUNIT_TEST( grid_stream_serialize_checksum_test );
-#if 0
-        CPPUNIT_TEST( sequence_stream_serialize_checksum_test );
-#endif
+    CPPUNIT_TEST(simple_types_file_serialize_test);
+
+    CPPUNIT_TEST(array_file_serialize_test);
+    CPPUNIT_TEST(structure_file_serialize_test);
+    CPPUNIT_TEST(grid_file_serialize_test);
+    CPPUNIT_TEST(sequence_file_serialize_test);
+
+    CPPUNIT_TEST(simple_types_file_deserialize_test);
+    CPPUNIT_TEST(array_file_deserialize_test);
+    CPPUNIT_TEST(structure_file_deserialize_test);
+    CPPUNIT_TEST(grid_file_deserialize_test);
+    CPPUNIT_TEST(sequence_file_deserialize_test);
+
+    CPPUNIT_TEST(simple_types_stream_serialize_test);
+    CPPUNIT_TEST(array_stream_serialize_test);
+    CPPUNIT_TEST(array_stream_deserialize_test);
+
+    CPPUNIT_TEST(array_stream_serialize_test_2);
+    CPPUNIT_TEST(array_stream_serialize_test_3);
+    CPPUNIT_TEST(array_stream_serialize_test_4);
+
+    CPPUNIT_TEST(array_f32_stream_serialize_test);
+    CPPUNIT_TEST(array_f32_stream_deserialize_test);
+    CPPUNIT_TEST(array_f32_stream_serialize_test_2);
+
+    CPPUNIT_TEST(array_f64_stream_serialize_test);
+    CPPUNIT_TEST(array_f64_stream_deserialize_test);
+    CPPUNIT_TEST(array_f64_stream_serialize_test_2);
+
+    CPPUNIT_TEST(structure_stream_serialize_test);
+    CPPUNIT_TEST(grid_stream_serialize_test);
+    CPPUNIT_TEST(sequence_stream_serialize_test);
+
+    CPPUNIT_TEST(simple_types_stream_deserialize_test);
+    CPPUNIT_TEST(structure_stream_deserialize_test);
+    CPPUNIT_TEST(grid_stream_deserialize_test);
+    CPPUNIT_TEST(sequence_stream_deserialize_test);
+
+    CPPUNIT_TEST(array_stream_put_vector_thread_test);
+    CPPUNIT_TEST(array_stream_put_vector_thread_test_2);
+    CPPUNIT_TEST(array_stream_put_vector_thread_test_3);
+
+    CPPUNIT_TEST(array_stream_put_vector_thread_test_4);
+    CPPUNIT_TEST(array_stream_put_vector_thread_test_5);
+
+#if 1
+    CPPUNIT_TEST(array_stream_serialize_part_thread_test);
+    CPPUNIT_TEST(array_stream_serialize_part_thread_test_2);
+    CPPUNIT_TEST(array_stream_serialize_part_thread_test_3);
 #endif
+
     CPPUNIT_TEST_SUITE_END( );
 
     TestByte *b;
@@ -103,10 +123,18 @@ CPPUNIT_TEST_SUITE( MarshallerTest );
     TestStr *str;
     TestUrl *url;
 
+    vector<dods_byte> db;
     TestByte *ab;
-
     TestArray *arr;
 
+    vector<dods_float32> d_f32;
+    TestFloat32 *a_f32;
+    TestArray *arr_f32;
+
+    vector<dods_float64> d_f64;
+    TestFloat64 *a_f64;
+    TestArray *arr_f64;
+
     TestStructure *s;
 
     ConstraintEvaluator eval;
@@ -116,12 +144,11 @@ CPPUNIT_TEST_SUITE( MarshallerTest );
     string str_value, str2_value;
     string url_value;
 
-    dods_byte *db;
 public:
     MarshallerTest() :
-        b(0), i16(0), i32(0), ui16(0), ui32(0), f32(0), f64(0), str(0), url(0), ab(0), arr(0), s(0), dds(&ttf, "dds")
+        b(0), i16(0), i32(0), ui16(0), ui32(0), f32(0), f64(0), str(0), url(0), ab(0), arr(0), a_f32(0), arr_f32(0),
+        a_f64(0), arr_f64(0), s(0), dds(&ttf, "dds")
     {
-
         url_value = "http://dcz.gso.uri.edu/avhrr-archive/archive.html";
     }
 
@@ -154,6 +181,7 @@ public:
         url = new TestUrl("url");
         url->read();
 
+        // Array of Byte
         ab = new TestByte("ab");
         ab->read();
         arr = new TestArray("arr", ab);
@@ -162,10 +190,38 @@ public:
         arr->read();
         arr->set_read_p(true);
 
-        db = new dods_byte[arr->length() * sizeof(dods_byte)];
+        db.resize(arr->length());
         for (int i = 0; i < arr->length(); ++i)
             db[i] = 126;
-        arr->value(db);
+        arr->value(&db[0]);
+
+        // Array of Float32
+        a_f32 = new TestFloat32("a_f32");
+        a_f32->read();
+        arr_f32 = new TestArray("arr_f32", a_f32);
+        arr_f32->append_dim(5, "dim1");
+        arr_f32->append_dim(3, "dim2");
+        arr_f32->read();
+        arr_f32->set_read_p(true);
+
+        d_f32.resize(arr->length());
+        for (int i = 0; i < arr->length(); ++i)
+            d_f32[i] = 126.126;
+        arr_f32->value(&d_f32[0]);
+
+        // Array of Float64
+        a_f64 = new TestFloat64("a_f64");
+        a_f64->read();
+        arr_f64 = new TestArray("arr_f64", a_f64);
+        arr_f64->append_dim(5, "dim1");
+        arr_f64->append_dim(3, "dim2");
+        arr_f64->read();
+        arr_f64->set_read_p(true);
+
+        d_f64.resize(arr->length());
+        for (int i = 0; i < arr->length(); ++i)
+            d_f64[i] = 1260.0126;
+        arr_f64->value(&d_f64[0]);
 
         s = new TestStructure("s");
         s->add_var(i32);
@@ -176,21 +232,40 @@ public:
 
     void tearDown()
     {
-        delete b; b = 0;
-        delete i16; i16 = 0;
-        delete i32; i32 = 0;
-        delete ui16; ui16 = 0;
-        delete ui32; ui32 = 0;
-        delete f32; f32 = 0;
-        delete f64; f64 = 0;
-        delete str; str = 0;
-        delete url; url = 0;
-
-        delete ab;  ab = 0;
-
-        delete arr; arr = 0;
-        delete db; db = 0;
-        delete s; s = 0;
+        delete b;
+        b = 0;
+        delete i16;
+        i16 = 0;
+        delete i32;
+        i32 = 0;
+        delete ui16;
+        ui16 = 0;
+        delete ui32;
+        ui32 = 0;
+        delete f32;
+        f32 = 0;
+        delete f64;
+        f64 = 0;
+        delete str;
+        str = 0;
+        delete url;
+        url = 0;
+
+        delete ab;
+        ab = 0;
+        delete arr;
+        arr = 0;
+        delete a_f32;
+        ab = 0;
+        delete arr_f32;
+        arr_f32 = 0;
+        delete a_f64;
+        ab = 0;
+        delete arr_f64;
+        arr_f64 = 0;
+
+        delete s;
+        s = 0;
     }
 
     void simple_types_file_serialize_test()
@@ -209,9 +284,9 @@ public:
             str->serialize(eval, dds, fm, false);
             url->serialize(eval, dds, fm, false);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -223,45 +298,45 @@ public:
 
             Byte fb("fb");
             fb.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fb.value() == b->value() );
+            CPPUNIT_ASSERT(fb.value() == b->value());
 
             Int16 fi16("i16");
             fi16.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fi16.value() == i16->value() );
+            CPPUNIT_ASSERT(fi16.value() == i16->value());
 
             Int32 fi32("i32");
             fi32.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fi32.value() == i32->value() );
+            CPPUNIT_ASSERT(fi32.value() == i32->value());
 
             UInt16 fui16("ui16");
             fui16.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fui16.value() == ui16->value() );
+            CPPUNIT_ASSERT(fui16.value() == ui16->value());
 
             UInt32 fui32("ui32");
             fui32.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fui32.value() == ui32->value() );
+            CPPUNIT_ASSERT(fui32.value() == ui32->value());
 
             Float32 ff32("f32");
             ff32.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( ff32.value() == f32->value() );
+            CPPUNIT_ASSERT(ff32.value() == f32->value());
 
             Float64 ff64("f64");
             ff64.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( ff64.value() == f64->value() );
+            CPPUNIT_ASSERT(ff64.value() == f64->value());
 
             Str fstr("str");
             fstr.deserialize(um, &dds, false);
             // Test for the string value like this because the digit after
             // the colon changes each time the read() method is called.
-            CPPUNIT_ASSERT( fstr.value().find("Silly test string:") != string::npos );
+            CPPUNIT_ASSERT(fstr.value().find("Silly test string:") != string::npos);
 
             Url furl("url");
             furl.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( furl.value() == url_value );
+            CPPUNIT_ASSERT(furl.value() == url_value);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -272,11 +347,10 @@ public:
             XDRFileMarshaller fm(f);
 
             arr->serialize(eval, dds, fm, false);
-
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -292,15 +366,15 @@ public:
             farr.append_dim(3, "dim2");
             farr.deserialize(um, &dds, false);
 
-            CPPUNIT_ASSERT( farr.length() == arr->length() );
+            CPPUNIT_ASSERT(farr.length() == arr->length());
 
             dods_byte fdb[farr.length() * sizeof(dods_byte)];
             farr.value(fdb);
-            CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, farr.length() * sizeof( dods_byte ) ) );
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], farr.length() * sizeof(dods_byte)));
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -309,11 +383,12 @@ public:
         try {
             FILE *f = fopen("struct_test.file", "w");
             XDRFileMarshaller fm(f);
+
             s->serialize(eval, dds, fm, false);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -339,28 +414,27 @@ public:
 
             fs.deserialize(um, &dds, false);
 
-            Int32 *fsi32_p = dynamic_cast<Int32 *> (fs.var("fsi32"));
-            CPPUNIT_ASSERT( fsi32_p );
-            CPPUNIT_ASSERT( fsi32_p->value() == i32->value() );
+            Int32 *fsi32_p = dynamic_cast<Int32 *>(fs.var("fsi32"));
+            CPPUNIT_ASSERT(fsi32_p);
+            CPPUNIT_ASSERT(fsi32_p->value() == i32->value());
 
-            Str *fsstr_p = dynamic_cast<Str *> (fs.var("fsstr"));
-            CPPUNIT_ASSERT( fsstr_p );
-            DBG2(cerr << "fsstr_p->value(): " << fsstr_p->value() << endl);
-            CPPUNIT_ASSERT( fsstr_p->value().find("Silly test string:") != string::npos );
+            Str *fsstr_p = dynamic_cast<Str *>(fs.var("fsstr"));
+            CPPUNIT_ASSERT(fsstr_p); DBG2(cerr << "fsstr_p->value(): " << fsstr_p->value() << endl);
+            CPPUNIT_ASSERT(fsstr_p->value().find("Silly test string:") != string::npos);
 
             BaseType *bt = fs.var("fsab");
-            CPPUNIT_ASSERT( bt );
-            Array *fsarr_p = dynamic_cast<Array *> (bt);
-            CPPUNIT_ASSERT( fsarr_p );
+            CPPUNIT_ASSERT(bt);
+            Array *fsarr_p = dynamic_cast<Array *>(bt);
+            CPPUNIT_ASSERT(fsarr_p);
             dods_byte fdb[fsarr_p->length() * sizeof(dods_byte)];
             fsarr_p->value(fdb);
 
-            CPPUNIT_ASSERT( fsarr_p->length() == arr->length() );
-            CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, fsarr_p->length() * sizeof( dods_byte ) ) );
+            CPPUNIT_ASSERT(fsarr_p->length() == arr->length());
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], fsarr_p->length() * sizeof(dods_byte)));
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -390,9 +464,9 @@ public:
 
             tg.serialize(eval, dds, fm, false);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -419,17 +493,17 @@ public:
             tg.deserialize(um, &dds, false);
 
             // Check the values in the array
-            CPPUNIT_ASSERT( tg.get_array()->length() == arr->length() );
+            CPPUNIT_ASSERT(tg.get_array()->length() == arr->length());
 
             dods_byte fdb[tg.get_array()->length() * sizeof(dods_byte)];
             tg.get_array()->value(fdb);
-            CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, tg.get_array()->length() * sizeof( dods_byte ) ) );
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], tg.get_array()->length() * sizeof(dods_byte)));
 
             // Should test the map values here, but skip that for now...
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -454,9 +528,9 @@ public:
 
             seq.serialize(eval, dds, fm, false);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -481,41 +555,40 @@ public:
 
             seq.deserialize(um, &dds, false);
             unsigned int num_rows = seq.number_of_rows();
-            CPPUNIT_ASSERT( num_rows == 4 );
+            CPPUNIT_ASSERT(num_rows == 4);
             for (unsigned int i = 0; i < num_rows; i++) {
                 BaseTypeRow *row = seq.row_value(i);
-                CPPUNIT_ASSERT( row );
-                CPPUNIT_ASSERT( row->size() == 3 );
-                Float64 *f64_p = dynamic_cast<Float64 *> ((*row)[0]);
-                CPPUNIT_ASSERT( f64_p );
-                CPPUNIT_ASSERT( f64_p->value() == f64->value() );
-
-                Array *arr_p = dynamic_cast<Array *> ((*row)[1]);
-                CPPUNIT_ASSERT( arr_p );
+                CPPUNIT_ASSERT(row);
+                CPPUNIT_ASSERT(row->size() == 3);
+                Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]);
+                CPPUNIT_ASSERT(f64_p);
+                CPPUNIT_ASSERT(f64_p->value() == f64->value());
+
+                Array *arr_p = dynamic_cast<Array *>((*row)[1]);
+                CPPUNIT_ASSERT(arr_p);
                 arr_p->value(fdb);
-                CPPUNIT_ASSERT( arr_p->length() == arr->length() );
-                CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db,
-                                arr_p->length() * sizeof( dods_byte ) ) );
-                Sequence *seq_p = dynamic_cast<Sequence *> ((*row)[2]);
-                CPPUNIT_ASSERT( seq_p );
+                CPPUNIT_ASSERT(arr_p->length() == arr->length());
+                CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], arr_p->length() * sizeof(dods_byte)));
+                Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]);
+                CPPUNIT_ASSERT(seq_p);
                 unsigned int num_rows_sub = seq_p->number_of_rows();
-                CPPUNIT_ASSERT( num_rows == 4 );
+                CPPUNIT_ASSERT(num_rows == 4);
                 for (unsigned int j = 0; j < num_rows_sub; j++) {
                     BaseTypeRow *row_sub = seq_p->row_value(j);
-                    CPPUNIT_ASSERT( row_sub );
-                    CPPUNIT_ASSERT( row_sub->size() == 2 );
-                    UInt16 *ui16_p = dynamic_cast<UInt16 *> ((*row_sub)[0]);
-                    CPPUNIT_ASSERT( ui16_p );
-                    CPPUNIT_ASSERT( ui16_p->value() == ui16->value() );
-                    Url *url_p = dynamic_cast<Url *> ((*row_sub)[1]);
-                    CPPUNIT_ASSERT( url_p );
-                    CPPUNIT_ASSERT( url_p->value() == url->value() );
+                    CPPUNIT_ASSERT(row_sub);
+                    CPPUNIT_ASSERT(row_sub->size() == 2);
+                    UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]);
+                    CPPUNIT_ASSERT(ui16_p);
+                    CPPUNIT_ASSERT(ui16_p->value() == ui16->value());
+                    Url *url_p = dynamic_cast<Url *>((*row_sub)[1]);
+                    CPPUNIT_ASSERT(url_p);
+                    CPPUNIT_ASSERT(url_p->value() == url->value());
                 }
             }
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -545,9 +618,9 @@ public:
 
             url->serialize(eval, dds, sm, false);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -563,151 +636,392 @@ public:
 #endif
             Byte fb("fb");
             fb.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fb.value() == b->value() );
+            CPPUNIT_ASSERT(fb.value() == b->value());
 
             Int16 fi16("i16");
             fi16.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fi16.value() == i16->value() );
+            CPPUNIT_ASSERT(fi16.value() == i16->value());
 
             Int32 fi32("i32");
             fi32.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fi32.value() == i32->value() );
+            CPPUNIT_ASSERT(fi32.value() == i32->value());
 
             UInt16 fui16("ui16");
             fui16.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fui16.value() == ui16->value() );
+            CPPUNIT_ASSERT(fui16.value() == ui16->value());
 
             UInt32 fui32("ui32");
             fui32.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( fui32.value() == ui32->value() );
+            CPPUNIT_ASSERT(fui32.value() == ui32->value());
 
             Float32 ff32("f32");
             ff32.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( ff32.value() == f32->value() );
+            CPPUNIT_ASSERT(ff32.value() == f32->value());
 
             Float64 ff64("f64");
             ff64.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( ff64.value() == f64->value() );
+            CPPUNIT_ASSERT(ff64.value() == f64->value());
 
             Str fstr("str");
             fstr.deserialize(um, &dds, false);
             DBG(cerr << "fstr.value(): " << fstr.value() << endl);
-            CPPUNIT_ASSERT( fstr.value().find("Silly test string:") != string::npos );
+            CPPUNIT_ASSERT(fstr.value().find("Silly test string:") != string::npos);
 
             Url furl("url");
             furl.deserialize(um, &dds, false);
-            CPPUNIT_ASSERT( furl.value() == url_value );
+            CPPUNIT_ASSERT(furl.value() == url_value);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
+    void array_stream_serialize_test()
+    {
+        try {
+            ofstream strm("a_test.strm", ios::out | ios::trunc);
+            XDRStreamMarshaller sm(strm);
+
+            arr->serialize(eval, dds, sm, false);
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+    }
+
+    void array_stream_deserialize_test()
+    {
+        try {
 #if 0
-    // Not currently run...
-    void simple_types_fdistream_deserialize_test() {
-        try
-        {
-#if 1
-            int in = open( "st_test.strm", O_RDONLY );
-            if (in < 0)
-            throw Error("Could not open file.");
-            fdistream sin( in );
+            ifstream strm( "a_test.strm", ios::in );
+            XDRStreamUnMarshaller um( strm );
 #else
-            FILE *in = fopen("st_test.strm", "r");
-            if (!in)
-            throw Error("Could not open the file");
-            fpistream sin(in);
+            FILE *sf = fopen("a_test.strm", "r");
+            XDRFileUnMarshaller um(sf);
 #endif
-            XDRStreamUnMarshaller um( sin );
+            TestByte fab("ab");
+            TestArray farr("arr", &fab);
+            farr.append_dim(5, "dim1");
+            farr.append_dim(3, "dim2");
+            farr.deserialize(um, &dds, false);
 
-            Byte fb( "fb" );
-            fb.deserialize( um, &dds, false );
-            DBG(std::cerr << "expected: '" << b.value() << "' ; actual: '" << fb.value() << "'" << std::endl);
-            CPPUNIT_ASSERT( fb.value() == b->value() );
+            CPPUNIT_ASSERT(farr.length() == arr->length());
 
-            Int16 fi16( "i16" );
-            fi16.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( fi16.value() == i16->value() );
+            dods_byte fdb[arr->length() * sizeof(dods_byte)];
+            farr.value(fdb);
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], farr.length() * sizeof(dods_byte)));
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+    }
 
-            Int32 fi32( "i32" );
-            fi32.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( fi32.value() == i32->value() );
+    // This version of array_file_serialize_test tests the new code in Vector and
+    // Marshaller that enables an Array's serialization to be split over two or more calls.
+    void array_stream_serialize_test_2()
+    {
+        try {
+            fstream f("a_test_2.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr->length(): " << arr->length() << endl);
+            fm.put_vector_start(arr->length());
+
+            DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
+
+            switch (arr->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    fm.put_vector_part(arr->get_buf(), arr->length(), arr->var()->width(), arr->var()->type());
+                    fm.put_vector_end();
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch( Error &e ) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL( err.c_str() );
+        }
+
+        // now test the file contents to see if the correct stuff was serialized.
+        // Given that this test runs after the first array serialize test, just
+        // use system("cmp ...").
+        //int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
+        CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_2.file >/dev/null 2>&1"));
+    }
 
-            UInt16 fui16( "ui16" );
-            fui16.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( fui16.value() == ui16->value() );
+    void array_stream_serialize_test_3()
+    {
+        try {
+            fstream f("a_test_3.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr->length(): " << arr->length() << endl);
+            fm.put_vector_start(arr->length());
+
+            DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
+
+            const int size_of_first_part = 4;
+            switch (arr->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    fm.put_vector_part(arr->get_buf(), size_of_first_part, arr->var()->width(), arr->var()->type());
+                    fm.put_vector_part(arr->get_buf() + size_of_first_part, arr->length() - size_of_first_part,
+                        arr->var()->width(), arr->var()->type());
+                    fm.put_vector_end();
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
 
-            UInt32 fui32( "ui32" );
-            fui32.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( fui32.value() == ui32->value() );
+        // now test the file contents to see if the correct stuff was serialized.
+        // Given that this test runs after the first array serialize test, just
+        // use system("cmp ...").
+        //int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
+        CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_3.file >/dev/null 2>&1"));
+    }
 
-            Float32 ff32( "f32" );
-            ff32.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( ff32.value() == f32->value() );
+    void array_stream_serialize_test_4()
+    {
+        try {
+            fstream f("a_test_4.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr->length(): " << arr->length() << endl);
+            fm.put_vector_start(arr->length());
+
+            DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
+
+            const int size_of_first_part = 5;
+            switch (arr->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    fm.put_vector_part(arr->get_buf(), size_of_first_part, arr->var()->width(), arr->var()->type());
+                    fm.put_vector_part(arr->get_buf() + size_of_first_part, arr->length() - size_of_first_part,
+                        arr->var()->width(), arr->var()->type());
+                    fm.put_vector_end();
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
 
-            Float64 ff64( "f64" );
-            ff64.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( ff64.value() == f64->value() );
+        // now test the file contents to see if the correct stuff was serialized.
+        // Given that this test runs after the first array serialize test, just
+        // use system("cmp ...").
+        //int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
+        CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_4.file >/dev/null 2>&1"));
+    }
 
-            Str fstr( "str" );
-            fstr.deserialize( um, &dds, false );
-            DBG(cerr << "fstr.value(): " << fstr.value() << endl);
-            CPPUNIT_ASSERT( fstr.value().find("Silly test string:") != string::npos );
+    void array_f32_stream_serialize_test()
+    {
+        try {
+            ofstream strm("a_f32_test.file", ios::out | ios::trunc);
+            XDRStreamMarshaller sm(strm);
 
-            Url furl( "url" );
-            furl.deserialize( um, &dds, false );
-            CPPUNIT_ASSERT( furl.value() == url_value );
+            arr_f32->serialize(eval, dds, sm, false);
         }
-        catch( Error &e )
-        {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
-#endif
 
-    void array_stream_serialize_test()
+    void array_f32_stream_deserialize_test()
     {
         try {
-            ofstream strm("a_test.strm", ios::out | ios::trunc);
-            XDRStreamMarshaller sm(strm);
+#if 0
+            ifstream strm( "a_test.strm", ios::in );
+            XDRStreamUnMarshaller um( strm );
+#else
+            FILE *sf = fopen("a_f32_test.file", "r");
+            XDRFileUnMarshaller um(sf);
+#endif
+            TestFloat32 fa_f32("a_f32");
+            TestArray farr("arr_f32", &fa_f32);
+            farr.append_dim(5, "dim1");
+            farr.append_dim(3, "dim2");
+            farr.deserialize(um, &dds, false);
 
-            arr->serialize(eval, dds, sm, false);
+            CPPUNIT_ASSERT(farr.length() == arr->length());
+
+            vector<dods_float32> fd_f32(arr->length());
+            farr.value(&fd_f32[0]);
+            CPPUNIT_ASSERT(!memcmp((void * )&fd_f32[0], (void * )&d_f32[0], farr.length() * sizeof(dods_float32)));
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+    }
+
+    void array_f32_stream_serialize_test_2()
+    {
+        try {
+            fstream f("a_f32_test_2.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr_f32->length(): " << arr_f32->length() << endl);
+            fm.put_vector_start(arr_f32->length());
+
+            DBG(cerr << "&arr_f32->get_buf(): " << hex << (void *)arr_f32->get_buf() << dec << endl);
+            DBG(cerr << "arr_f32->var()->width(): " << arr_f32->var()->width() << endl);
+
+            const int size_of_first_part = 5;
+
+            switch (arr_f32->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    fm.put_vector_part(arr_f32->get_buf(), size_of_first_part, arr_f32->var()->width(),
+                        arr_f32->var()->type());
+
+                    // For this call, we have to pass the memory location of the rest of the array,
+                    // so we do a little calculation since get_buf() returns a char *. Actual code
+                    // would not need to do that.
+                    fm.put_vector_part(arr_f32->get_buf() + (size_of_first_part * arr_f32->var()->width()),
+                        arr_f32->length() - size_of_first_part, arr_f32->var()->width(), arr_f32->var()->type());
+                    fm.put_vector_end();
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
         }
         catch( Error &e ) {
             string err = "failed:" + e.get_error_message();
             CPPUNIT_FAIL( err.c_str() );
         }
+
+        // now test the file contents to see if the correct stuff was serialized.
+        // Given that this test runs after the first array serialize test, just
+        // use system("cmp ...").
+        CPPUNIT_ASSERT(0 == system("cmp a_f32_test.file a_f32_test_2.file >/dev/null 2>&1"));
     }
 
-    void array_stream_deserialize_test()
+    void array_f64_stream_serialize_test()
+    {
+        try {
+            ofstream strm("a_f64_test.file", ios::out | ios::trunc);
+            XDRStreamMarshaller sm(strm);
+
+            arr_f64->serialize(eval, dds, sm, false);
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+    }
+
+    void array_f64_stream_deserialize_test()
     {
         try {
 #if 0
             ifstream strm( "a_test.strm", ios::in );
             XDRStreamUnMarshaller um( strm );
 #else
-            FILE *sf = fopen("a_test.strm", "r");
+            FILE *sf = fopen("a_f64_test.file", "r");
             XDRFileUnMarshaller um(sf);
 #endif
-            TestByte fab("ab");
-            TestArray farr("arr", &fab);
+            TestFloat64 fa_f64("a_f64");
+            TestArray farr("arr_f64", &fa_f64);
             farr.append_dim(5, "dim1");
             farr.append_dim(3, "dim2");
             farr.deserialize(um, &dds, false);
 
-            CPPUNIT_ASSERT( farr.length() == arr->length() );
+            CPPUNIT_ASSERT(farr.length() == arr->length());
 
-            dods_byte fdb[arr->length() * sizeof(dods_byte)];
-            farr.value(fdb);
-            CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, farr.length() * sizeof( dods_byte ) ) );
+            vector<dods_float64> fd_f64(arr->length());
+            farr.value(&fd_f64[0]);
+            CPPUNIT_ASSERT(!memcmp((void * )&fd_f64[0], (void * )&d_f64[0], farr.length() * sizeof(dods_float64)));
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+    }
+
+    void array_f64_stream_serialize_test_2()
+    {
+        try {
+            fstream f("a_f64_test_2.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr_f64->length(): " << arr_f64->length() << endl);
+            fm.put_vector_start(arr_f64->length());
+
+            DBG(cerr << "&arr_f64->get_buf(): " << hex << (void *)arr_f64->get_buf() << dec << endl);
+            DBG(cerr << "arr_f64->var()->width(): " << arr_f64->var()->width() << endl);
+
+            const int size_of_first_part = 5;
+
+            switch (arr_f64->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    fm.put_vector_part(arr_f64->get_buf(), size_of_first_part, arr_f64->var()->width(),
+                        arr_f64->var()->type());
+
+                    // For this call, we have to pass the memory location of the rest of the array,
+                    // so we do a little calculation since get_buf() returns a char *. Actual code
+                    // would not need to do that.
+                    fm.put_vector_part(arr_f64->get_buf() + (size_of_first_part * arr_f64->var()->width()),
+                        arr_f64->length() - size_of_first_part, arr_f64->var()->width(), arr_f64->var()->type());
+                    fm.put_vector_end();
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
         }
         catch( Error &e ) {
             string err = "failed:" + e.get_error_message();
             CPPUNIT_FAIL( err.c_str() );
         }
+
+        // now test the file contents to see if the correct stuff was serialized.
+        // Given that this test runs after the first array serialize test, just
+        // use system("cmp ...").
+        CPPUNIT_ASSERT(0 == system("cmp a_f64_test.file a_f64_test_2.file >/dev/null 2>&1"));
     }
 
     void structure_stream_serialize_test()
@@ -717,9 +1031,9 @@ public:
             XDRStreamMarshaller sm(strm);
             s->serialize(eval, dds, sm, false);
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -748,27 +1062,27 @@ public:
 
             fs.deserialize(um, &dds, false);
 
-            Int32 *fsi32_p = dynamic_cast<Int32 *> (fs.var("fsi32"));
-            CPPUNIT_ASSERT( fsi32_p );
-            CPPUNIT_ASSERT( fsi32_p->value() == i32->value() );
+            Int32 *fsi32_p = dynamic_cast<Int32 *>(fs.var("fsi32"));
+            CPPUNIT_ASSERT(fsi32_p);
+            CPPUNIT_ASSERT(fsi32_p->value() == i32->value());
 
-            Str *fsstr_p = dynamic_cast<Str *> (fs.var("fsstr"));
-            CPPUNIT_ASSERT( fsstr_p );
+            Str *fsstr_p = dynamic_cast<Str *>(fs.var("fsstr"));
+            CPPUNIT_ASSERT(fsstr_p);
             DBG(cerr << "fsstr_p->value(): " << fsstr_p->value() << endl);
-            CPPUNIT_ASSERT( fsstr_p->value().find("Silly test string:") != string::npos );
+            CPPUNIT_ASSERT(fsstr_p->value().find("Silly test string:") != string::npos);
 
             BaseType *bt = fs.var("fsab");
-            CPPUNIT_ASSERT( bt );
-            Array *fsarr_p = dynamic_cast<Array *> (bt);
-            CPPUNIT_ASSERT( fsarr_p );
-            CPPUNIT_ASSERT( fsarr_p->length() == arr->length() );
+            CPPUNIT_ASSERT(bt);
+            Array *fsarr_p = dynamic_cast<Array *>(bt);
+            CPPUNIT_ASSERT(fsarr_p);
+            CPPUNIT_ASSERT(fsarr_p->length() == arr->length());
             dods_byte fdb[fsarr_p->length() * sizeof(dods_byte)];
             fsarr_p->value(fdb);
-            CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, fsarr_p->length() * sizeof( dods_byte ) ) );
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], fsarr_p->length() * sizeof(dods_byte)));
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -797,12 +1111,10 @@ public:
             tg.set_read_p(true);
 
             tg.serialize(eval, dds, sm, false);
-
-            // strm.close() ;
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -833,19 +1145,15 @@ public:
             tg.deserialize(um, &dds, false);
 
             // Check the values in the array
-            CPPUNIT_ASSERT( tg.get_array()->length() == arr->length() );
+            CPPUNIT_ASSERT(tg.get_array()->length() == arr->length());
 
             dods_byte fdb[tg.get_array()->length() * sizeof(dods_byte)];
             tg.get_array()->value(fdb);
-            CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, tg.get_array()->length() * sizeof( dods_byte ) ) );
-
-            // Should test the map values here, but skip that for now...
-
-            // fclose( sf ) ;
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], tg.get_array()->length() * sizeof(dods_byte)));
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -868,12 +1176,10 @@ public:
             seq.set_leaf_sequence();
 
             seq.serialize(eval, dds, sm, false);
-
-            // strm.close() ;
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
     }
 
@@ -904,103 +1210,140 @@ public:
             seq.deserialize(um, &dds, false);
 
             unsigned int num_rows = seq.number_of_rows();
-            CPPUNIT_ASSERT( num_rows == 4 );
+            CPPUNIT_ASSERT(num_rows == 4);
             for (unsigned int i = 0; i < num_rows; i++) {
                 BaseTypeRow *row = seq.row_value(i);
-                CPPUNIT_ASSERT( row );
-                CPPUNIT_ASSERT( row->size() == 3 );
-                Float64 *f64_p = dynamic_cast<Float64 *> ((*row)[0]);
-                CPPUNIT_ASSERT( f64_p );
-                CPPUNIT_ASSERT( f64_p->value() == f64->value() );
-                Array *arr_p = dynamic_cast<Array *> ((*row)[1]);
-                CPPUNIT_ASSERT( arr_p );
+                CPPUNIT_ASSERT(row);
+                CPPUNIT_ASSERT(row->size() == 3);
+                Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]);
+                CPPUNIT_ASSERT(f64_p);
+                CPPUNIT_ASSERT(f64_p->value() == f64->value());
+                Array *arr_p = dynamic_cast<Array *>((*row)[1]);
+                CPPUNIT_ASSERT(arr_p);
                 arr_p->value(fdb);
-                CPPUNIT_ASSERT( arr_p->length() == arr->length() );
-                CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db,
-                                arr_p->length() * sizeof( dods_byte ) ) );
-                Sequence *seq_p = dynamic_cast<Sequence *> ((*row)[2]);
-                CPPUNIT_ASSERT( seq_p );
+                CPPUNIT_ASSERT(arr_p->length() == arr->length());
+                CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], arr_p->length() * sizeof(dods_byte)));
+                Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]);
+                CPPUNIT_ASSERT(seq_p);
                 unsigned int num_rows_sub = seq_p->number_of_rows();
-                CPPUNIT_ASSERT( num_rows == 4 );
+                CPPUNIT_ASSERT(num_rows == 4);
                 for (unsigned int j = 0; j < num_rows_sub; j++) {
                     BaseTypeRow *row_sub = seq_p->row_value(j);
-                    CPPUNIT_ASSERT( row_sub );
-                    CPPUNIT_ASSERT( row_sub->size() == 2 );
-                    UInt16 *ui16_p = dynamic_cast<UInt16 *> ((*row_sub)[0]);
-                    CPPUNIT_ASSERT( ui16_p );
-                    CPPUNIT_ASSERT( ui16_p->value() == ui16->value() );
-                    Url *url_p = dynamic_cast<Url *> ((*row_sub)[1]);
-                    CPPUNIT_ASSERT( url_p );
-                    CPPUNIT_ASSERT( url_p->value() == url->value() );
+                    CPPUNIT_ASSERT(row_sub);
+                    CPPUNIT_ASSERT(row_sub->size() == 2);
+                    UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]);
+                    CPPUNIT_ASSERT(ui16_p);
+                    CPPUNIT_ASSERT(ui16_p->value() == ui16->value());
+                    Url *url_p = dynamic_cast<Url *>((*row_sub)[1]);
+                    CPPUNIT_ASSERT(url_p);
+                    CPPUNIT_ASSERT(url_p->value() == url->value());
                 }
             }
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+    }
 
-            // fclose( sf ) ;
+    // Test put_vector and its operation, both with and without using
+    // pthreads
+    void array_stream_put_vector_thread_test()
+    {
+        try {
+            fstream f("a_test_pv.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            switch (arr->var()->type()) {
+                case dods_byte_c: {
+                    fm.put_vector/*_thread*/(arr->get_buf(), arr->length(), *arr);
+                    break;
+                }
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is a byte array.");
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
         }
         catch( Error &e ) {
             string err = "failed:" + e.get_error_message();
             CPPUNIT_FAIL( err.c_str() );
         }
-    }
 
-#if CHECKSUMS
-    // Check sum tests
+        //int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
+        CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_pv.file >/dev/null 2>&1"));
+    }
 
-    void simple_types_stream_serialize_checksum_test()
+    // This test doesn't actually check its result - fix or replace
+    void array_stream_put_vector_thread_test_2()
     {
         try {
-            ofstream strm("st_test.strm", ios::out | ios::trunc);
-            XDRStreamMarshaller sm(strm, true);
-
-            sm.reset_checksum();
-            b->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "85e53271e14006f0265921d02d4d736cdc580b0b");
+            fstream f("a_test_pv_2.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            switch (arr->var()->type()) {
+                case dods_byte_c: {
+                    DBG(cerr << "arr->get_buf(): " << hex << (void*)arr->get_buf() << dec << endl);
+
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    break;
+                }
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is a byte array.");
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch( Error &e ) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL( err.c_str() );
+        }
 
-            sm.reset_checksum();
-            i16->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "fb7cc6f64453ad5a9926a1ba40955198004f6b31");
+        try{
+            FILE *sf = fopen("a_test_pv_2.file", "r");
+            XDRFileUnMarshaller um(sf);
 
-            sm.reset_checksum();
-            i32->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "d245351a7b5cf9244f146fa0763b4dd036245666");
+            TestByte fab("ab");
+            TestArray farr("farr", &fab);
+            farr.append_dim(5, "dim1");
+            farr.append_dim(3, "dim2");
+            farr.deserialize(um, &dds, false);
 
-            sm.reset_checksum();
-            ui16->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "f1e39479b3f84f40a6dca061ace8c910036cb867");
+            CPPUNIT_ASSERT(farr.length() == arr->length());
 
-            sm.reset_checksum();
-            ui32->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "0d75307097b3f51d5b327f59e775165d4b1bfefa");
+            dods_byte fdb[arr->length() * sizeof(dods_byte)];
+            farr.value(fdb);
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], farr.length() * sizeof(dods_byte)));
 
-            sm.reset_checksum();
-            f32->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "16b84e7d293b3a53ceb97b9e50999b7ca2d17204");
+            // now get three more arrays of the same size
+            farr.deserialize(um, &dds, false);
+            farr.value(fdb);
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], farr.length() * sizeof(dods_byte)));
 
-            sm.reset_checksum();
-            f64->serialize(eval, dds, sm, false);
-            DBG(cerr << sm.get_checksum() << endl);
-            CPPUNIT_ASSERT(sm.get_checksum() == "e8f339d9807f4998d8dc11e4c9d6f2ed05ca50cb");
+            farr.deserialize(um, &dds, false);
+            farr.value(fdb);
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], farr.length() * sizeof(dods_byte)));
 
-            sm.reset_checksum();
-            str->serialize(eval, dds, sm, false);
-            string cs = sm.get_checksum();
-            DBG(cerr << "cs: " << cs << endl);
-            // This value changes with the number of times str is serialized
-            // since the TestStr class returns different values for each call
-            // to read().
-            CPPUNIT_ASSERT(cs == "77b52cf559aec21b5bb06785693c915cdd7983c3");
-
-            sm.reset_checksum();
-            url->serialize(eval, dds, sm, false);
-            cs = sm.get_checksum();
-            DBG(cerr << "cs: " << cs << endl);
-            CPPUNIT_ASSERT(cs == "18c61893206349dfc1ee4d030cfa18f924d44571");
+            farr.deserialize(um, &dds, false);
+            farr.value(fdb);
+            CPPUNIT_ASSERT(!memcmp((void * )fdb, (void * )&db[0], farr.length() * sizeof(dods_byte)));
         }
         catch( Error &e ) {
             string err = "failed:" + e.get_error_message();
@@ -1008,73 +1351,137 @@ public:
         }
     }
 
-    void array_stream_serialize_checksum_test()
+    void array_stream_put_vector_thread_test_3()
     {
         try {
-            ofstream strm("a_test.strm", ios::out | ios::trunc);
-            XDRStreamMarshaller sm(strm, true);
-
-            sm.reset_checksum();
-            arr->serialize(eval, dds, sm, false);
-            string cs = sm.get_checksum();
-
-            DBG(cerr << cs << endl);
-            CPPUNIT_ASSERT(cs == "9f39fdfeaf3d34181b346e2eec26abe9d9cdde3a");
+            fstream f("a_test_pv_3.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            switch (arr->var()->type()) {
+                case dods_byte_c: {
+                    DBG(cerr << "arr->get_buf(): " << hex << (void*)arr->get_buf() << dec << endl);
+
+                    // test sequencing of threads and non-threaded calls. Note that for the
+                    // non-threaded calls, we pass a _reference_ to the object and it's an
+                    // ignored parameter (left over cruft...).
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+                    fm.put_vector(arr->get_buf(), arr->length(), *arr);
+
+                    // No need to wait since put_vector() should be doing that
+                    break;
+                }
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c:
+                    throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is a byte array.");
+                    break;
+
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
         }
         catch( Error &e ) {
             string err = "failed:" + e.get_error_message();
             CPPUNIT_FAIL( err.c_str() );
         }
+
+        // this should be identical to the output from pv_2 (the previous test).
+        CPPUNIT_ASSERT(0 == system("cmp a_test_pv_2.file a_test_pv_3.file >/dev/null 2>&1"));
     }
 
-    void structure_stream_serialize_checksum_test()
+    void array_stream_put_vector_thread_test_4()
     {
         try {
-            ofstream strm("struct_test.strm", ios::out | ios::trunc);
-            XDRStreamMarshaller sm(strm, true);
-            sm.reset_checksum();
-            s->serialize(eval, dds, sm, false);
-            string cs = sm.get_checksum();
+            fstream f("a_f32_test_pv.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            switch (arr_f32->var()->type()) {
+            case dods_byte_c:
+                throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is not a byte array.");
+                break;
+            case dods_int16_c:
+            case dods_uint16_c:
+            case dods_int32_c:
+            case dods_uint32_c:
+            case dods_float32_c:
+            case dods_float64_c: {
+                DBG(cerr << "arr_f32->get_buf(): " << hex << (void* )arr_f32->get_buf() << dec << endl);
+
+                fm.put_vector(arr_f32->get_buf(), arr_f32->length(), arr_f32->var()->width(), *arr_f32);
+
+                break;
+            }
 
-            DBG(cerr << cs << endl);
-            CPPUNIT_ASSERT(cs == "9f39fdfeaf3d34181b346e2eec26abe9d9cdde3a");
+            default:
+                throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
+
+        CPPUNIT_ASSERT(0 == system("cmp a_f32_test.file a_f32_test_pv.file >/dev/null 2>&1"));
     }
 
-    void grid_stream_serialize_checksum_test()
+    void array_stream_put_vector_thread_test_5()
     {
         try {
-            ofstream strm("g_test.strm", ios::out | ios::trunc);
-            XDRStreamMarshaller sm(strm, true);
+            fstream f("a_f32_test_pv_2.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            switch (arr_f32->var()->type()) {
+            case dods_byte_c:
+                throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is not a byte array.");
+                break;
+            case dods_int16_c:
+            case dods_uint16_c:
+            case dods_int32_c:
+            case dods_uint32_c:
+            case dods_float32_c:
+            case dods_float64_c: {
+                DBG(cerr << "arr_f32->get_buf(): " << hex << (void* )arr_f32->get_buf() << dec << endl);
+
+                fm.put_vector(arr_f32->get_buf(), arr_f32->length(), arr_f32->var()->width(), *arr_f32);
+                fm.put_vector(arr_f32->get_buf(), arr_f32->length(), arr_f32->var()->width(), *arr_f32);
+
+                break;
+            }
 
-            TestGrid tg("grid1");
-            TestArray arr2("arr2", ab);
-            arr2.append_dim(5, "dim1");
-            arr2.append_dim(3, "dim2");
-            tg.add_var(&arr2, array);
+            default:
+                throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
 
-            TestArray map1("map1", f32);
-            map1.append_dim(5, "dim1");
-            tg.add_var(&map1, maps);
+        try{
+            FILE *sf = fopen("a_f32_test_pv_2.file", "r");
+            XDRFileUnMarshaller um(sf);
 
-            TestArray map2("map2", f32);
-            map2.append_dim(3, "dim2");
-            tg.add_var(&map2, maps);
+            TestFloat32 fa_32("fa_32");
+            TestArray farr("farr", &fa_32);
+            farr.append_dim(5, "dim1");
+            farr.append_dim(3, "dim2");
+            farr.deserialize(um, &dds, false);
 
-            tg.set_send_p(true);
-            tg.read();
-            tg.set_read_p(true);
+            CPPUNIT_ASSERT(farr.length() == arr->length());
 
-            sm.reset_checksum();
-            tg.serialize(eval, dds, sm, false);
-            string cs = sm.get_checksum();
+            dods_float32 fd_32[arr->length() * sizeof(dods_float32)];
+            farr.value(fd_32);
+            CPPUNIT_ASSERT(!memcmp((void * )fd_32, (void * )&d_f32[0], farr.length() * sizeof(dods_float32)));
 
-            DBG(cerr << cs << endl);
-            CPPUNIT_ASSERT(cs == "ed67de94237ec33d220d8fb75734c195d64d4794");
+            // now get three more arrays of the same size
+            farr.deserialize(um, &dds, false);
+            farr.value(fd_32);
+            CPPUNIT_ASSERT(!memcmp((void * )fd_32, (void * )&d_f32[0], farr.length() * sizeof(dods_byte)));
         }
         catch( Error &e ) {
             string err = "failed:" + e.get_error_message();
@@ -1082,50 +1489,168 @@ public:
         }
     }
 
-    // This test is broken because Sequence::serialize() does not
-    // properly call the checksum methods.
-    void sequence_stream_serialize_checksum_test()
+    void array_stream_serialize_part_thread_test()
     {
         try {
-            ofstream strm("seq_test.strm", ios::out | ios::trunc);
-            XDRStreamMarshaller sm(strm, true);
+            fstream f("a_test_ptv.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr->length(): " << arr->length() << endl);
+            fm.put_vector_start(arr->length());
+
+            DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
+
+            const int size_of_first_part = 5;
+            switch (arr->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c: {
+                    fm.put_vector_part(arr->get_buf(), size_of_first_part, arr->var()->width(), arr->var()->type());
+
+                    fm.put_vector_part(arr->get_buf() + size_of_first_part, arr->length() - size_of_first_part,
+                        arr->var()->width(), arr->var()->type());
+
+                    fm.put_vector_end();    // forces a wait on the thread
+                    break;
+                }
 
-            TestSequence seq("seq");
-            seq.add_var(f64);
-            seq.add_var(arr);
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
 
-            TestSequence seq2("seq2");
-            seq2.add_var(ui16);
-            seq2.add_var(url);
-            seq.add_var(&seq2);
+        CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_ptv.file >/dev/null 2>&1"));
+    }
 
-            seq.set_send_p(true);
-            seq.set_leaf_sequence();
+    void array_stream_serialize_part_thread_test_2()
+    {
+        try {
+            fstream f("a_f32_test_ptv.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr_f32->length(): " << arr_f32->length() << endl);
+            fm.put_vector_start(arr_f32->length());
+
+            DBG(cerr << "arr_f32->var()->width(): " << arr_f32->var()->width() << endl);
+
+            const int size_of_first_part = 5;
+            switch (arr_f32->var()->type()) {
+                case dods_byte_c:
+                case dods_int16_c:
+                case dods_uint16_c:
+                case dods_int32_c:
+                case dods_uint32_c:
+                case dods_float32_c:
+                case dods_float64_c: {
+                    fm.put_vector_part(arr_f32->get_buf(), size_of_first_part, arr_f32->var()->width(), arr_f32->var()->type());
+
+                    fm.put_vector_part(arr_f32->get_buf() + (size_of_first_part * arr_f32->var()->width()),
+                        arr_f32->length() - size_of_first_part, arr_f32->var()->width(), arr_f32->var()->type());
+
+                    fm.put_vector_end();    // forces a wait on the thread
+                    break;
+                }
 
-            sm.reset_checksum();
-            seq.serialize(eval, dds, sm, false);
-            string cs = sm.get_checksum();
+                default:
+                    throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
 
-            DBG(cerr << cs << endl);
-            CPPUNIT_ASSERT(cs == "7b99e35c2fb361eb27f51aec30fc2a17ac8cda50");
         }
-        catch( Error &e ) {
+        catch (Error &e) {
             string err = "failed:" + e.get_error_message();
-            CPPUNIT_FAIL( err.c_str() );
+            CPPUNIT_FAIL(err.c_str());
         }
+
+        CPPUNIT_ASSERT(0 == system("cmp a_f32_test.file a_f32_test_ptv.file >/dev/null 2>&1"));
+    }
+
+    void array_stream_serialize_part_thread_test_3()
+    {
+        try {
+            fstream f("a_f64_test_ptv.file", fstream::out);
+            XDRStreamMarshaller fm(f);
+
+            DBG(cerr << "arr_f64->length(): " << arr_f64->length() << endl);
+            fm.put_vector_start(arr_f64->length());
+
+            DBG(cerr << "arr_f64->var()->width(): " << arr_f64->var()->width() << endl);
+
+            const int size_of_first_part = 5;
+            switch (arr_f64->var()->type()) {
+            case dods_byte_c:
+            case dods_int16_c:
+            case dods_uint16_c:
+            case dods_int32_c:
+            case dods_uint32_c:
+            case dods_float32_c:
+            case dods_float64_c:
+                fm.put_vector_part(arr_f64->get_buf(), size_of_first_part, arr_f64->var()->width(),
+                    arr_f64->var()->type());
+
+                fm.put_vector_part(arr_f64->get_buf() + (size_of_first_part * arr_f64->var()->width()),
+                    arr_f64->length() - size_of_first_part, arr_f64->var()->width(), arr_f64->var()->type());
+
+                fm.put_vector_end();    // forces a wait on the thread
+                break;
+
+            default:
+                throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
+            }
+        }
+        catch (Error &e) {
+            string err = "failed:" + e.get_error_message();
+            CPPUNIT_FAIL(err.c_str());
+        }
+
+        CPPUNIT_ASSERT(0 == system("cmp a_f64_test.file a_f64_test_ptv.file >/dev/null 2>&1"));
     }
-#endif
 };
 
-CPPUNIT_TEST_SUITE_REGISTRATION( MarshallerTest ) ;
+CPPUNIT_TEST_SUITE_REGISTRATION( MarshallerTest );
 
-int main(int, char **)
+} // namepsace libdap
+
+int main(int argc, char*argv[])
 {
-    CppUnit::TextUi::TestRunner runner;
-    CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
-    runner.addTest(registry.makeTest());
-    runner.setOutputter(CppUnit::CompilerOutputter::defaultOutputter(&runner.result(), std::cerr));
-    bool wasSuccessful = runner.run("", false);
+    CppUnit::TextTestRunner runner;
+    runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
+
+    GetOpt getopt(argc, argv, "d");
+    int option_char;
+
+    while ((option_char = getopt()) != -1)
+        switch (option_char) {
+        case 'd':
+            debug = 1;  // debug is a static global
+            break;
+        default:
+            break;
+        }
+
+    bool wasSuccessful = true;
+    string test = "";
+    int i = getopt.optind;
+    if (i == argc) {
+        // run them all
+        wasSuccessful = runner.run("");
+    }
+    else {
+        while (i < argc) {
+            test = string("libdap::MarshallerTest::") + argv[i++];
+            DBG(cerr << "test: " << test << endl);
+            wasSuccessful = wasSuccessful && runner.run(test);
+        }
+    }
+
+    xmlMemoryDump();
+
     return wasSuccessful ? 0 : 1;
 }
-
diff --git a/unit-tests/RCReaderTest.cc b/unit-tests/RCReaderTest.cc
index 6433212..a0008cc 100644
--- a/unit-tests/RCReaderTest.cc
+++ b/unit-tests/RCReaderTest.cc
@@ -326,9 +326,9 @@ public:
         RCReader::delete_instance();
         RCReader::initialize_instance();
         RCReader *reader = RCReader::instance();
+        reader->read_rc_file(string(TEST_SRC_DIR) + "/rcreader-testsuite/dodssrc_ssl_1");
         // No param set in file
-        DBG(cerr << "reader->get_validate_ssl(): " << reader->get_validate_ssl()
-                << endl);
+        DBG(cerr << "reader->get_validate_ssl(): " << reader->get_validate_ssl() << endl);
         CPPUNIT_ASSERT(reader->get_validate_ssl() == 1);
 
         // Param set in file
@@ -374,9 +374,9 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
             case 'd':
                 debug = 1;  // debug is a static global
diff --git a/unit-tests/SequenceTest.cc b/unit-tests/SequenceTest.cc
index ed4d3fc..907d811 100644
--- a/unit-tests/SequenceTest.cc
+++ b/unit-tests/SequenceTest.cc
@@ -423,7 +423,7 @@ int main(int argc, char*argv[]) {
 
     GetOpt getopt(argc, argv, "d");
     int option_char;
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/ServerFunctionsListUnitTest.cc b/unit-tests/ServerFunctionsListUnitTest.cc
index 0278b8f..098c0f6 100644
--- a/unit-tests/ServerFunctionsListUnitTest.cc
+++ b/unit-tests/ServerFunctionsListUnitTest.cc
@@ -184,7 +184,7 @@ int main(int argc, char*argv[]) {
 
     GetOpt getopt(argc, argv, "d");
     int option_char;
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/SignalHandlerTest.cc b/unit-tests/SignalHandlerTest.cc
index b2ddcef..bf03501 100644
--- a/unit-tests/SignalHandlerTest.cc
+++ b/unit-tests/SignalHandlerTest.cc
@@ -133,9 +133,9 @@ int main(int argc, char*argv[]) {
     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
         case 'd':
             debug = 1;  // debug is a static global
diff --git a/unit-tests/cache-testsuite/Makefile.in b/unit-tests/cache-testsuite/Makefile.in
index bd60d6d..ac47212 100644
--- a/unit-tests/cache-testsuite/Makefile.in
+++ b/unit-tests/cache-testsuite/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.12 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,23 +15,51 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -51,9 +78,10 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = unit-tests/cache-testsuite
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
+	$(top_srcdir)/gl/m4/absolute-header.m4 \
 	$(top_srcdir)/gl/m4/alloca.m4 $(top_srcdir)/gl/m4/btowc.m4 \
 	$(top_srcdir)/gl/m4/byteswap.m4 $(top_srcdir)/gl/m4/codeset.m4 \
 	$(top_srcdir)/gl/m4/configmake.m4 \
@@ -74,8 +102,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gl/m4/00gnulib.m4 \
 	$(top_srcdir)/gl/m4/locale-zh.m4 \
 	$(top_srcdir)/gl/m4/locale_h.m4 \
 	$(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
-	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
-	$(top_srcdir)/gl/m4/mbrtowc.m4 $(top_srcdir)/gl/m4/mbsinit.m4 \
+	$(top_srcdir)/gl/m4/longlong.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \
+	$(top_srcdir)/gl/m4/mbsinit.m4 \
 	$(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \
 	$(top_srcdir)/gl/m4/multiarch.m4 \
 	$(top_srcdir)/gl/m4/nl_langinfo.m4 \
@@ -105,6 +133,18 @@ CONFIG_HEADER = $(top_builddir)/config.h \
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SCRIPTS = $(noinst_SCRIPTS)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
 am__can_run_installinfo = \
@@ -112,12 +152,14 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AR = @AR@
 ARFLAGS = @ARFLAGS@
@@ -229,6 +271,7 @@ GNULIB_PTSNAME = @GNULIB_PTSNAME@
 GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_READ = @GNULIB_READ@
@@ -346,6 +389,7 @@ HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
@@ -554,9 +598,11 @@ REPLACE_PTSNAME = @REPLACE_PTSNAME@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_RMDIR = @REPLACE_RMDIR@
@@ -566,6 +612,7 @@ REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
 REPLACE_UNLINK = @REPLACE_UNLINK@
@@ -709,11 +756,9 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
@@ -852,16 +897,16 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	clean-local distclean distclean-generic distclean-libtool \
-	distdir dvi dvi-am html html-am info info-am install \
-	install-am install-data install-data-am install-dvi \
+	clean-local cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
 	install-dvi-am install-exec install-exec-am install-html \
 	install-html-am install-info install-info-am install-man \
 	install-pdf install-pdf-am install-ps install-ps-am \
 	install-strip installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	uninstall uninstall-am
+	tags-am uninstall uninstall-am
 
 
 cleanup.sh: cleanup.sh.in ../../config.status
diff --git a/unit-tests/chunked_iostream_test.cc b/unit-tests/chunked_iostream_test.cc
index f5ce119..d9ae0d9 100644
--- a/unit-tests/chunked_iostream_test.cc
+++ b/unit-tests/chunked_iostream_test.cc
@@ -530,9 +530,9 @@ int
 main(int argc, char *argv[])
 {
     GetOpt getopt(argc, argv, "d");
-    char option_char;
+    int option_char;
 
-    while ((option_char = getopt()) != EOF)
+    while ((option_char = getopt()) != -1)
         switch (option_char) {
             case 'd':
                 debug = 1;  // debug is a static global
diff --git a/unit-tests/marshT.cc b/unit-tests/marshT.cc
index adaef90..fc54162 100644
--- a/unit-tests/marshT.cc
+++ b/unit-tests/marshT.cc
@@ -33,454 +33,402 @@
 #include "XDRStreamMarshaller.h"
 #include "XDRFileUnMarshaller.h"
 
-using std::cerr ;
-using std::cout ;
-using std::endl ;
-using std::ofstream ;
+#include "GetOpt.h"
+#include "debug.h"
 
-int test_variable_sleep_interval = 0; // Used in Test* classes for testing
-				      // timeouts. 
+using std::cerr;
+using std::cout;
+using std::endl;
+using std::ofstream;
 
-class marshT : public CppUnit::TestFixture {
+int test_variable_sleep_interval = 0; // Used in Test* classes for testing timeouts.
 
-CPPUNIT_TEST_SUITE( marshT ) ;
-CPPUNIT_TEST( marshT_test ) ;
-CPPUNIT_TEST_SUITE_END( ) ;
+static bool debug = false;
 
-public:
-    void setUp()
-    {
-    }
+#undef DBG
+#define DBG(x) do { if (debug) {x;} } while(false)
 
-    void tearDown() 
-    {
-    }
+/**
+ * This test has been rewritten so that it no longer depends on the values
+ * of Array remaining in place (in the Array object) once serialize() is run.
+ * This is part of a change in libdap that will reduce memory consumption
+ * when serializing datasets with large numbers of (large) variables.
+ * jhrg 8/4/15
+ */
+class marshT: public CppUnit::TestFixture
+{
+private:
+	TestByte *b;
+	TestInt16 *i16;
+	TestInt32 *i32;
+	TestUInt16 *ui16;
+	TestUInt32 *ui32;
+	TestFloat32 *f32;
+	TestFloat64 *f64;
+	TestStr *str;
+	TestUrl *url;
+	TestByte *ab;
+
+	TestArray *arr;
+
+	TestStructure *s;
 
-    void marshT_test()
-    {
-	TestByte b( "byte" ) ;
-	TestInt16 i16( "i16" ) ;
-	TestInt32 i32( "i32" ) ;
-	TestUInt16 ui16( "ui16" ) ;
-	TestUInt32 ui32( "ui32" ) ;
-	TestFloat32 f32( "f32" ) ;
-	TestFloat64 f64( "f64" ) ;
-	TestStr str( "str" ) ;
-	TestUrl url( "url" ) ;
-	TestByte ab( "ab" ) ;
-
-	TestArray arr( "arr", &ab ) ;
-	arr.append_dim( 5, "dim1" ) ;
-	arr.append_dim( 3, "dim2" ) ;
-
-	TestStructure s( "s" ) ;
-	s.add_var( &i32 ) ;
-	s.add_var( &str ) ;
-	Str *str_p = dynamic_cast<Str *>(s.var( "str" )) ;
-	s.add_var( &arr ) ;
-	s.set_send_p( true ) ;
-
-	ConstraintEvaluator eval ;
-	TestTypeFactory ttf ;
-	DataDDS dds( &ttf, "dds" ) ;
-
-	try
+	TestSequence *seq, *seq2;
+
+public:
+	marshT() : b(0), i16(0), i32(0),
+	ui16(0), ui32(0), f32(0), f64(0),
+	str(0), url(0), ab(0), arr(0), s(0),
+	seq(0), seq2(0)
 	{
-	    cout << "serializing using XDRFileMarshaller" << endl ;
-	    FILE *f = fopen( "test.file", "w" ) ;
-	    XDRFileMarshaller fm( f ) ;
-	    cout << " file byte" << endl ;
-	    b.serialize( eval, dds, fm, false ) ;
-	    cout << " file int16" << endl ;
-	    i16.serialize( eval, dds, fm, false ) ;
-	    cout << " file int32" << endl ;
-	    i32.serialize( eval, dds, fm, false ) ;
-	    cout << " file uint16" << endl ;
-	    ui16.serialize( eval, dds, fm, false ) ;
-	    cout << " file uint32" << endl ;
-	    ui32.serialize( eval, dds, fm, false ) ;
-	    cout << " file float32" << endl ;
-	    f32.serialize( eval, dds, fm, false ) ;
-	    cout << " file float64" << endl ;
-	    f64.serialize( eval, dds, fm, false ) ;
-	    cout << " file str" << endl ;
-	    str.serialize( eval, dds, fm, false ) ;
-	    cout << " file url" << endl ;
-	    url.serialize( eval, dds, fm, false ) ;
-	    cout << " file structure" << endl ;
-	    s.serialize( eval, dds, fm, false ) ;
-	    cout << " file array" << endl ;
-	    arr.serialize( eval, dds, fm, false ) ;
-
-	    cout << " file sequence" << endl ;
-	    TestSequence seq( "seq" ) ;
-	    seq.add_var( &f64 ) ;
-	    seq.add_var( &arr ) ;
-	    TestSequence seq2( "seq2" ) ;
-	    seq2.add_var( &ui16 ) ;
-	    seq2.add_var( &url ) ;
-	    seq2.set_send_p( true ) ;
-	    seq.add_var( &seq2 ) ;
-	    seq.set_send_p( true ) ;
-	    seq.set_leaf_sequence() ;
-	    seq.serialize( eval, dds, fm, false ) ;
-
-	    fclose( f ) ;
-	    cout << "done serializing using XDRFileMarshaller" << endl ;
+
 	}
-	catch( Error &e )
+
+	void setUp()
 	{
-	    string err = "failed:" + e.get_error_message() ;
-	    CPPUNIT_FAIL( err.c_str() ) ;
+		b = new TestByte("b");
+		i16 = new TestInt16("i16");
+		i32 = new TestInt32("i32");
+		ui16 = new TestUInt16("ui16");
+		ui32 = new TestUInt32("ui32");
+		f32 = new TestFloat32("f32");
+		f64 = new TestFloat64("f64");
+		str = new TestStr("str");
+		url = new TestUrl("url");
+
+		ab = new TestByte("ab");
+		arr = new TestArray("arr", ab);
+		arr->append_dim(5, "dim1");
+		arr->append_dim(3, "dim2");
+
+		s = new TestStructure("s");
+		s->add_var(i32);
+		s->add_var(str);
+		s->add_var(arr);
+		s->set_send_p(true);
+
+		seq = new TestSequence("seq");
+		seq->add_var(f64);
+		seq->add_var(arr);
+
+		seq2 = new TestSequence("seq2");
+		seq2->add_var(ui16);
+		seq2->add_var(url);
+		seq2->set_send_p(true);
+
+		seq->add_var(seq2);
+		seq->set_send_p(true);
+		seq->set_leaf_sequence();
+
+		// Need to call read so that the value() method calls in the ..read_test()
+		// will work.
+		b->read();
+		i16->read();
+		i32->read();
+		ui16->read();
+		ui32->read();
+		f32->read();
+		f64->read();
+
+		str->read();
+		url->read();
+		arr->read();
+		s->read();
 	}
 
-	cout << s << endl ;
-
-	try
+	void tearDown()
 	{
-	    cout << "serializing using XDRStreamMarshaller" << endl ;
-	    ofstream strm( "test.strm", ios::out|ios::trunc ) ;
-	    XDRStreamMarshaller sm( strm ) ;
-	    cout << " stream byte" << endl ;
-	    b.serialize( eval, dds, sm, false ) ;
-	    cout << " stream int16" << endl ;
-	    i16.serialize( eval, dds, sm, false ) ;
-	    cout << " stream int32" << endl ;
-	    i32.serialize( eval, dds, sm, false ) ;
-	    cout << " stream uint16" << endl ;
-	    ui16.serialize( eval, dds, sm, false ) ;
-	    cout << " stream uint32" << endl ;
-	    ui32.serialize( eval, dds, sm, false ) ;
-	    cout << " stream float32" << endl ;
-	    f32.serialize( eval, dds, sm, false ) ;
-	    cout << " stream float64" << endl ;
-	    f64.serialize( eval, dds, sm, false ) ;
-	    cout << " stream str" << endl ;
-	    str.serialize( eval, dds, sm, false ) ;
-	    cout << " stream url" << endl ;
-	    url.serialize( eval, dds, sm, false ) ;
-	    cout << " stream structure" << endl ;
-	    s.serialize( eval, dds, sm, false ) ;
-	    cout << " stream array" << endl ;
-	    arr.serialize( eval, dds, sm, false ) ;
-
-	    cout << " stream sequence" << endl ;
-	    TestSequence seq( "seq" ) ;
-	    seq.add_var( &f64 ) ;
-	    seq.add_var( &arr ) ;
-	    TestSequence seq2( "seq2" ) ;
-	    seq2.add_var( &ui16 ) ;
-	    seq2.add_var( &url ) ;
-	    seq2.set_send_p( true ) ;
-	    seq.add_var( &seq2 ) ;
-	    seq.set_send_p( true ) ;
-	    seq.set_leaf_sequence() ;
-	    seq.serialize( eval, dds, sm, false ) ;
-
-	    strm.close() ;
-	    cout << "done serializing using XDRStreamMarshaller" << endl ;
+		delete b; b = 0;
+		delete i16; i16 = 0;
+		delete i32; i32 = 0;
+		delete ui16; ui16 = 0;
+		delete ui32; ui32 = 0;
+		delete f32; f32 = 0;
+		delete f64; f64 = 0;
+
+		delete str; str = 0;
+		delete url; url = 0;
+
+		delete ab; ab = 0;
+		delete arr; arr = 0;
+		delete s; s = 0;
 	}
-	catch( Error &e )
+
+	void marshT_test_write(Marshaller &fm)
 	{
-	    string err = "failed:" + e.get_error_message() ;
-	    CPPUNIT_FAIL( err.c_str() ) ;
+		ConstraintEvaluator eval;
+		TestTypeFactory ttf;
+		DataDDS dds(&ttf, "dds");
+
+		try
+		{
+			DBG(cerr << "serializing using XDRFileMarshaller" << endl);
+
+			b->serialize(eval, dds, fm, false);
+			i16->serialize(eval, dds, fm, false);
+			i32->serialize(eval, dds, fm, false);
+			ui16->serialize(eval, dds, fm, false);
+			ui32->serialize(eval, dds, fm, false);
+			f32->serialize(eval, dds, fm, false);
+			f64->serialize(eval, dds, fm, false);
+			str->serialize(eval, dds, fm, false);
+			url->serialize(eval, dds, fm, false);
+			s->serialize(eval, dds, fm, false);
+			arr->serialize(eval, dds, fm, false);
+			seq->serialize(eval, dds, fm, false);
+
+			DBG(cerr << "done serializing using XDRFileMarshaller" << endl);
+		}
+		catch( Error &e )
+		{
+			string err = "failed:" + e.get_error_message();
+			CPPUNIT_FAIL(err.c_str());
+		}
 	}
 
-	// now read the values in and compare the with each other and the original values
-	try
+	// This test depends on the file written by the .._write_file() test,
+	// so it must be run after that test.
+	void marshT_test_read(UnMarshaller &um)
 	{
-	    cout << "deserializing XDRFileMarshaller built file" << endl ;
-	    FILE *ff = fopen( "test.file", "r" ) ;
-	    XDRFileUnMarshaller um( ff ) ;
-	    cout << " file byte" << endl ;
-	    Byte fb( "fb" ) ;
-	    fb.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( fb.value() == b.value() ) ;
-	    cout << " file int16" << endl ;
-	    Int16 fi16( "i16" ) ;
-	    fi16.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( fi16.value() == i16.value() ) ;
-	    cout << " file int32" << endl ;
-	    Int32 fi32( "i32" ) ;
-	    fi32.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( fi32.value() == i32.value() ) ;
-	    cout << " file uint16" << endl ;
-	    UInt16 fui16( "ui16" ) ;
-	    fui16.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( fui16.value() == ui16.value() ) ;
-	    cout << " file uint32" << endl ;
-	    UInt32 fui32( "ui32" ) ;
-	    fui32.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( fui32.value() == ui32.value() ) ;
-	    cout << " file float32" << endl ;
-	    Float32 ff32( "f32" ) ;
-	    ff32.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( ff32.value() == f32.value() ) ;
-	    cout << " file float64" << endl ;
-	    Float64 ff64( "f64" ) ;
-	    ff64.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( ff64.value() == f64.value() ) ;
-	    cout << " file str" << endl ;
-	    Str fstr( "str" ) ;
-	    fstr.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( fstr.value() == str.value() ) ;
-	    cout << " file url" << endl ;
-	    Url furl( "url" ) ;
-	    furl.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( furl.value() == url.value() ) ;
-
-	    cout << " file structure" << endl ;
-	    TestStructure fs( "fs" ) ;
-	    TestInt32 fsi32( "fsi32" ) ;
-	    fs.add_var( &fsi32 ) ;
-	    TestStr fsstr( "fsstr" ) ;
-	    fs.add_var( &fsstr ) ;
-	    TestByte fsab( "fsab" ) ;
-	    TestArray fsarr( "fsarr", &fsab ) ;
-	    fsarr.append_dim( 5, "dim1" ) ;
-	    fsarr.append_dim( 3, "dim2" ) ;
-	    fs.add_var( &fsarr ) ;
-	    fs.deserialize( um, &dds, false ) ;
-
-	    Int32 *fsi32_p = dynamic_cast<Int32 *>(fs.var( "fsi32" )) ;
-	    CPPUNIT_ASSERT( fsi32_p ) ;
-	    CPPUNIT_ASSERT( fsi32_p->value() == i32.value() ) ;
-
-	    Str *fsstr_p = dynamic_cast<Str *>(fs.var( "fsstr" )) ;
-	    CPPUNIT_ASSERT( fsstr_p ) ;
-	    CPPUNIT_ASSERT( fsstr_p->value() == str_p->value() ) ;
-
-	    BaseType *bt = fs.var( "fsab" ) ;
-	    CPPUNIT_ASSERT( bt ) ;
-	    Array *fsarr_p = dynamic_cast<Array *>(bt) ;
-	    CPPUNIT_ASSERT( fsarr_p ) ;
-	    dods_byte fdb[fsarr_p->length() * sizeof(dods_byte)] ;
-	    dods_byte db[arr.length() * sizeof(dods_byte)] ;
-	    fsarr_p->value( fdb ) ;
-	    arr.value( db ) ;
-	    CPPUNIT_ASSERT( fsarr_p->length() == arr.length() ) ;
-	    CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, fsarr_p->length() * sizeof( dods_byte ) ) ) ;
-
-	    cout << " file array" << endl ;
-	    TestByte fab( "ab" ) ;
-	    TestArray farr( "arr", &fab ) ;
-	    farr.append_dim( 5, "dim1" ) ;
-	    farr.append_dim( 3, "dim2" ) ;
-	    farr.deserialize( um, &dds, false ) ;
-	    farr.value( fdb ) ;
-	    CPPUNIT_ASSERT( farr.length() == arr.length() ) ;
-	    CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, farr.length() * sizeof( dods_byte ) ) ) ;
-
-	    cout << " file sequence" << endl ;
-	    TestSequence seq( "seq" ) ;
-	    seq.add_var( &f64 ) ;
-	    seq.add_var( &arr ) ;
-	    TestSequence seq2( "seq2" ) ;
-	    seq2.add_var( &ui16 ) ;
-	    seq2.add_var( &url ) ;
-	    seq2.set_send_p( true ) ;
-	    seq.add_var( &seq2 ) ;
-	    seq.set_leaf_sequence() ;
-	    seq.deserialize( um, &dds, false ) ;
-	    unsigned int num_rows = seq.number_of_rows() ;
-	    CPPUNIT_ASSERT( num_rows == 4 ) ;
-	    for( unsigned int i = 0; i < num_rows; i++ )
-	    {
-		BaseTypeRow *row = seq.row_value( i ) ;
-		CPPUNIT_ASSERT( row ) ;
-		CPPUNIT_ASSERT( row->size() == 3 ) ;
-		Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]) ;
-		CPPUNIT_ASSERT( f64_p ) ;
-		CPPUNIT_ASSERT( f64_p->value() == f64.value() ) ;
-		Array *arr_p = dynamic_cast<Array *>((*row)[1]) ;
-		CPPUNIT_ASSERT( arr_p ) ;
-		arr_p->value( fdb ) ;
-		CPPUNIT_ASSERT( arr_p->length() == arr.length() ) ;
-		CPPUNIT_ASSERT( !memcmp( (void *)fdb, (void *)db, arr_p->length() * sizeof( dods_byte ) ) ) ;
-		Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]) ;
-		CPPUNIT_ASSERT( seq_p ) ;
-		unsigned int num_rows_sub = seq_p->number_of_rows() ;
-		CPPUNIT_ASSERT( num_rows == 4 ) ;
-		for( unsigned int j = 0; j < num_rows_sub; j++ )
+		TestTypeFactory ttf;
+		DataDDS dds(&ttf, "dds");
+
+		// now read the values in and compare the with each other and the original values
+		try
 		{
-		    BaseTypeRow *row_sub = seq_p->row_value( j ) ;
-		    CPPUNIT_ASSERT( row_sub ) ;
-		    CPPUNIT_ASSERT( row_sub->size() == 2 ) ;
-		    UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]) ;
-		    CPPUNIT_ASSERT( ui16_p ) ;
-		    CPPUNIT_ASSERT( ui16_p->value() == ui16.value() ) ;
-		    Url *url_p = dynamic_cast<Url *>((*row_sub)[1]) ;
-		    CPPUNIT_ASSERT( url_p ) ;
-		    CPPUNIT_ASSERT( url_p->value() == url.value() ) ;
+			DBG(cerr << "deserializing XDRFileMarshaller built file" << endl);
+
+			Byte fb("fb");
+			fb.deserialize(um, &dds, false);
+			CPPUNIT_ASSERT(fb.value() == b->value());
+
+			Int16 fi16("i16");
+			fi16.deserialize(um, &dds, false);
+			DBG(cerr << "fi16.value(): " << fi16.value() << ", i16.value(): " << i16->value());
+			CPPUNIT_ASSERT(fi16.value() == 32000);
+
+			DBG(cerr << " file int32" << endl);
+			Int32 fi32("i32");
+			fi32.deserialize(um, &dds, false);
+			DBG(cerr << "fi32.value(): " << fi32.value() << ", i32.value(): " << i32->value());
+			CPPUNIT_ASSERT(fi32.value() == i32->value());
+
+			UInt16 fui16("ui16");
+			fui16.deserialize(um, &dds, false);
+			DBG(cerr << "fui16.value(): " << fui16.value() << ", ui16.value(): " << ui16->value());
+			CPPUNIT_ASSERT(fui16.value() == ui16->value());
+
+			UInt32 fui32("ui32");
+			fui32.deserialize(um, &dds, false);
+			DBG(cerr << "fui32.value(): " << fui32.value() << ", ui32.value(): " << ui32->value());
+			CPPUNIT_ASSERT(fui32.value() == ui32->value());
+
+			Float32 ff32("f32");
+			ff32.deserialize(um, &dds, false);
+			DBG(cerr << "ff32.value(): " << ff32.value() << ", f32.value(): " << f32->value());
+			CPPUNIT_ASSERT(ff32.value() == f32->value());
+
+			Float64 ff64("f64");
+			ff64.deserialize(um, &dds, false);
+			DBG(cerr << "ff64.value(): " << ff64.value() << ", f64.value(): " << f64->value());
+			CPPUNIT_ASSERT(ff64.value() == f64->value());
+
+			Str fstr("str");
+			fstr.deserialize(um, &dds, false);
+			DBG(cerr << "fstr.value(): " << fstr.value() << ", str.value(): " << str->value());
+			CPPUNIT_ASSERT(fstr.value() == str->value());
+
+			Url furl("url");
+			furl.deserialize(um, &dds, false);
+			DBG(cerr << "furl.value(): " << furl.value() << ", url.value(): " << url->value());
+			CPPUNIT_ASSERT(furl.value() == url->value());
+
+			TestStructure fs("fs");
+			TestInt32 fsi32("fsi32");
+			fs.add_var(&fsi32);
+			TestStr fsstr("fsstr");
+			fs.add_var(&fsstr);
+			TestByte fsab("fsab");
+			TestArray fsarr("fsarr", &fsab);
+			fsarr.append_dim(5, "dim1");
+			fsarr.append_dim(3, "dim2");
+			fs.add_var(&fsarr);
+			fs.deserialize(um, &dds, false);
+
+			Int32 *fsi32_p = dynamic_cast<Int32 *>(fs.var("fsi32"));
+			CPPUNIT_ASSERT(fsi32_p);
+			DBG(cerr << "fsi32.value(): " << fsi32_p->value() << ", i32.value(): " << i32->value());
+			CPPUNIT_ASSERT(fsi32_p->value() == i32->value());
+
+			Str *fsstr_p = dynamic_cast<Str *>(fs.var("fsstr"));
+			CPPUNIT_ASSERT(fsstr_p);
+			DBG(cerr << "fstr.value(): " << fsstr_p->value() << ", str.value(): " << dynamic_cast<Str *>(s->var("str"))->value());
+			CPPUNIT_ASSERT(fsstr_p->value() == dynamic_cast<Str *>(s->var("str"))->value());
+
+			BaseType *bt = fs.var("fsab");
+			CPPUNIT_ASSERT(bt);
+			Array *fsarr_p = dynamic_cast<Array *>(bt);
+			CPPUNIT_ASSERT(fsarr_p);
+			dods_byte fdb[fsarr_p->length() * sizeof(dods_byte)];
+			dods_byte db[arr->length() * sizeof(dods_byte)];
+			fsarr_p->value(fdb);
+			arr->value(db);
+			CPPUNIT_ASSERT(fsarr_p->length() == arr->length());
+			CPPUNIT_ASSERT(
+					!memcmp((void * )fdb, (void * )db,
+							fsarr_p->length() * sizeof(dods_byte)));
+
+			DBG(cerr << " file array" << endl);
+			TestByte fab("ab");
+			TestArray farr("arr", &fab);
+			farr.append_dim(5, "dim1");
+			farr.append_dim(3, "dim2");
+			farr.deserialize(um, &dds, false);
+			farr.value(fdb);
+			CPPUNIT_ASSERT(farr.length() == arr->length());
+			CPPUNIT_ASSERT(
+					!memcmp((void * )fdb, (void * )db,
+							farr.length() * sizeof(dods_byte)));
+
+			TestSequence fseq("fseq");
+			fseq.add_var(f64);
+			fseq.add_var(arr);
+			TestSequence fseq2("fseq2");
+			fseq2.add_var(ui16);
+			fseq2.add_var(url);
+			fseq2.set_send_p(true);
+			fseq.add_var(&fseq2);
+			fseq.set_leaf_sequence();
+
+			fseq.deserialize(um, &dds, false);
+			unsigned int num_rows = fseq.number_of_rows();
+			CPPUNIT_ASSERT(num_rows == 4);
+			for (unsigned int i = 0; i < num_rows; i++)
+			{
+				BaseTypeRow *row = fseq.row_value(i);
+				CPPUNIT_ASSERT(row);
+				CPPUNIT_ASSERT(row->size() == 3);
+				Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]);
+				CPPUNIT_ASSERT(f64_p);
+				CPPUNIT_ASSERT(f64_p->value() == f64->value());
+				Array *arr_p = dynamic_cast<Array *>((*row)[1]);
+				CPPUNIT_ASSERT(arr_p);
+				arr_p->value(fdb);
+				CPPUNIT_ASSERT(arr_p->length() == arr->length());
+				CPPUNIT_ASSERT(
+						!memcmp((void * )fdb, (void * )db,
+								arr_p->length() * sizeof(dods_byte)));
+				Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]);
+				CPPUNIT_ASSERT(seq_p);
+				unsigned int num_rows_sub = seq_p->number_of_rows();
+				CPPUNIT_ASSERT(num_rows == 4);
+				for (unsigned int j = 0; j < num_rows_sub; j++)
+				{
+					BaseTypeRow *row_sub = seq_p->row_value(j);
+					CPPUNIT_ASSERT(row_sub);
+					CPPUNIT_ASSERT(row_sub->size() == 2);
+					UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]);
+					CPPUNIT_ASSERT(ui16_p);
+					CPPUNIT_ASSERT(ui16_p->value() == ui16->value());
+					Url *url_p = dynamic_cast<Url *>((*row_sub)[1]);
+					CPPUNIT_ASSERT(url_p);
+					CPPUNIT_ASSERT(url_p->value() == url->value());
+				}
+			}
+
+			DBG(cerr << "done deserializing XDRFileMarshaller built file" << endl);
 		}
-	    }
+		catch( Error &e )
+		{
+			string err = "failed:" + e.get_error_message();
+			CPPUNIT_FAIL(err.c_str());
+		}
+	}
 
-	    fclose( ff ) ;
+	void marshT_test_write_file() {
+		FILE *f = fopen("test.file", "w");
+		XDRFileMarshaller fm(f);
 
-	    cout << "done deserializing XDRFileMarshaller built file" << endl ;
+		marshT_test_write(fm);
+
+		fclose(f);
 	}
-	catch( Error &e )
-	{
-	    string err = "failed:" + e.get_error_message() ;
-	    CPPUNIT_FAIL( err.c_str() ) ;
+
+	void marshT_test_read_file() {
+		FILE *ff = fopen("test.file", "r");
+		XDRFileUnMarshaller um(ff);
+
+		marshT_test_read(um);
+
+		fclose(ff);
+		unlink("test.file");
 	}
 
-	try
-	{
-	    cout << "deserializing XDRStreamMarshaller built file" << endl ;
-	    FILE *sf = fopen( "test.strm", "r" ) ;
-	    XDRFileUnMarshaller um( sf ) ;
-	    cout << " stream byte" << endl ;
-	    Byte sb( "sb" ) ;
-	    sb.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( sb.value() == b.value() ) ;
-	    cout << " stream int16" << endl ;
-	    Int16 si16( "i16" ) ;
-	    si16.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( si16.value() == i16.value() ) ;
-	    cout << " stream int32" << endl ;
-	    Int32 si32( "i32" ) ;
-	    si32.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( si32.value() == i32.value() ) ;
-	    cout << " stream uint16" << endl ;
-	    UInt16 sui16( "ui16" ) ;
-	    sui16.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( sui16.value() == ui16.value() ) ;
-	    cout << " stream uint32" << endl ;
-	    UInt32 sui32( "ui32" ) ;
-	    sui32.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( sui32.value() == ui32.value() ) ;
-	    cout << " stream float32" << endl ;
-	    Float32 sf32( "f32" ) ;
-	    sf32.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( sf32.value() == f32.value() ) ;
-	    cout << " stream float64" << endl ;
-	    Float64 sf64( "f64" ) ;
-	    sf64.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( sf64.value() == f64.value() ) ;
-	    cout << " stream str" << endl ;
-	    Str sstr( "str" ) ;
-	    sstr.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( sstr.value() == str.value() ) ;
-	    cout << " stream url" << endl ;
-	    Url surl( "url" ) ;
-	    surl.deserialize( um, &dds, false ) ;
-	    CPPUNIT_ASSERT( surl.value() == url.value() ) ;
-
-	    cout << " stream structure" << endl ;
-	    TestStructure ss( "ss" ) ;
-	    TestInt32 ssi32( "ssi32" ) ;
-	    ss.add_var( &ssi32 ) ;
-	    TestStr ssstr( "ssstr" ) ;
-	    ss.add_var( &ssstr ) ;
-	    TestByte ssab( "ssab" ) ;
-	    TestArray ssarr( "ssarr", &ssab ) ;
-	    ssarr.append_dim( 5, "dim1" ) ;
-	    ssarr.append_dim( 3, "dim2" ) ;
-	    ss.add_var( &ssarr ) ;
-	    ss.deserialize( um, &dds, false ) ;
-
-	    Int32 *ssi32_p = dynamic_cast<Int32 *>(ss.var( "ssi32" )) ;
-	    CPPUNIT_ASSERT( ssi32_p ) ;
-	    CPPUNIT_ASSERT( ssi32_p->value() == i32.value() ) ;
-
-	    Str *ssstr_p = dynamic_cast<Str *>(ss.var( "ssstr" )) ;
-	    CPPUNIT_ASSERT( ssstr_p ) ;
-	    CPPUNIT_ASSERT( ssstr_p->value() == str_p->value() ) ;
-
-	    BaseType *bt = ss.var( "ssab" ) ;
-	    CPPUNIT_ASSERT( bt ) ;
-	    Array *ssarr_p = dynamic_cast<Array *>(bt) ;
-	    CPPUNIT_ASSERT( ssarr_p ) ;
-	    dods_byte sdb[ssarr_p->length() * sizeof(dods_byte)] ;
-	    dods_byte db[arr.length() * sizeof(dods_byte)] ;
-	    ssarr_p->value( sdb ) ;
-	    arr.value( db ) ;
-	    CPPUNIT_ASSERT( ssarr_p->length() == arr.length() ) ;
-	    CPPUNIT_ASSERT( !memcmp( (void *)sdb, (void *)db, ssarr_p->length() * sizeof( dods_byte ) ) ) ;
-
-	    cout << " stream array" << endl ;
-	    TestByte sab( "ab" ) ;
-	    TestArray sarr( "arr", &sab ) ;
-	    sarr.append_dim( 5, "dim1" ) ;
-	    sarr.append_dim( 3, "dim2" ) ;
-	    sarr.deserialize( um, &dds, false ) ;
-	    sarr.value( sdb ) ;
-	    CPPUNIT_ASSERT( sarr.length() == arr.length() ) ;
-	    CPPUNIT_ASSERT( !memcmp( (void *)sdb, (void *)db, sarr.length() * sizeof( dods_byte ) ) ) ;
-
-	    cout << " stream sequence" << endl ;
-	    TestSequence seq( "seq" ) ;
-	    seq.add_var( &f64 ) ;
-	    seq.add_var( &arr ) ;
-	    TestSequence seq2( "seq2" ) ;
-	    seq2.add_var( &ui16 ) ;
-	    seq2.add_var( &url ) ;
-	    seq2.set_send_p( true ) ;
-	    seq.add_var( &seq2 ) ;
-	    seq.set_leaf_sequence() ;
-	    seq.deserialize( um, &dds, false ) ;
-	    unsigned int num_rows = seq.number_of_rows() ;
-	    CPPUNIT_ASSERT( num_rows == 4 ) ;
-	    for( unsigned int i = 0; i < num_rows; i++ )
-	    {
-		BaseTypeRow *row = seq.row_value( i ) ;
-		CPPUNIT_ASSERT( row ) ;
-		CPPUNIT_ASSERT( row->size() == 3 ) ;
-		Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]) ;
-		CPPUNIT_ASSERT( f64_p ) ;
-		CPPUNIT_ASSERT( f64_p->value() == f64.value() ) ;
-		Array *arr_p = dynamic_cast<Array *>((*row)[1]) ;
-		CPPUNIT_ASSERT( arr_p ) ;
-		arr_p->value( sdb ) ;
-		CPPUNIT_ASSERT( arr_p->length() == arr.length() ) ;
-		CPPUNIT_ASSERT( !memcmp( (void *)sdb, (void *)db, arr_p->length() * sizeof( dods_byte ) ) ) ;
-		Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]) ;
-		CPPUNIT_ASSERT( seq_p ) ;
-		unsigned int num_rows_sub = seq_p->number_of_rows() ;
-		CPPUNIT_ASSERT( num_rows == 4 ) ;
-		for( unsigned int j = 0; j < num_rows_sub; j++ )
-		{
-		    BaseTypeRow *row_sub = seq_p->row_value( j ) ;
-		    CPPUNIT_ASSERT( row_sub ) ;
-		    CPPUNIT_ASSERT( row_sub->size() == 2 ) ;
-		    UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]) ;
-		    CPPUNIT_ASSERT( ui16_p ) ;
-		    CPPUNIT_ASSERT( ui16_p->value() == ui16.value() ) ;
-		    Url *url_p = dynamic_cast<Url *>((*row_sub)[1]) ;
-		    CPPUNIT_ASSERT( url_p ) ;
-		    CPPUNIT_ASSERT( url_p->value() == url.value() ) ;
-		}
-	    }
+	void marshT_test_write_stream() {
+		ofstream strm("test.strm", ios::out | ios::trunc);
+		XDRStreamMarshaller sm(strm);
 
-	    fclose( sf ) ;
+		marshT_test_write(sm);
 
-	    cout << "done deserializing XDRStreamMarshaller built file" << endl ;
+		strm.close();
 	}
-	catch( Error &e )
-	{
-	    string err = "failed:" + e.get_error_message() ;
-	    CPPUNIT_FAIL( err.c_str() ) ;
+
+	// Not that compelling a test really... (It is the same as .._read_file())
+	void marshT_test_read_stream() {
+		FILE *sf = fopen("test.strm", "r");
+		XDRFileUnMarshaller um(sf);
+
+		marshT_test_read(um);
+
+		fclose(sf);
+		unlink("test.strm");
 	}
 
-	unlink( "test.file" ) ;
-	unlink( "test.strm" ) ;
-    }
+	CPPUNIT_TEST_SUITE( marshT );
+
+	CPPUNIT_TEST(marshT_test_write_file);
+	CPPUNIT_TEST(marshT_test_read_file);
+	CPPUNIT_TEST(marshT_test_write_stream);
+	CPPUNIT_TEST(marshT_test_read_stream);
+
+	CPPUNIT_TEST_SUITE_END( );
+
 };
 
-CPPUNIT_TEST_SUITE_REGISTRATION( marshT ) ;
+CPPUNIT_TEST_SUITE_REGISTRATION(marshT);
 
-int main(int, char **)
+int main(int argc, char *argv[])
 {
-    CppUnit::TextUi::TestRunner runner ;
-    CppUnit::TestFactoryRegistry &registry =
-	CppUnit::TestFactoryRegistry::getRegistry() ;
-    runner.addTest( registry.makeTest() ) ;
-    runner.setOutputter( CppUnit::CompilerOutputter::defaultOutputter( 
-                                                        &runner.result(),
-                                                        std::cerr ) );
-    bool wasSuccessful = runner.run( "", false ) ;
+    CppUnit::TextTestRunner runner;
+    runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
+
+    GetOpt getopt(argc, argv, "d");
+    int option_char;
+
+    while ((option_char = getopt()) != -1)
+        switch (option_char) {
+        case 'd':
+            debug = 1;  // debug is a static global
+            break;
+        default:
+            break;
+        }
+
+    bool wasSuccessful = true;
+    string test = "";
+    int i = getopt.optind;
+    if (i == argc) {
+        // run them all
+        wasSuccessful = runner.run("");
+    }
+    else {
+        while (i < argc) {
+            test = string("libdap::marshT::") + argv[i++];
+            DBG(cerr << "test: " << test << endl);
+            wasSuccessful = wasSuccessful && runner.run(test);
+        }
+    }
+
     return wasSuccessful ? 0 : 1;
 }
 
-
diff --git a/unit-tests/valgrind_suppressions.txt b/unit-tests/valgrind_suppressions.txt
new file mode 100644
index 0000000..57d8d45
--- /dev/null
+++ b/unit-tests/valgrind_suppressions.txt
@@ -0,0 +1,90 @@
+{
+   libcurl_1
+   Memcheck:Leak
+   fun:malloc
+   fun:xmlCreatePushParserCtxt
+   ...
+}
+
+{
+   libxml2_1
+   Memcheck:Leak
+   fun:malloc
+   fun:xmlInitParserCtxt
+   fun:xmlNewParserCtxt
+   ...
+}
+
+{
+   putenv
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:malloc_set_zone_name
+   fun:_malloc_initialize
+   fun:malloc_create_zone
+   fun:putenv
+   ...
+}
+
+{
+   putenv2
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:__setenv
+   fun:putenv
+   ...
+}
+
+{
+   putenv3
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:malloc_set_zone_name
+   fun:_malloc_initialize
+   fun:malloc_create_zone
+   fun:putenv
+   ...
+}
+
+{
+   setenv
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:__setenv
+   fun:setenv
+   ...
+}
+
+{
+   setenv2
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:malloc_set_zone_name
+   fun:init__zone0
+   fun:setenv
+   ...
+}
+
+{
+   setenv3
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:malloc_set_zone_name
+   fun:_malloc_initialize
+   fun:malloc_create_zone
+   fun:init__zone0
+   fun:setenv
+   ...
+}
+
+{
+   find
+   Memcheck:Leak
+   fun:malloc
+   obj:/usr/bin/find
+   obj:/usr/bin/find
+   obj:/usr/bin/find
+   obj:/usr/bin/find
+   obj:*
+   obj:*
+}
diff --git a/util.cc b/util.cc
index 75eb104..d56813b 100644
--- a/util.cc
+++ b/util.cc
@@ -1,4 +1,3 @@
-
 // -*- mode: c++; c-basic-offset:4 -*-
 
 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
@@ -118,10 +117,9 @@ bool is_host_big_endian()
  a DAP String. */
 string extract_string_argument(BaseType *arg)
 {
-	assert(arg);
+    assert(arg);
 
-    if (arg->type() != dods_str_c)
-        throw Error(malformed_expr, "The function requires a string argument.");
+    if (arg->type() != dods_str_c) throw Error(malformed_expr, "The function requires a string argument.");
 
     if (!arg->read_p())
         throw InternalErr(__FILE__, __LINE__,
@@ -132,15 +130,15 @@ string extract_string_argument(BaseType *arg)
 
 template<class T> static void set_array_using_double_helper(Array *a, double *src, int src_len)
 {
-	assert(a);
-	assert(src);
-	assert(src_len > 0);
+    assert(a);
+    assert(src);
+    assert(src_len > 0);
 
-	vector<T> values(src_len);
+    vector<T> values(src_len);
     for (int i = 0; i < src_len; ++i)
         values[i] = (T) src[i];
 
-    // This copie the values
+    // This copies the values
     a->set_value(values, src_len);
 }
 
@@ -166,16 +164,14 @@ template<class T> static void set_array_using_double_helper(Array *a, double *sr
  is \e dest. */
 void set_array_using_double(Array *dest, double *src, int src_len)
 {
-	assert(dest);
-	assert(src);
-	assert(src_len > 0);
+    assert(dest);
+    assert(src);
+    assert(src_len > 0);
 
     // Simple types are Byte, ..., Float64, String and Url.
-    if ((dest->type() == dods_array_c && !dest->var()->is_simple_type())
-    || dest->var()->type() == dods_str_c
-    || dest->var()->type() == dods_url_c)
-        throw InternalErr(__FILE__, __LINE__,
-                "The function requires a numeric-type array argument.");
+    if ((dest->type() == dods_array_c && !dest->var()->is_simple_type()) || dest->var()->type() == dods_str_c
+            || dest->var()->type() == dods_url_c)
+        throw InternalErr(__FILE__, __LINE__, "The function requires a numeric-type array argument.");
 
     // Test sizes. Note that Array::length() takes any constraint into account
     // when it returns the length. Even if this was removed, the 'helper'
@@ -183,9 +179,8 @@ void set_array_using_double(Array *dest, double *src, int src_len)
     // which in turn uses length().
     if (dest->length() != src_len)
         throw InternalErr(__FILE__, __LINE__,
-                "The source and destination array sizes don't match ("
-                + long_to_string(src_len) + " versus "
-                + long_to_string(dest->length()) + ").");
+                "The source and destination array sizes don't match (" + long_to_string(src_len) + " versus "
+                        + long_to_string(dest->length()) + ").");
 
     // The types of arguments that the CE Parser will build for numeric
     // constants are limited to Uint32, Int32 and Float64. See ce_expr.y.
@@ -267,15 +262,12 @@ double *extract_double_array(Array * a)
     assert(a);
 
     // Simple types are Byte, ..., Float64, String and Url.
-    if ((a->type() == dods_array_c && !a->var()->is_simple_type())
-    || a->var()->type() == dods_str_c || a->var()->type() == dods_url_c)
-        throw Error(malformed_expr,
-                "The function requires a DAP numeric-type array argument.");
+    if ((a->type() == dods_array_c && !a->var()->is_simple_type()) || a->var()->type() == dods_str_c
+            || a->var()->type() == dods_url_c)
+        throw Error(malformed_expr, "The function requires a DAP numeric-type array argument.");
 
     if (!a->read_p())
-        throw InternalErr(__FILE__, __LINE__,
-                string("The Array '") + a->name() +
-                "'does not contain values.");
+        throw InternalErr(__FILE__, __LINE__, string("The Array '") + a->name() + "'does not contain values.");
 
     // The types of arguments that the CE Parser will build for numeric
     // constants are limited to Uint32, Int32 and Float64. See ce_expr.y.
@@ -301,7 +293,7 @@ double *extract_double_array(Array * a)
         // alone. jhrg 2/24/15
         return extract_double_array_helper<dods_float64>(a);
 
-    // Support for DAP4
+        // Support for DAP4
     case dods_uint8_c:
         return extract_double_array_helper<dods_byte>(a);
     case dods_int8_c:
@@ -316,13 +308,13 @@ double *extract_double_array(Array * a)
     }
 }
 
-// This helper function assume 'dest' is the correct size. This should not
+// This helper function assumes 'dest' is the correct size. This should not
 // be called when the Array 'a' is a Float64, since the values are already
 // in a double array!
 template<class T> static void extract_double_array_helper(Array * a, vector<double> &dest)
 {
     assert(a);
-    assert(dest.size() == (unsigned long)a->length());
+    assert(dest.size() == (unsigned long )a->length());
 
     int length = a->length();
 
@@ -349,15 +341,12 @@ void extract_double_array(Array *a, vector<double> &dest)
     assert(a);
 
     // Simple types are Byte, ..., Float64, String and Url.
-    if ((a->type() == dods_array_c && !a->var()->is_simple_type())
-    || a->var()->type() == dods_str_c || a->var()->type() == dods_url_c)
-        throw Error(malformed_expr,
-                "The function requires a DAP numeric-type array argument.");
+    if ((a->type() == dods_array_c && !a->var()->is_simple_type()) || a->var()->type() == dods_str_c
+            || a->var()->type() == dods_url_c)
+        throw Error(malformed_expr, "The function requires a DAP numeric-type array argument.");
 
     if (!a->read_p())
-        throw InternalErr(__FILE__, __LINE__,
-                string("The Array '") + a->name() +
-                "'does not contain values.");
+        throw InternalErr(__FILE__, __LINE__, string("The Array '") + a->name() + "'does not contain values.");
 
     dest.resize(a->length());
 
@@ -382,7 +371,7 @@ void extract_double_array(Array *a, vector<double> &dest)
         return a->value(&dest[0]);      // no need to copy the values
         // return extract_double_array_helper<dods_float64>(a, dest);
 
-    // Support for DAP4
+        // Support for DAP4
     case dods_uint8_c:
         return extract_double_array_helper<dods_byte>(a, dest);
     case dods_int8_c:
@@ -408,12 +397,11 @@ void extract_double_array(Array *a, vector<double> &dest)
  a DAP numeric value. */
 double extract_double_value(BaseType *arg)
 {
-	assert(arg);
+    assert(arg);
 
     // Simple types are Byte, ..., Float64, String and Url.
     if (!arg->is_simple_type() || arg->type() == dods_str_c || arg->type() == dods_url_c)
-        throw Error(malformed_expr,
-                "The function requires a numeric-type argument.");
+        throw Error(malformed_expr, "The function requires a numeric-type argument.");
 
     if (!arg->read_p())
         throw InternalErr(__FILE__, __LINE__,
@@ -425,29 +413,29 @@ double extract_double_value(BaseType *arg)
     // just arguments.
     switch (arg->type()) {
     case dods_byte_c:
-        return (double)(static_cast<Byte*>(arg)->value());
+        return (double) (static_cast<Byte*>(arg)->value());
     case dods_uint16_c:
-        return (double)(static_cast<UInt16*>(arg)->value());
+        return (double) (static_cast<UInt16*>(arg)->value());
     case dods_int16_c:
-        return (double)(static_cast<Int16*>(arg)->value());
+        return (double) (static_cast<Int16*>(arg)->value());
     case dods_uint32_c:
-        return (double)(static_cast<UInt32*>(arg)->value());
+        return (double) (static_cast<UInt32*>(arg)->value());
     case dods_int32_c:
-        return (double)(static_cast<Int32*>(arg)->value());
+        return (double) (static_cast<Int32*>(arg)->value());
     case dods_float32_c:
-        return (double)(static_cast<Float32*>(arg)->value());
+        return (double) (static_cast<Float32*>(arg)->value());
     case dods_float64_c:
         return static_cast<Float64*>(arg)->value();
 
-    // Support for DAP4 types.
+        // Support for DAP4 types.
     case dods_uint8_c:
-    	return (double)(static_cast<Byte*>(arg)->value());
+        return (double) (static_cast<Byte*>(arg)->value());
     case dods_int8_c:
-    	return (double)(static_cast<Int8*>(arg)->value());
+        return (double) (static_cast<Int8*>(arg)->value());
     case dods_uint64_c:
-    	return (double)(static_cast<UInt64*>(arg)->value());
+        return (double) (static_cast<UInt64*>(arg)->value());
     case dods_int64_c:
-    	return (double)(static_cast<Int64*>(arg)->value());
+        return (double) (static_cast<Int64*>(arg)->value());
 
     default:
         throw InternalErr(__FILE__, __LINE__,
@@ -459,13 +447,12 @@ double extract_double_value(BaseType *arg)
 // expression it contains. 4/7/98 jhrg
 
 /** Removed spaces from the front of a URL and also from the front of the CE.
-    This function assumes that there are no holes in both the URL and the CE.
-    It will remove \e leading space, but not other spaces.
+ This function assumes that there are no holes in both the URL and the CE.
+ It will remove \e leading space, but not other spaces.
 
-    @param name The URL to process
-    @return Returns a new string object that contains the pruned URL. */
-string
-prune_spaces(const string &name)
+ @param name The URL to process
+ @return Returns a new string object that contains the pruned URL. */
+string prune_spaces(const string &name)
 {
     // If the URL does not even have white space return.
     if (name.find_first_of(' ') == name.npos)
@@ -487,15 +474,13 @@ prune_spaces(const string &name)
 // Compare elements in a list of (BaseType *)s and return true if there are
 // no duplicate elements, otherwise return false.
 
-bool
-unique_names(vector<BaseType *> l, const string &var_name,
-             const string &type_name, string &msg)
+bool unique_names(vector<BaseType *> l, const string &var_name, const string &type_name, string &msg)
 {
     // copy the identifier names to a vector
     vector<string> names(l.size());
 
     int nelem = 0;
-    typedef std::vector<BaseType *>::const_iterator citer ;
+    typedef std::vector<BaseType *>::const_iterator citer;
     for (citer i = l.begin(); i != l.end(); i++) {
         assert(*i);
         names[nelem++] = (*i)->name();
@@ -510,11 +495,10 @@ unique_names(vector<BaseType *> l, const string &var_name,
 
     // look for any instance of consecutive names that are ==
     for (int j = 1; j < nelem; ++j) {
-        if (names[j-1] == names[j]) {
+        if (names[j - 1] == names[j]) {
             ostringstream oss;
-            oss << "The variable `" << names[j]
-            << "' is used more than once in " << type_name << " `"
-            << var_name << "'";
+            oss << "The variable `" << names[j] << "' is used more than once in " << type_name << " `" << var_name
+                    << "'";
             msg = oss.str();
 
             return false;
@@ -531,9 +515,9 @@ libdap_root()
 }
 
 /** Return the version string for this package.
-    @note This function has C linkage so that it can be found using autoconf
-    tests.
-    @return The version string. */
+ @note This function has C linkage so that it can be found using autoconf
+ tests.
+ @return The version string. */
 extern "C" const char *
 libdap_version()
 {
@@ -551,21 +535,20 @@ libdap_name()
  * removing the trailing newline that time() includes in its response.
  * @return A C++ string with the current system time as formatted by time()
  */
-string
-systime()
+string systime()
 {
     time_t TimBin;
 
-    if (time(&TimBin) == (time_t) - 1)
+    if (time(&TimBin) == (time_t) -1)
         return string("time() error");
     else {
         char *ctime_value = ctime(&TimBin);
         if (ctime_value) {
-        	string TimStr = ctime_value;
-        	return TimStr.substr(0, TimStr.size() - 2); // remove the \n
+            string TimStr = ctime_value;
+            return TimStr.substr(0, TimStr.size() - 2); // remove the \n
         }
         else
-        	return "Unknown";
+            return "Unknown";
     }
 }
 
@@ -573,8 +556,7 @@ systime()
  * Downcase the source string. This function modifies its argument.
  * @param The string to modify
  */
-void
-downcase(string &s)
+void downcase(string &s)
 {
     for (unsigned int i = 0; i < s.length(); i++)
         s[i] = tolower(s[i]);
@@ -585,10 +567,9 @@ downcase(string &s)
  * @param s The source string
  * @reurn True if the string is quoted, false otherwise.
  */
-bool
-is_quoted(const string &s)
+bool is_quoted(const string &s)
 {
-    return (!s.empty() && s[0] == '\"' && s[s.length()-1] == '\"');
+    return (!s.empty() && s[0] == '\"' && s[s.length() - 1] == '\"');
 }
 
 /**
@@ -597,8 +578,7 @@ is_quoted(const string &s)
  * @param s The source string
  * @return A new string without quotes
  */
-string
-remove_quotes(const string &s)
+string remove_quotes(const string &s)
 {
     if (is_quoted(s))
         return s.substr(1, s.length() - 2);
@@ -609,68 +589,48 @@ remove_quotes(const string &s)
 /** Get the Type enumeration value which matches the given name. */
 Type get_type(const char *name)
 {
-    if (strcmp(name, "Byte") == 0)
-        return dods_byte_c;
+    if (strcmp(name, "Byte") == 0) return dods_byte_c;
 
-    if (strcmp(name, "Char") == 0)
-        return dods_char_c;
+    if (strcmp(name, "Char") == 0) return dods_char_c;
 
-    if (strcmp(name, "Int8") == 0)
-        return dods_int8_c;
+    if (strcmp(name, "Int8") == 0) return dods_int8_c;
 
-    if (strcmp(name, "UInt8") == 0)
-        return dods_uint8_c;
+    if (strcmp(name, "UInt8") == 0) return dods_uint8_c;
 
-    if (strcmp(name, "Int16") == 0)
-        return dods_int16_c;
+    if (strcmp(name, "Int16") == 0) return dods_int16_c;
 
-    if (strcmp(name, "UInt16") == 0)
-        return dods_uint16_c;
+    if (strcmp(name, "UInt16") == 0) return dods_uint16_c;
 
-    if (strcmp(name, "Int32") == 0)
-        return dods_int32_c;
+    if (strcmp(name, "Int32") == 0) return dods_int32_c;
 
-    if (strcmp(name, "UInt32") == 0)
-        return dods_uint32_c;
+    if (strcmp(name, "UInt32") == 0) return dods_uint32_c;
 
-    if (strcmp(name, "Int64") == 0)
-        return dods_int64_c;
+    if (strcmp(name, "Int64") == 0) return dods_int64_c;
 
-    if (strcmp(name, "UInt64") == 0)
-        return dods_uint64_c;
+    if (strcmp(name, "UInt64") == 0) return dods_uint64_c;
 
-    if (strcmp(name, "Float32") == 0)
-        return dods_float32_c;
+    if (strcmp(name, "Float32") == 0) return dods_float32_c;
 
-    if (strcmp(name, "Float64") == 0)
-        return dods_float64_c;
+    if (strcmp(name, "Float64") == 0) return dods_float64_c;
 
-    if (strcmp(name, "String") == 0)
-        return dods_str_c;
+    if (strcmp(name, "String") == 0) return dods_str_c;
 
     // accept both spellings; this might be confusing since URL
     // could be filtered through code and come out Url. Don't know...
     // jhrg 8/15/13
-    if (strcmp(name, "Url") == 0 || strcmp(name, "URL") == 0)
-        return dods_url_c;
+    if (strcmp(name, "Url") == 0 || strcmp(name, "URL") == 0) return dods_url_c;
 
-    if (strcmp(name, "Enum") == 0)
-        return dods_enum_c;
+    if (strcmp(name, "Enum") == 0) return dods_enum_c;
 
-    if (strcmp(name, "Opaque") == 0)
-        return dods_opaque_c;
+    if (strcmp(name, "Opaque") == 0) return dods_opaque_c;
 
-   if (strcmp(name, "Array") == 0)
-        return dods_array_c;
+    if (strcmp(name, "Array") == 0) return dods_array_c;
 
-    if (strcmp(name, "Structure") == 0)
-        return dods_structure_c;
+    if (strcmp(name, "Structure") == 0) return dods_structure_c;
 
-    if (strcmp(name, "Sequence") == 0)
-        return dods_sequence_c;
+    if (strcmp(name, "Sequence") == 0) return dods_sequence_c;
 
-    if (strcmp(name, "Grid") == 0)
-        return dods_grid_c;
+    if (strcmp(name, "Grid") == 0) return dods_grid_c;
 
     return dods_null_c;
 }
@@ -682,8 +642,7 @@ Type get_type(const char *name)
  * @param t The type code
  * @return The type name in a string
  */
-string
-D2type_name(Type t)
+string D2type_name(Type t)
 {
     switch (t) {
     case dods_null_c:
@@ -728,8 +687,7 @@ D2type_name(Type t)
  * @param t The type code
  * @return The type name in a string
  */
-string
-D4type_name(Type t)
+string D4type_name(Type t)
 {
     switch (t) {
     case dods_null_c:
@@ -768,7 +726,7 @@ D4type_name(Type t)
         return string("URL");
 
     case dods_opaque_c:
-    	return string("Opaque");
+        return string("Opaque");
 
     case dods_array_c:
         return string("Array");
@@ -795,24 +753,22 @@ D4type_name(Type t)
  * @return A string naming the type, suitable for humans
  * @exception InternalErr If not such type can be found
  */
-string
-type_name(Type t)
+string type_name(Type t)
 {
-	try {
-		return D4type_name(t);
-	}
-	catch (...) {
-		return D2type_name(t);
-	}
+    try {
+        return D4type_name(t);
+    }
+    catch (...) {
+        return D2type_name(t);
+    }
 }
 
 /** @brief Returns true if the instance is a numeric, string or URL
-    type variable.
-    @return True if the instance is a scalar numeric, String or URL variable,
-    False otherwise. Arrays (even of simple types) return False.
-    @see is_vector_type() */
-bool
-is_simple_type(Type t)
+ type variable.
+ @return True if the instance is a scalar numeric, String or URL variable,
+ False otherwise. Arrays (even of simple types) return False.
+ @see is_vector_type() */
+bool is_simple_type(Type t)
 {
     switch (t) {
 
@@ -852,10 +808,9 @@ is_simple_type(Type t)
 }
 
 /** @brief Returns true if the instance is a vector (i.e., array) type
-    variable.
-    @return True if the instance is an Array, False otherwise. */
-bool
-is_vector_type(Type t)
+ variable.
+ @return True if the instance is an Array, False otherwise. */
+bool is_vector_type(Type t)
 {
     switch (t) {
     case dods_null_c:
@@ -898,11 +853,10 @@ is_vector_type(Type t)
 }
 
 /** @brief Returns true if the instance is a constructor (i.e., Structure,
-    Sequence or Grid) type variable.
-    @return True if the instance is a Structure, Sequence or Grid, False
-    otherwise. */
-bool
-is_constructor_type(Type t)
+ Sequence or Grid) type variable.
+ @return True if the instance is a Structure, Sequence or Grid, False
+ otherwise. */
+bool is_constructor_type(Type t)
 {
     switch (t) {
     case dods_null_c:
@@ -948,19 +902,19 @@ is_constructor_type(Type t)
 bool is_integer_type(Type t)
 {
     switch (t) {
-        case dods_byte_c:
-        case dods_char_c:
-        case dods_int8_c:
-        case dods_uint8_c:
-        case dods_int16_c:
-        case dods_uint16_c:
-        case dods_int32_c:
-        case dods_uint32_c:
-        case dods_int64_c:
-        case dods_uint64_c:
-            return true;
-        default:
-            return false;
+    case dods_byte_c:
+    case dods_char_c:
+    case dods_int8_c:
+    case dods_uint8_c:
+    case dods_int16_c:
+    case dods_uint16_c:
+    case dods_int32_c:
+    case dods_uint32_c:
+    case dods_int64_c:
+    case dods_uint64_c:
+        return true;
+    default:
+        return false;
     }
 }
 
@@ -970,8 +924,7 @@ bool is_integer_type(Type t)
  * @param dir The pathname to test.
  * @return True if the directory exists, false otherwise
  */
-bool
-dir_exists(const string &dir)
+bool dir_exists(const string &dir)
 {
     struct stat buf;
 
@@ -979,8 +932,7 @@ dir_exists(const string &dir)
 }
 
 // Jose Garcia
-void
-append_long_to_string(long val, int base, string &str_val)
+void append_long_to_string(long val, int base, string &str_val)
 {
     // The array digits contains 36 elements which are the
     // posible valid digits for out bases in the range
@@ -994,22 +946,19 @@ append_long_to_string(long val, int base, string &str_val)
         std::invalid_argument ex("The parameter base has an invalid value.");
         throw ex;
     }
-    if (val < 0)
-        str_val += '-';
+    if (val < 0) str_val += '-';
     r = ldiv(labs(val), base);
 
     // output digits of val/base first
-    if (r.quot > 0)
-        append_long_to_string(r.quot, base, str_val);
+    if (r.quot > 0) append_long_to_string(r.quot, base, str_val);
 
     // output last digit
 
-    str_val += digits[(int)r.rem];
+    str_val += digits[(int) r.rem];
 }
 
 // base defaults to 10
-string
-long_to_string(long val, int base)
+string long_to_string(long val, int base)
 {
     string s;
     append_long_to_string(val, base, s);
@@ -1027,8 +976,7 @@ void append_double_to_string(const double &num, string &str)
     str += oss.str();
 }
 
-string
-double_to_string(const double &num)
+string double_to_string(const double &num)
 {
     string s;
     append_double_to_string(num, s);
@@ -1043,24 +991,21 @@ double_to_string(const double &num)
 
 #ifdef WIN32
 static const char path_sep[] =
-    {"\\"
-    };
+{   "\\"
+};
 #else
-static const char path_sep[] =
-    {"/"
-    };
+static const char path_sep[] = { "/" };
 #endif
 
 /** Get the filename part from a path. This function can be used to return a
-    string that has the directory components stripped from a path. This is
-    useful when building error message strings.
+ string that has the directory components stripped from a path. This is
+ useful when building error message strings.
 
-    If WIN32 is defined, use '\' as the path separator, otherwise use '/' as
-    the path separator.
+ If WIN32 is defined, use '\' as the path separator, otherwise use '/' as
+ the path separator.
 
-    @return A string containing only the filename given a path. */
-string
-path_to_filename(string path)
+ @return A string containing only the filename given a path. */
+string path_to_filename(string path)
 {
     string::size_type pos = path.rfind(path_sep);
 
@@ -1074,13 +1019,13 @@ path_to_filename(string path)
  * globchars() - build a bitlist to check for character group match
  */
 
-static void globchars(const char *s, const char *e, char *b) {
+static void globchars(const char *s, const char *e, char *b)
+{
     int neg = 0;
 
     memset(b, '\0', BITLISTSIZE);
 
-    if (*s == '^')
-        neg++, s++;
+    if (*s == '^') neg++, s++;
 
     while (s < e) {
         int c;
@@ -1123,11 +1068,9 @@ static void globchars(const char *s, const char *e, char *b) {
  * @return 0 on success, -1 if the pattern is exhausted but there are
  * characters remaining in the string and 1 if the pattern does not match
  */
-int
-glob(const char *c, const char *s)
+int glob(const char *c, const char *s)
 {
-    if (!c || !s)
-        return 1;
+    if (!c || !s) return 1;
 
     char bitlist[BITLISTSIZE];
     int i = 0;
@@ -1138,8 +1081,7 @@ glob(const char *c, const char *s)
             return *s ? -1 : 0;
 
         case '?':
-            if (!*s++)
-                return i/*1*/;
+            if (!*s++) return i/*1*/;
             break;
 
         case '[': {
@@ -1147,8 +1089,7 @@ glob(const char *c, const char *s)
 
             const char *here = c;
             do {
-                if (!*c++)
-                    return i/*1*/;
+                if (!*c++) return i/*1*/;
             } while (here == c || *c != ']');
             c++;
 
@@ -1156,8 +1097,7 @@ glob(const char *c, const char *s)
 
             globchars(here, c, bitlist);
 
-            if (!CHECK_BIT( bitlist, *(unsigned char *)s ))
-                return i/*1*/;
+            if (!CHECK_BIT(bitlist, *(unsigned char * )s)) return i/*1*/;
             s++;
             break;
         }
@@ -1180,8 +1120,7 @@ glob(const char *c, const char *s)
 
                 if (!r)
                     return 0;
-                else if (r < 0)
-                    return i/*1*/;
+                else if (r < 0) return i/*1*/;
 
                 --s;
             }
@@ -1191,13 +1130,11 @@ glob(const char *c, const char *s)
         case '\\':
             /* Force literal match of next char. */
 
-            if (!*c || *s++ != *c++)
-                return i/*1*/;
+            if (!*c || *s++ != *c++) return i/*1*/;
             break;
 
         default:
-            if (*s++ != c[-1])
-                return i/*1*/;
+            if (*s++ != c[-1]) return i/*1*/;
             break;
         }
     }
@@ -1207,50 +1144,44 @@ glob(const char *c, const char *s)
 
 /** @name Security functions */
 //@{
-
 /** @brief sanitize the size of an array.
-    Test for integer overflow when dynamically allocating an array.
-    @param nelem Number of elements.
-    @param sz size of each element.
-    @return True if the \c nelem elements of \c sz size will overflow an array. */
-bool
-size_ok(unsigned int sz, unsigned int nelem)
+ Test for integer overflow when dynamically allocating an array.
+ @param nelem Number of elements.
+ @param sz size of each element.
+ @return True if the \c nelem elements of \c sz size will overflow an array. */
+bool size_ok(unsigned int sz, unsigned int nelem)
 {
     return (sz > 0 && nelem < UINT_MAX / sz);
 }
 
 /** @brief Does the string name a potentially valid pathname?
-    Test the given pathname to verify that it is a valid name. We define this
-    as: Contains only printable characters; and Is less then 256 characters.
-    If \e strict is true, test that the pathname consists of only letters,
-    digits, and underscore, dash and dot characters instead of the more general
-    case where a pathname can be composed of any printable characters.
-
-    @note Using this function does not guarantee that the path is valid, only
-    that the path \e could be valid. The intent is foil attacks where an
-    exploit is encoded in a string then passed to a library function. This code
-    does not address whether the pathname references a valid resource.
-
-    @param path The pathname to test
-    @param strict Apply more restrictive tests (true by default)
-    @return true if the pathname consists of legal characters and is of legal
-    size, false otherwise. */
-bool
-pathname_ok(const string &path, bool strict)
+ Test the given pathname to verify that it is a valid name. We define this
+ as: Contains only printable characters; and Is less then 256 characters.
+ If \e strict is true, test that the pathname consists of only letters,
+ digits, and underscore, dash and dot characters instead of the more general
+ case where a pathname can be composed of any printable characters.
+
+ @note Using this function does not guarantee that the path is valid, only
+ that the path \e could be valid. The intent is foil attacks where an
+ exploit is encoded in a string then passed to a library function. This code
+ does not address whether the pathname references a valid resource.
+
+ @param path The pathname to test
+ @param strict Apply more restrictive tests (true by default)
+ @return true if the pathname consists of legal characters and is of legal
+ size, false otherwise. */
+bool pathname_ok(const string &path, bool strict)
 {
-    if (path.length() > 255)
-        return false;
+    if (path.length() > 255) return false;
 
     Regex name("[-0-9A-z_./]+");
-    if (!strict)
-        name = "[:print:]+";
+    if (!strict) name = "[:print:]+";
 
     string::size_type len = path.length();
     int result = name.match(path.c_str(), len);
     // Protect against casting too big an uint to int
     // if LEN is bigger than the max int32, the second test can't work
-    if (len > INT_MAX || result != static_cast<int>(len))
-        return false;
+    if (len > INT_MAX || result != static_cast<int>(len)) return false;
 
     return true;
 }
@@ -1261,11 +1192,46 @@ pathname_ok(const string &path, bool strict)
  * Get the version of the DAP library.
  * @deprecated
  */
-string
-dap_version()
+string dap_version()
+{
+    return (string) "OPeNDAP DAP/" + libdap_version() + ": compiled on " + __DATE__ + ":" + __TIME__;
+}
+
+/**
+ * Using the given template, open a temporary file using the given
+ * ofstream object. Uses mkstemp() in a 'safe' way.
+ *
+ * @param f Value-result parameter
+ * @param name_template The template used to name the temporary file.
+ * The template has the form templateXXXXXX where the six Xs will be
+ * overwritten.
+ * @param suffix If present, the template is 'templateXXXXXX.suffix'
+ * @return The new file's name.
+ * @exception Error if there is a problem.
+ */
+string open_temp_fstream(ofstream &f, const string &name_template, const string &suffix /* = "" */)
 {
-    return (string)"OPeNDAP DAP/" + libdap_version() + ": compiled on " + __DATE__ + ":" + __TIME__ ;
+    vector<char> name;
+    copy(name_template.begin(), name_template.end(), back_inserter(name));
+    if (!suffix.empty())
+        copy(suffix.begin(), suffix.end(), back_inserter(name));
+    name.push_back('\0');
+
+    // Use mkstemp to make and open the temp file atomically
+    int tmpfile = mkstemps(&name[0], suffix.length());
+    if (tmpfile == -1)
+        throw Error("Could not make a temporary file.");
+    // Open the file using C++ ofstream; get a C++ fstream object
+    f.open(&name[0]);
+    // Close the file descriptor; the file stays open because of the fstream object
+    close(tmpfile);
+    // Now test that the fstream object is valid
+    if (f.fail())
+        throw Error("Could not make a temporary file.");
+
+    return string(&name[0]);
 }
 
+
 } // namespace libdap
 
diff --git a/util.h b/util.h
index dc1cfe7..19f148c 100644
--- a/util.h
+++ b/util.h
@@ -57,19 +57,17 @@ inline bool double_eq(double lhs, double rhs, double epsilon = 1.0e-5)
     return fabs(lhs - rhs) < epsilon;
 }
 
-bool is_host_big_endian();
-
 string extract_string_argument(BaseType *arg) ;
 double extract_double_value(BaseType *arg) ;
 double *extract_double_array(Array *a) ;
 void extract_double_array(Array *a, vector<double> &dest) ;
 void set_array_using_double(Array *dest, double *src, int src_len) ;
 
+bool is_host_big_endian();
+
 string prune_spaces(const string &);
 bool unique_names(vector<BaseType *> l, const string &var, const string &type, string &msg);
 string systime();
-//FILE *compressor(FILE *output, int &childpid);
-//bool deflate_exists();
 const char *libdap_root();
 extern "C" const char *libdap_version();
 extern "C" const char *libdap_name();
@@ -152,27 +150,7 @@ time_t parse_time(const char * str, bool expand);
 bool size_ok(unsigned int sz, unsigned int nelem);
 bool pathname_ok(const string &path, bool strict = true);
 string dap_version();
-
-#if COMPRESSION_FOR_SERVER3
-FILE *compressor(FILE *output, int &childpid);
-bool deflate_exists();
-#endif
-
-#if 0
-FILE *text_to_temp(string text);
-#endif
-#if 0
-int wmatch(const char *pat, const char *s);
-#endif
-#if 0
-string file_to_string(FILE *fp);
-
-int wildcmp(const char *wild, const char *string);
-#endif
-#if 0
-const char *dods_progress();
-#endif
-
+string open_temp_fstream(ofstream &f, const string &name_template, const string &suffix = "");
 
 } // namespace libdap
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/libdap.git



More information about the debian-science-commits mailing list