Starting Eigen 2 development. The current plan is to use the last
release of tvmet (inactive for 2 years and developer unreachable) as the
basis for eigen2, because it provides seemingly good expression template
mechanisms, we want that, and it would take years to reinvent that
wheel. We'll see. So this commit imports the last tvmet release.
diff --git a/tvmet-1.7.1/AUTHORS b/tvmet-1.7.1/AUTHORS
new file mode 100644
index 0000000..7262233
--- /dev/null
+++ b/tvmet-1.7.1/AUTHORS
@@ -0,0 +1 @@
+Olaf Petzold <opetzold@users.sourceforge.net>
diff --git a/tvmet-1.7.1/COPYING b/tvmet-1.7.1/COPYING
new file mode 100644
index 0000000..b1e3f5a
--- /dev/null
+++ b/tvmet-1.7.1/COPYING
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/tvmet-1.7.1/ChangeLog b/tvmet-1.7.1/ChangeLog
new file mode 100644
index 0000000..2841ec7
--- /dev/null
+++ b/tvmet-1.7.1/ChangeLog
@@ -0,0 +1,4104 @@
+2005-04-26 17:07  opetzold
+
+	* configure.ac: release 1.7.1 tagged and released.
+
+2005-04-26 17:05  opetzold
+
+	* include/tvmet/: MatrixBinaryFunctions.h, VectorBinaryFunctions.h:
+	pow(..., const int&) corrected, some cosmetic also.
+
+2005-04-07 17:59  opetzold
+
+	* doc/build.dox: typo corrected in cppunit url.
+
+2005-03-25 08:13  opetzold
+
+	* THANKS: updated.
+
+2005-03-25 08:12  opetzold
+
+	* testsuite/TestXprVectorFunctions.h: regression tests added for
+	Vector and XprVector dot/cross functions.
+
+2005-03-25 08:11  opetzold
+
+	* include/tvmet/xpr/VectorFunctions.h: declaration and
+	implementation added for Vector and XprVector dot/cross functions.
+	Thanks to Alexei Sheplyakov.
+
+2005-03-09 13:33  opetzold
+
+	* doc/works.dox, NEWS: updated.
+
+2005-03-09 13:09  opetzold
+
+	* NEWS: updated.
+
+2005-03-09 13:05  opetzold
+
+	* doc/compiler.dox: compiler note for gcc 3.4.3 added.
+
+2005-03-09 12:56  opetzold
+
+	* doc/: build.dox, compiler.dox: extended with new chapter for MS
+	windows and compiler.
+
+2005-03-09 12:11  opetzold
+
+	* testsuite/TestMatrixElementwise.h: header guard naming changed
+	according to file name.
+
+2005-03-09 12:06  opetzold
+
+	* testsuite/: Makefile.am, TestMatrixElementwise.cc,
+	TestMatrixElementwise.h: added to test elementwise matrix
+	operations on square and non square matrices.
+
+2005-03-09 10:48  opetzold
+
+	* include/tvmet/xpr/MatrixOperators.h: bug removed inside the
+	matrix expressions using elementwise operations, thanks to Alexei
+	Sheplyakov.
+
+2005-03-09 10:35  opetzold
+
+	* THANKS: updated.
+
+2005-03-02 13:17  opetzold
+
+	* doc/compiler.dox: install instructions about MS VC++ added.
+
+2005-03-02 13:14  opetzold
+
+	* include/tvmet/CommaInitializer.h: does compile against g++3.4.3
+	now (and icc - no idea about MS VC++).
+
+2005-03-02 13:12  opetzold
+
+	* include/tvmet/Matrix.h: Note for MatrixSliceReference use added,
+	since it isn't used.
+
+2004-11-30 10:51  opetzold
+
+	* doc/Doxyfile.in: added autogen's config-vc7.h and config.h.
+
+2004-11-30 10:27  opetzold
+
+	* configure.ac: release 1.7.0 tagged and released.
+
+2004-11-30 10:13  opetzold
+
+	* NEWS: updated.
+
+2004-11-30 10:05  opetzold
+
+	* doc/intro.dox: link added to the aliasing notes. This should be
+	seen before trapping by it.
+
+2004-11-04 19:16  opetzold
+
+	* NEWS: updated.
+
+2004-11-04 19:12  opetzold
+
+	* testsuite/: TestNumericTraits.h, TestNumericTraitsComplex.h: conj
+	tests updated for signed and unsigned types.
+
+2004-11-04 19:10  opetzold
+
+	* include/tvmet/NumericTraits.h: conj for all unsigned types
+	disabled. An unary minus operator applied to unsigned type will
+	result unsigned.
+
+2004-11-04 18:27  opetzold
+
+	* doc/: compiler.dox, faq.dox: updated for vc 71.
+
+2004-11-04 17:47  opetzold
+
+	* include/tvmet/config/config-vc71.h.in: updated, thanks again to
+	Robi Carnecky.
+
+2004-11-04 17:28  opetzold
+
+	* include/tvmet/tvmet.h: VC++ 7.1 version info corrected.
+
+2004-11-04 17:25  opetzold
+
+	* include/tvmet/NumericTraits.h: bug removed: displaced semicolon
+	removed - was wrong statement termination.
+
+2004-11-04 17:21  opetzold
+
+	* THANKS: updated.
+
+2004-11-04 17:21  opetzold
+
+	* include/tvmet/MatrixFunctions.h: implementation of cmatrix_ref
+	static keyword removed since disagree to declaration; thanks to
+	Robi Carnecky.
+
+2004-10-31 12:01  opetzold
+
+	* include/tvmet/config/config-vc71.h: removed, since created by
+	configure process.
+
+2004-10-31 10:52  opetzold
+
+	* NEWS: updated.
+
+2004-10-31 10:51  opetzold
+
+	* include/tvmet/NumericTraits.h: doxygen notes added for unsigned
+	types and conj - it's useless.
+
+2004-10-31 10:50  opetzold
+
+	* doc/compiler.dox: chapter about MS VC++ 7.1 added.
+
+2004-10-31 10:49  opetzold
+
+	* doc/Doxyfile.in: DOXYGEN_SKIP_THIS added for PREDEFINED.
+
+2004-10-31 10:48  opetzold
+
+	* include/tvmet/tvmet.h, include/tvmet/config/config-vc71.h,
+	include/tvmet/config/config-vc71.h.in, configure.ac,
+	include/tvmet/config/Makefile.am: added basic skelet for MS
+	VC++-7.1.
+
+2004-10-31 07:39  opetzold
+
+	* THANKS: updated.
+
+2004-10-31 07:34  opetzold
+
+	* include/tvmet/CommaInitializer.h: implementation uses typename
+	for return type now - thanks to Robi Carnecky; interlocked
+	namespace tvmet resolved.
+
+2004-10-04 13:44  opetzold
+
+	* include/tvmet/UnaryFunctionals.h: cosmetic.
+
+2004-10-04 13:41  opetzold
+
+	* NEWS, THANKS: updated.
+
+2004-10-04 13:40  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, UnaryFunctionals.h: drem,
+	hypot, jn, yn, cbrt and rint are inside the global namespace
+
+2004-10-04 13:18  opetzold
+
+	* include/tvmet/BinaryFunctionals.h: bug/typo in swap corrected;
+	thanks to Krzysiek Goj.
+
+2004-09-20 10:09  opetzold
+
+	* doc/faq.dox: corrections for chapter 'optimize the code' - wrong
+	documented define corrected.
+
+2004-09-20 09:52  opetzold
+
+	* doc/tvmet.css: some css syntax corrections and cosmetic.
+
+2004-09-16 11:14  opetzold
+
+	* include/tvmet/: Functional.h, Matrix.h, Vector.h, meta/Matrix.h,
+	meta/Vector.h, util/General.h, util/Incrementor.h, util/Random.h,
+	util/Timer.h, xpr/BinOperator.h, xpr/Identity.h, xpr/MMProduct.h,
+	xpr/MMProductTransposed.h, xpr/MMtProduct.h, xpr/MVProduct.h,
+	xpr/Matrix.h, xpr/MatrixCol.h, xpr/MatrixDiag.h, xpr/MatrixRow.h,
+	xpr/MtMProduct.h, xpr/MtVProduct.h, xpr/Vector.h: include depencies
+	simplified.
+
+2004-09-16 10:19  opetzold
+
+	* NEWS: typo corrected.
+
+2004-09-16 10:12  opetzold
+
+	* doc/Makefile.am, Makefile.am: the pdf dist is gone lost, fixed
+	now.
+
+2004-09-16 10:11  opetzold
+
+	* doc/build.dox, NEWS: updated.
+
+2004-09-15 10:03  opetzold
+
+	* configure.ac: release 1.6.0 released and tagged.
+
+2004-09-15 09:51  opetzold
+
+	* testsuite/: TestNumericTraits.cc, TestNumericTraits.h,
+	TestNumericTraitsComplex.cc, TestNumericTraitsComplex.h: added new
+	tests for tvmet's traits.
+
+2004-07-06 11:45  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, VectorFunctions.h:
+	{matrix,vector}_ref renamed to c{matrix,vector}_ref.
+
+2004-07-06 08:24  opetzold
+
+	* testsuite/TestMatrixFunctions.h: test for identity added. It's
+	courious, we have to specify the namespace here.
+
+2004-07-06 08:23  opetzold
+
+	* include/tvmet/MatrixFunctions.h: cosmetic.
+
+2004-07-06 07:58  opetzold
+
+	* include/tvmet/xpr/Identity.h: header guard corrected.
+
+2004-07-06 07:55  opetzold
+
+	* include/tvmet/MatrixFunctions.h: prototypes 'inline' declaration
+	removed.
+
+2004-07-06 07:54  opetzold
+
+	* include/tvmet/MatrixFunctions.h: prototype matrix_ref 'static
+	inline' declaration removed.
+
+2004-07-06 07:49  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MatrixFunctions.h:
+	identity moved from XprFunction to Function header. 2nd form for
+	identity for using typedefs added for convinience.
+
+2004-07-03 19:09  opetzold
+
+	* doc/usage.dox: updated for new functions.
+
+2004-07-03 19:04  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, VectorFunctions.h,
+	xpr/MatrixFunctions.h: Functions identity(), {vector,matrix}_ref
+	grouped to doxygen's _unary_function.
+
+2004-07-03 18:41  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixFunctions.h, Vector.h,
+	VectorFunctions.h: New function {vector,matrix}_ref as C style
+	array expression wrapper added. This needed an update to
+	{Vector,Matrix}ConstReference constructor - they have a new
+	constructor by memory pointer. Further more, some typedefs for
+	semantic (cosmetic).
+
+2004-07-03 18:38  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: typo corrected.
+
+2004-07-03 17:49  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: prototype for identity
+	added.
+
+2004-07-03 17:32  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: New function identity using
+	XprIdentity added.
+
+2004-07-03 17:32  opetzold
+
+	* include/tvmet/xpr/: Identity.h, Makefile.am, Matrix.h:
+	XprIdentity added.
+
+2004-06-27 22:32  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h, loop/Matrix.h, loop/Vector.h,
+	meta/Matrix.h, meta/Vector.h, xpr/Matrix.h, xpr/Vector.h: naming of
+	function arguments and template parameter cleaner expressed, e.g.
+	E1 to Dest, E2 to Src or assign functions explicit named. These
+	should make the design and way of tvmet's behavior more clean.
+
+2004-06-27 10:59  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, UnaryFunctionals.h: typedefs
+	of return type of some functionals removed, the return type of is
+	more clear now. Some cosmetics too.
+
+2004-06-27 10:29  opetzold
+
+	* include/tvmet/meta/: Matrix.h, Vector.h: {Row,Col}Stride renamed
+	to M, N to avoid confusion about stride techniques.
+
+2004-06-17 18:54  opetzold
+
+	* include/tvmet/CommaInitializer.h: cosmetic.
+
+2004-06-17 18:44  opetzold
+
+	* include/tvmet/xpr/: MMProduct.h, Matrix.h, Vector.h: indent level
+	printing corrected, still not correct yet (concerning indent).
+
+2004-06-17 17:53  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixFunctions.h, MatrixOperators.h,
+	Vector.h, loop/Matrix.h, loop/Vector.h, meta/Gemm.h, meta/Gemmt.h,
+	meta/Gemtm.h, meta/Gemtv.h, meta/Gemv.h, xpr/MMProduct.h,
+	xpr/MMProductTransposed.h, xpr/MMtProduct.h, xpr/MVProduct.h,
+	xpr/Matrix.h, xpr/MatrixFunctions.h, xpr/MatrixOperators.h,
+	xpr/MtMProduct.h, xpr/MtVProduct.h, xpr/Vector.h: unused template
+	stuff removed, means unnecessary stride stuff removed, since it was
+	never used inside the functions. Only meta {Matrix|Vector} is using
+	it.
+
+2004-06-16 11:30  opetzold
+
+	* include/tvmet/loop/: Gemm.h, Gemmt.h, Gemtm.h, Gemtv.h, Gemv.h:
+	duff's device checks on n != 0 now.
+
+2004-06-16 10:55  opetzold
+
+	* include/tvmet/util/Incrementor.h: example doc corrected.
+
+2004-06-10 20:15  opetzold
+
+	* doc/: compiler.dox, faq.dox, compiler.dox: updated.
+
+2004-06-10 19:11  opetzold
+
+	* include/tvmet/config/config-pgi.h: disabled
+	TVMET_HAVE_LONG_DOUBLE, pgi 5.1 doesn't doesn't support it
+	completly obviously (found with the trial version, no idea about
+	commercial one).
+
+2004-06-10 18:36  opetzold
+
+	* configure.ac, include/tvmet/AliasProxy.h,
+	include/tvmet/BinaryFunctionals.h, include/tvmet/Functional.h,
+	include/tvmet/Matrix.h, include/tvmet/MatrixBinaryFunctions.h,
+	include/tvmet/MatrixEval.h, include/tvmet/MatrixFunctions.h,
+	include/tvmet/MatrixImpl.h, include/tvmet/MatrixOperators.h,
+	include/tvmet/MatrixUnaryFunctions.h, include/tvmet/TvmetBase.h,
+	include/tvmet/UnaryFunctionals.h, include/tvmet/Vector.h,
+	include/tvmet/VectorBinaryFunctions.h,
+	include/tvmet/VectorFunctions.h, include/tvmet/VectorImpl.h,
+	include/tvmet/VectorOperators.h,
+	include/tvmet/VectorUnaryFunctions.h, include/tvmet/tvmet.h,
+	include/tvmet/config/config-icc.h, include/tvmet/loop/Matrix.h,
+	include/tvmet/loop/Vector.h, include/tvmet/meta/Matrix.h,
+	include/tvmet/meta/Vector.h, include/tvmet/xpr/Matrix.h,
+	include/tvmet/xpr/MatrixBinaryFunctions.h,
+	include/tvmet/xpr/MatrixCol.h, include/tvmet/xpr/MatrixDiag.h,
+	include/tvmet/xpr/MatrixFunctions.h,
+	include/tvmet/xpr/MatrixOperators.h, include/tvmet/xpr/MatrixRow.h,
+	include/tvmet/xpr/MatrixTranspose.h,
+	include/tvmet/xpr/MatrixUnaryFunctions.h,
+	include/tvmet/xpr/Vector.h,
+	include/tvmet/xpr/VectorBinaryFunctions.h,
+	include/tvmet/xpr/VectorFunctions.h,
+	include/tvmet/xpr/VectorOperators.h,
+	include/tvmet/xpr/VectorUnaryFunctions.h: Lot's of changes: The
+	internal naming conventions for Fcnl_xxx has been changed to lower
+	case, names are more conform to C++ standard and keywords. This
+	allows to simplify the macros for implementation used. Further more
+	declarations for functions where added. This are used mainly for
+	gcc's __attribute__((always_inline)), which can be used for icc v8
+	too. This allows to produce high optimized and inlined code even on
+	lower optimization levels, e.g. -O./install For this tvmet has a
+	new define TVMET_OPTIMIZE.
+
+2004-06-09 09:11  opetzold
+
+	* examples/: cmv.cc, mm.cc, mv.cc: some pragmas for icc added.
+
+2004-06-08 18:19  opetzold
+
+	* include/tvmet/: tvmet.h, config/config-gcc.h: added macro
+	TVMET_CXX_ALWAYS_INLINE, to use gcc compiler better using
+	__attribute__((always_inline)).
+
+2004-06-08 18:17  opetzold
+
+	* include/tvmet/CommaInitializer.h: using typename for value_type.
+
+2004-06-08 18:16  opetzold
+
+	* include/tvmet/NumericTraits.h: extended member to simplify
+	complex calcs; not used yet.
+
+2004-06-08 14:11  opetzold
+
+	* doc/license.dox: fuck spammer; doxygen ignores java script -
+	email removed completly.
+
+2004-06-08 14:01  opetzold
+
+	* doc/license.dox: shit spammer; corrected email adress using java
+	script.
+
+2004-06-07 14:33  opetzold
+
+	* include/tvmet/CommaInitializer.h: cosmetic.
+
+2004-06-07 13:53  opetzold
+
+	* configure.ac, include/tvmet/config/config-icc.h: Intel compiler
+	warnings now -Wall; in config-icc header pragma
+	warning(disable:981) added (operands are evaluated in unspecified
+	order).
+
+2004-06-07 13:43  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: inline declaration
+	removed from print members.
+
+2004-05-27 17:34  opetzold
+
+	* testsuite/Makefile.am: gcc's warning cxx flag -Wno-inline
+	removed.
+
+2004-05-18 19:35  opetzold
+
+	* configure.ac: unnesessary comments removed.
+
+2004-05-18 19:32  opetzold
+
+	* configure.ac: better configure epilog.
+
+2004-05-11 17:05  opetzold
+
+	* THANKS: updated.
+
+2004-05-01 03:13  opetzold
+
+	* Makefile.am, configure.ac, config/ac_cxx_restrict.m4,
+	doc/Makefile.am: more portabel configure process, thanks to the
+	authors of the autobook. M4 macro ac_cxx_restrict removed and
+	replaced by autoconf's ac_c_restrict macro.
+
+2004-04-30 18:05  opetzold
+
+	* include/tvmet/util/Random.h: using srand and time for
+	initializing random umbers.
+
+2004-04-30 18:03  opetzold
+
+	* include/tvmet/Io.h: bug removed on zero elements matrix print;
+	thanks to Claudia Bertram for reporting.
+
+2004-04-29 00:25  opetzold
+
+	* configure.ac: release 1.5.0 tagged and released.
+
+2004-04-28 23:59  opetzold
+
+	* doc/build.dox, NEWS: updated.
+
+2004-04-28 23:59  opetzold
+
+	* examples/Makefile.am: target examples moved to the examples dir,
+	therefore they are not created by the default build.
+
+2004-04-28 23:58  opetzold
+
+	* configure.ac: default compiler's CFLAGS changed to empty args
+	inside AC_SET_COMPILER.
+
+2004-04-25 01:05  opetzold
+
+	* Makefile.am, autogen.sh: removed, autotools autoreconfig is
+	useable.
+
+2004-04-24 14:11  opetzold
+
+	* testsuite/Makefile.am: cppunit mandatory for check.
+
+2004-04-24 13:59  opetzold
+
+	* include/tvmet/Makefile.am: config.h added to lib sources, it's
+	installed now too.
+
+2004-04-24 13:55  opetzold
+
+	* Makefile.am, configure.ac, regression/Makefile.am,
+	regression/SelfTest.cc, regression/SelfTest.h,
+	regression/TestComplexMatrix.cc, regression/TestComplexMatrix.h,
+	regression/TestComplexVector.cc, regression/TestComplexVector.h,
+	regression/TestConstruction.cc, regression/TestConstruction.h,
+	regression/TestDimension.cc, regression/TestDimension.h,
+	regression/TestMathOps.cc, regression/TestMathOps.h,
+	regression/TestMatrixEval.cc, regression/TestMatrixEval.h,
+	regression/TestMatrixFunctions.cc,
+	regression/TestMatrixFunctions.h,
+	regression/TestMatrixOperators.cc,
+	regression/TestMatrixOperators.h, regression/TestSTL.cc,
+	regression/TestSTL.h, regression/TestUnFunc.cc,
+	regression/TestUnFunc.h, regression/TestUnloops.cc,
+	regression/TestUnloops.h, regression/TestVectorEval.cc,
+	regression/TestVectorEval.h, regression/TestVectorFunctions.cc,
+	regression/TestVectorFunctions.h,
+	regression/TestVectorOperators.cc,
+	regression/TestVectorOperators.h, regression/TestXpr.cc,
+	regression/TestXpr.h, regression/TestXprMatrixFunctions.cc,
+	regression/TestXprMatrixFunctions.h,
+	regression/TestXprMatrixOperators.cc,
+	regression/TestXprMatrixOperators.h,
+	regression/TestXprVectorFunctions.cc,
+	regression/TestXprVectorFunctions.h,
+	regression/TestXprVectorOperators.cc,
+	regression/TestXprVectorOperators.h, regression/main.cc,
+	testsuite/Makefile.am, testsuite/SelfTest.cc, testsuite/SelfTest.h,
+	testsuite/TestComplexMatrix.cc, testsuite/TestComplexMatrix.h,
+	testsuite/TestComplexVector.cc, testsuite/TestComplexVector.h,
+	testsuite/TestConstruction.cc, testsuite/TestConstruction.h,
+	testsuite/TestDimension.cc, testsuite/TestDimension.h,
+	testsuite/TestMathOps.cc, testsuite/TestMathOps.h,
+	testsuite/TestMatrixEval.cc, testsuite/TestMatrixEval.h,
+	testsuite/TestMatrixFunctions.cc, testsuite/TestMatrixFunctions.h,
+	testsuite/TestMatrixOperators.cc, testsuite/TestMatrixOperators.h,
+	testsuite/TestSTL.cc, testsuite/TestSTL.h, testsuite/TestUnFunc.cc,
+	testsuite/TestUnFunc.h, testsuite/TestUnloops.cc,
+	testsuite/TestUnloops.h, testsuite/TestVectorEval.cc,
+	testsuite/TestVectorEval.h, testsuite/TestVectorFunctions.cc,
+	testsuite/TestVectorFunctions.h, testsuite/TestVectorOperators.cc,
+	testsuite/TestVectorOperators.h, testsuite/TestXpr.cc,
+	testsuite/TestXpr.h, testsuite/TestXprMatrixFunctions.cc,
+	testsuite/TestXprMatrixFunctions.h,
+	testsuite/TestXprMatrixOperators.cc,
+	testsuite/TestXprMatrixOperators.h,
+	testsuite/TestXprVectorFunctions.cc,
+	testsuite/TestXprVectorFunctions.h,
+	testsuite/TestXprVectorOperators.cc,
+	testsuite/TestXprVectorOperators.h, testsuite/main.cc: directory
+	regression renamed to testsuite to be conform more to the standard.
+
+2004-04-24 13:36  opetzold
+
+	* INSTALL: removed, since it's from autotools.
+
+2004-04-24 01:41  opetzold
+
+	* Makefile.am, autogen.sh, configure.ac, config/ac_c_long_long.m4,
+	config/ac_cxx_have_complex.m4, config/ac_cxx_have_complex_math1.m4,
+	config/ac_cxx_have_complex_math2.m4,
+	config/ac_cxx_have_ieee_math.m4, config/ac_cxx_have_mutable.m4,
+	config/ac_cxx_have_namespaces.m4, config/ac_cxx_have_sysv_math.m4,
+	config/ac_cxx_partial_specialization.m4, config/ac_cxx_restrict.m4,
+	config/ac_cxx_typename.m4, config/ac_prog_cxx_intel.m4,
+	config/ac_prog_cxx_kai.m4, config/ac_prog_cxx_pgi.m4,
+	config/ac_set_compiler.m4, config/op_cppunit_test.m4,
+	config/op_doxygen_doc.m4, doc/Makefile.am, examples/Makefile.am,
+	regression/Makefile.am, tests/Makefile.am: updated to work with
+	actually autotools (autoconf-2.59, automake-1.8.3, libtool-1.5.6).
+	The warnings on local m4 macros has been removed.
+
+2004-04-23 23:03  opetzold
+
+	* tvmet.m4: m4 macro name AM_PATH_TVMET has been quoted.
+
+2004-04-21 18:39  opetzold
+
+	* doc/build.dox: notes added where the files are installed in.
+
+2004-04-20 01:46  opetzold
+
+	* include/tvmet/TvmetBase.h: doxygen corrections.
+
+2004-04-20 01:45  opetzold
+
+	* doc/build.dox: updated
+
+2004-04-20 01:45  opetzold
+
+	* Makefile.am, configure.ac, doc/Doxyfile.in, doc/Makefile.am,
+	examples/Makefile.am, regression/Makefile.am, tvmet.spec.in:
+	adapted to the new m4 macro packages.
+
+2004-04-20 01:41  opetzold
+
+	* config/: op_cppunit_test.m4, op_doxygen_doc.m4: added.
+	op_doxygen_docs replaces the ac_prog_doxygen.m4. This adds
+	--enable-docs and --enable-verbose-latex to the configure script,
+	which makes more sense as the options b#efore.
+
+2004-04-20 01:39  opetzold
+
+	* config/ac_prog_doxygen.m4: removed.
+
+2004-04-16 20:08  opetzold
+
+	* NEWS: updated.
+
+2004-04-16 18:58  opetzold
+
+	* configure.ac: g++'s CXX_DEBUG_FLAGS 'tuned' to -O1 (which is very
+	rude, since abs on complex types fails on regressions - now it
+	passes); bug removed inside compiler's AC_ARG_WITH: default
+	compiler is g++ really for now 8-)
+
+2004-04-16 18:54  opetzold
+
+	* regression/Makefile.am: EXTRA_PROGRAMS changed to check_PROGRAMS.
+
+2004-04-15 18:21  opetzold
+
+	* regression/Makefile.am: target regression finishs with true.
+
+2004-04-15 18:14  opetzold
+
+	* regression/: Makefile.am, main.cc: target for make check added;
+	main returns return value.
+
+2004-04-15 12:19  opetzold
+
+	* regression/Makefile.am: cosmetic
+
+2004-04-13 00:23  opetzold
+
+	* doc/Makefile.am: functions|operators.dox build again, for cvs use
+	not would not be very clever.
+
+2004-04-12 23:50  opetzold
+
+	* Makefile.am, autogen.sh, configure.ac, doc/Makefile.am,
+	examples/Makefile.am, include/Makefile.am,
+	include/tvmet/Makefile.am, include/tvmet/config/Makefile.am,
+	include/tvmet/loop/Makefile.am, include/tvmet/meta/Makefile.am,
+	include/tvmet/util/Makefile.am, include/tvmet/xpr/Makefile.am,
+	regression/Makefile.am: using libtool now; even if we not use
+	static/shared libs. Therfore the distcheck and uninstall target
+	works, as well as the build and install from separate build
+	directory.
+
+2004-04-12 23:29  opetzold
+
+	* config/Makefile.am: removed.
+
+2004-04-11 04:16  opetzold
+
+	* doc/Makefile.am: build sources for doxy files separated, better
+	structure, DISTCLEANFILES added.
+
+2004-04-11 03:30  opetzold
+
+	* doc/Doxyfile.in: sources in the current directory are parsed by
+	doxygen too.
+
+2004-04-11 03:29  opetzold
+
+	* doc/notes.dox: link to operator_tab.html removed, since obsolete.
+
+2004-04-11 03:29  opetzold
+
+	* doc/operator_tab.html: removed, since obsolete.
+
+2004-04-10 09:55  opetzold
+
+	* configure.ac: more icc specific compiler switches.
+
+2004-04-10 09:39  opetzold
+
+	* configure.ac: compiler options moved more to the top of the file,
+	before AC_PROG_CXX. Still warnings with icc on depency mode; icc
+	doesn't know the -M option. How knows a way?
+
+2004-04-10 09:37  opetzold
+
+	* regression/: TestComplexMatrix.h, TestComplexVector.h: gcc-3.2
+	problem on regression tests once more: fails on complex abs
+	functions for vectors and matrices, the epsilon of the last row is
+	bigger than numerical_limits::epsilon using -O0. Using -O1 the
+	result is as expected. icc works fine with -O0! Anyway, header
+	limits added, needed by icc.
+
+2004-04-10 09:34  opetzold
+
+	* doc/Makefile.am: test on exist pdf manual added.
+
+2004-04-10 08:08  opetzold
+
+	* doc/Makefile.am: CXX_FLAGS set to -O, this should compile on all
+	compilers.
+
+2004-04-10 08:06  opetzold
+
+	* regression/Makefile.am: compiler flags set to  .
+
+2004-04-10 08:05  opetzold
+
+	* include/tvmet/meta/Vector.h: unused argument from
+	all/any_elements removed to avoid compiler warnings.
+
+2004-04-10 07:40  opetzold
+
+	* doc/: Doxyfile.in, Makefile.am: build process outside the source
+	directory is working now.
+
+2004-04-10 06:58  opetzold
+
+	* doc/: benchmark.dox, build.dox, compiler.dox, faq.dox, intro.dox,
+	usage.dox: spell correction.
+
+2004-04-10 02:31  opetzold
+
+	* configure.ac: cosmetic changes.
+
+2004-04-09 23:54  opetzold
+
+	* include/tvmet/Io.h: doxyen class include directive corrected.
+
+2004-04-09 23:12  opetzold
+
+	* doc/Makefile.am: test on exist file replaced by directory for
+	html dir.
+
+2004-04-09 12:22  opetzold
+
+	* configure.ac: 'check mark' for the found dot tool for inheritance
+	diagrams used by doxygen
+
+2004-04-09 10:54  opetzold
+
+	* include/tvmet/meta/Gemm.h: comment on mandatory square matrices
+	removed since isn't true.
+
+2004-04-09 10:50  opetzold
+
+	* doc/Makefile.am: target html/index.html does check on created
+	html dir before.
+
+2004-04-09 10:42  opetzold
+
+	* doc/Makefile.am: better Makefile structure; formulas in HTML do
+	work now. The problem was related to the LaTeX style used - doxygen
+	needs it for formulas in HTML too and there is no way to set the
+	environment right.
+
+2004-04-09 09:18  opetzold
+
+	* configure.ac: bug: changed AC_CANONICAL_BUILD to
+	AC_CANONICAL_HOST; replaced after AC_CONFIG_AUX_DIR. Now the
+	configure script will find the files needed.
+
+2004-04-09 07:48  opetzold
+
+	* configure.ac, doc/Makefile.am, doc/compiler.dox, doc/faq.dox,
+	doc/footer.html, doc/footer.html.in, doc/projects.dox: footer.html
+	replaced by footer.html.in; I'm using java script in the footer for
+	email support to get lord of the spam hopefuly 8-| Apropriate files
+	updated.
+
+2004-03-29 14:04  opetzold
+
+	* doc/Doxyfile.in: updated.
+
+2004-03-29 14:04  opetzold
+
+	* doc/Makefile.am: docs target postscript removed, since never
+	used.
+
+2004-03-28 20:06  opetzold
+
+	* doc/: build.dox, faq.dox: updated.
+
+2004-03-28 19:26  opetzold
+
+	* Makefile.am, configure.ac, examples/Makefile.am: target examples
+	removed. Since the directory does have the same name as the target,
+	make doesn't build it.
+
+2004-03-27 20:12  opetzold
+
+	* Makefile.am: target added for md5 and gnu pgp signature.
+
+2004-03-27 20:11  opetzold
+
+	* configure.ac: cosmetic changes.
+
+2004-03-27 15:37  opetzold
+
+	* tvmet.spec.in: email removed (due to the spam problem).
+
+2004-03-27 15:06  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MMProductTransposed.h,
+	xpr/MMtProduct.h, xpr/MatrixFunctions.h, xpr/MMProduct.h: notation
+	of formulas unified.
+
+2004-03-27 15:00  opetzold
+
+	* doc/tvmet.sty.in: using fancyhdr. This is due to doxygens include
+	of this style on gnerating formulas for html docs. From principle
+	point, it doubles since it's used before by doxygen.sty.
+
+2004-03-27 14:27  opetzold
+
+	* doc/: faq.dox, notes.dox, usage.dox, works.dox: typos corrected.
+
+2004-03-27 14:19  opetzold
+
+	* NEWS: updated and typos corrected
+
+2004-03-27 14:07  opetzold
+
+	* tvmet.spec.in: adapted for new configue options.
+
+2004-03-27 12:17  opetzold
+
+	* doc/Doxyfile.in, doc/Makefile.am, doc/tvmet.sty.in, configure.ac:
+	for the LaTeX/pdf target we use our own style.
+
+2004-03-27 10:36  opetzold
+
+	* configure.ac: bugs removed used other compiler than gcc. Improved
+	summarized user informations. New targets: --enable-optimizations
+	and --enable-warnings; therefore better compiler options.
+
+2004-03-27 10:34  opetzold
+
+	* autogen.sh: autoconf running with --warnings=all
+
+2004-03-27 10:32  opetzold
+
+	* doc/compiler.dox: typo corrected in url
+
+2004-03-27 09:46  opetzold
+
+	* Makefile.am, config/ac_set_compiler.m4: new m4 macro
+	AC_SET_COMPILER added - borrowed from blitz++
+
+2004-03-27 09:43  opetzold
+
+	* config/ac_prog_doxygen.m4: cvs Id tag added, more informations
+	too.
+
+2004-03-27 09:42  opetzold
+
+	* config/ac_prog_doxygen.m4: latex docs enabled are default now.
+
+2004-03-26 09:06  opetzold
+
+	* NEWS: updated
+
+2004-03-26 08:58  opetzold
+
+	* examples/aliasing.cc: using tvmet:util:Incrementor now.
+
+2004-03-26 08:56  opetzold
+
+	* examples/: Makefile.am, alias.cc: example added for alias keyword
+
+2004-02-05 17:12  opetzold
+
+	* doc/projects.dox: url for iplt updated.
+
+2004-01-27 19:16  opetzold
+
+	* doc/compiler.dox: section about icc v8.0 updated.
+
+2004-01-27 19:06  opetzold
+
+	* include/tvmet/: MatrixUnaryFunctions.h, VectorUnaryFunctions.h,
+	xpr/MatrixUnaryFunctions.h, xpr/VectorUnaryFunctions.h,
+	config/config-icc.h: Intel v8.00 uses pure macros for isnan and
+	isinf. This makes not possible to write overload this. Therefore
+	it's disabled for this compiler.
+
+2004-01-11 18:49  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: Constructor on iterators uses
+	std::copy instead self written loop.
+
+2003-12-19 19:01  opetzold
+
+	* doc/: Util.h, dox_functions.cc: extended docs and TVMET_ prefix
+	added.
+
+2003-12-13 21:20  opetzold
+
+	* include/tvmet/NumericTraits.h: infos about complex type added.
+
+2003-12-09 19:38  opetzold
+
+	* include/tvmet/VectorImpl.h: oh dear, forgotten Io.h header added.
+
+2003-12-09 19:32  opetzold
+
+	* include/tvmet/VectorImpl.h: copy&paste devel was here -
+	IoPrintHelper template's arg corrected.
+
+2003-12-09 19:31  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: member's print_on()
+	using IoPrintHelper now, simplifies Matrix/Vector printing and
+	spacing regarding types and signs.
+
+2003-12-09 19:30  opetzold
+
+	* include/tvmet/Makefile.am: Io.h added.
+
+2003-12-09 19:29  opetzold
+
+	* include/tvmet/Io.h: added, simplifies Matrix/Vector printing and
+	spacing regarding types and signs.
+
+2003-12-09 18:12  opetzold
+
+	* include/tvmet/AliasProxy.h: AliasProxy member operator's return
+	statement simplified.
+
+2003-12-09 17:58  opetzold
+
+	* include/tvmet/: Vector.h, VectorImpl.h: alias_xyz() functions for
+	Vector<> for use with alias() added.
+
+2003-12-09 17:55  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixImpl.h: alias_xyz() functions for
+	Matrix<> for use with alias() added.
+
+2003-12-07 20:34  opetzold
+
+	* include/tvmet/AliasProxy.h: typo correction.
+
+2003-12-07 19:52  opetzold
+
+	* configure.ac: release 1.4.1 tagged and released.
+
+2003-12-07 19:47  opetzold
+
+	* NEWS: updated for release 1.4.1
+
+2003-12-07 19:41  opetzold
+
+	* benchmark/BTL-20030124.patch: aat and ata graph shows matrices
+	with less than 10x10 too.
+
+2003-12-07 19:39  opetzold
+
+	* doc/: aat.png, ata.png: graph shows the dimension less than 10x10
+	now.
+
+2003-12-07 19:38  opetzold
+
+	* doc/notes.dox: due to the forgotten tvmet/loop/Vector.h from
+	1.4.0, we have to release a release 1.4.1 - notes updated.
+
+2003-12-07 19:37  opetzold
+
+	* include/tvmet/loop/Makefile.am: fix: forgotten Vector.h from
+	1.4.0 added.
+
+2003-12-07 19:09  opetzold
+
+	* NEWS: updated.
+
+2003-12-07 19:09  opetzold
+
+	* doc/notes.dox: chapter notes about aliasing extended for alias(x)
+	use.
+
+2003-12-07 19:08  opetzold
+
+	* doc/intro.dox: slighly corrections.
+
+2003-12-07 18:43  opetzold
+
+	* include/tvmet/: Makefile.am, Matrix.h, MatrixImpl.h, Vector.h,
+	VectorImpl.h: new functions for AliasProxy/alias function added.
+	These uses temporaries for alias assign like M += trans(M).
+
+2003-12-07 18:38  opetzold
+
+	* include/tvmet/AliasProxy.h: added.
+
+2003-12-07 13:30  opetzold
+
+	* regression/: TestComplexMatrix.h, TestComplexVector.h,
+	TestUnloops.h: using util::Incrementor instead of old one from
+	(absolete) RegrUtil.
+
+2003-12-07 13:29  opetzold
+
+	* include/tvmet/util/Makefile.am: Incrementor.h and Random.h added.
+
+2003-12-07 10:51  opetzold
+
+	* regression/Makefile.am: RegrUtil.h removed.
+
+2003-12-07 10:50  opetzold
+
+	* regression/RegrUtil.h: absolete, since mved to
+	include/tvmet/util/Incrementor.h.
+
+2003-12-07 10:50  opetzold
+
+	* include/tvmet/util/: Incrementor.h, Random.h: added. Incrementor
+	absoletes regession/RegrUtil.h.
+
+2003-12-05 21:38  opetzold
+
+	* doc/Doxyfile.in: cvs tag re-added.
+
+2003-12-05 20:37  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixOperators.h,
+	xpr/MatrixFunctions.h: doxygen notes on used temporaries removed
+	since absolete statement.
+
+2003-12-05 20:10  opetzold
+
+	* doc/faq.dox: link to license added.
+
+2003-12-05 20:08  opetzold
+
+	* include/tvmet/UnaryFunctionals.h, include/tvmet/tvmet.h,
+	doc/Doxyfile.in, doc/benchmark.dox, doc/build.dox,
+	doc/compiler.dox, doc/faq.dox, doc/license.dox, doc/links.dox,
+	doc/notes.dox, doc/usage.dox: doxygen warnigns corrected.
+
+2003-12-05 18:48  opetzold
+
+	* configure.ac: release-1-4-0 tagged and released.
+
+2003-12-05 18:47  opetzold
+
+	* NEWS: updated.
+
+2003-12-05 18:46  opetzold
+
+	* include/tvmet/Matrix.h: forwards for MatrixSliceConstReference
+	added, the class self isn't in the actually dist and therefore not
+	yet used!
+
+2003-12-05 18:42  opetzold
+
+	* tests/t.cc: updated to use the new naming convention - it seem's
+	all operator combinations are supported.
+
+2003-12-05 18:25  opetzold
+
+	* doc/header.html: more compliant to the w3 standard.
+
+2003-12-05 18:23  opetzold
+
+	* doc/tvmet.css: style sheet updated based on doxygen 1.3.5 - nice
+	look!
+
+2003-12-04 20:18  opetzold
+
+	* Makefile.am, configure.ac: updated for benchmark dir.
+
+2003-12-04 20:18  opetzold
+
+	* benchmark/: BTL-20030124.patch, Makefile.am: added.
+
+2003-12-04 20:08  opetzold
+
+	* NEWS: updated.
+
+2003-12-03 20:01  opetzold
+
+	* include/tvmet/VectorImpl.h: vector print_on() indent space
+	increased, better look for matrix vector slices compared with
+	matrizes self.
+
+2003-12-03 19:21  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: print_on() works with
+	complex types too. Unfortunally, ostream ignores setw(x) using gnu
+	libstdc++-v3.
+
+2003-12-01 19:54  opetzold
+
+	* include/tvmet/xpr/: MatrixCol.h, MatrixRow.h: const correctness
+	improved.
+
+2003-12-01 19:21  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, VectorFunctions.h: min/max on
+	Matrix/Vector uses iterators instead row/col loops.
+
+2003-12-01 19:19  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: member's print_on()
+	functions takes care on maximum element and aligns all element
+	printing.
+
+2003-11-30 19:35  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, Matrix.h, MatrixImpl.h,
+	TvmetBase.h, UnaryFunctionals.h, Vector.h, VectorImpl.h,
+	xpr/BinOperator.h, xpr/Eval.h, xpr/Literal.h, xpr/MMProduct.h,
+	xpr/MMProductTransposed.h, xpr/MMtProduct.h, xpr/MVProduct.h,
+	xpr/Matrix.h, xpr/MatrixCol.h, xpr/MatrixDiag.h, xpr/MatrixRow.h,
+	xpr/MatrixTranspose.h, xpr/MtMProduct.h, xpr/MtVProduct.h,
+	xpr/Null.h, xpr/UnOperator.h, xpr/Vector.h: we distuingish between
+	expression and matrix/vector printing by different member
+	functions. foo::print_xpr() prints the expression, foo:print_on()
+	prints the matrix/vector style as before. The global operator<<'s
+	are overloaded according.
+
+2003-11-30 16:39  opetzold
+
+	* doc/matrix_vector.png: BTL benchmark result pngs added.
+
+2003-11-30 16:30  opetzold
+
+	* doc/Doxyfile.in: IMG_PATH set to doc directory.
+
+2003-11-30 16:28  opetzold
+
+	* doc/: aat.png, ata.png, axpy.png, matrix_matrix.png: BTL
+	benchmark result pngs added.
+
+2003-11-30 16:24  opetzold
+
+	* doc/benchmark.dox: updated for BTL benchmark.
+
+2003-11-30 16:24  opetzold
+
+	* doc/Makefile.am: old benchmark placeholder replaced by BTL
+	results.
+
+2003-11-30 16:24  opetzold
+
+	* doc/: bench_daxpy.png, bench_matrix_matrix_product.png,
+	bench_matrix_vector_product.png, bench_vector_add.png,
+	bench_vector_inner_product.png: benchmark result placeholder
+	removed.
+
+2003-11-30 11:47  opetzold
+
+	* tvmet-config.1: cvs conflicts removed - concerning email adress
+	changes.
+
+2003-11-30 11:45  opetzold
+
+	* include/tvmet/: Matrix.h, TvmetBase.h, Vector.h, xpr/MMProduct.h,
+	xpr/MMProductTransposed.h, xpr/MMtProduct.h, xpr/MVProduct.h,
+	xpr/Matrix.h, xpr/MtMProduct.h, xpr/MtVProduct.h, xpr/Vector.h:
+	MetaTag<> replaced by dispatch<> to be more flexible by using
+	Alexandrescu's Type-to-Type mapping (Ch. 2.5).
+
+2003-11-30 09:26  opetzold
+
+	* AUTHORS, configure.ac, tvmet-config.1, tvmet.spec.in, doc/Util.h,
+	doc/compiler.dox, doc/dox_functions.cc, doc/dox_operators.cc,
+	doc/faq.dox, doc/footer.html, doc/license.dox, doc/projects.dox,
+	examples/frob_matrix_norm.cc, include/tvmet/BinaryFunctionals.h,
+	include/tvmet/CommaInitializer.h, include/tvmet/CompileTimeError.h,
+	include/tvmet/Extremum.h, include/tvmet/Functional.h,
+	include/tvmet/Matrix.h, include/tvmet/MatrixBinaryFunctions.h,
+	include/tvmet/MatrixEval.h, include/tvmet/MatrixFunctions.h,
+	include/tvmet/MatrixImpl.h, include/tvmet/MatrixOperators.h,
+	include/tvmet/MatrixUnaryFunctions.h,
+	include/tvmet/NumericTraits.h, include/tvmet/RunTimeError.h,
+	include/tvmet/TvmetBase.h, include/tvmet/TypePromotion.h,
+	include/tvmet/UnaryFunctionals.h, include/tvmet/Vector.h,
+	include/tvmet/VectorBinaryFunctions.h, include/tvmet/VectorEval.h,
+	include/tvmet/VectorFunctions.h, include/tvmet/VectorImpl.h,
+	include/tvmet/VectorOperators.h,
+	include/tvmet/VectorUnaryFunctions.h, include/tvmet/tvmet.h,
+	include/tvmet/config/config-gcc.h,
+	include/tvmet/config/config-icc.h,
+	include/tvmet/config/config-kcc.h,
+	include/tvmet/config/config-pgi.h, include/tvmet/loop/Gemm.h,
+	include/tvmet/loop/Gemmt.h, include/tvmet/loop/Gemtm.h,
+	include/tvmet/loop/Gemtv.h, include/tvmet/loop/Gemv.h,
+	include/tvmet/loop/Matrix.h, include/tvmet/loop/Vector.h,
+	include/tvmet/meta/Gemm.h, include/tvmet/meta/Gemmt.h,
+	include/tvmet/meta/Gemtm.h, include/tvmet/meta/Gemtv.h,
+	include/tvmet/meta/Gemv.h, include/tvmet/meta/Matrix.h,
+	include/tvmet/meta/Vector.h, include/tvmet/util/General.h,
+	include/tvmet/util/Timer.h, include/tvmet/xpr/BinOperator.h,
+	include/tvmet/xpr/Eval.h, include/tvmet/xpr/Literal.h,
+	include/tvmet/xpr/MMProduct.h,
+	include/tvmet/xpr/MMProductTransposed.h,
+	include/tvmet/xpr/MMtProduct.h, include/tvmet/xpr/MVProduct.h,
+	include/tvmet/xpr/Matrix.h,
+	include/tvmet/xpr/MatrixBinaryFunctions.h,
+	include/tvmet/xpr/MatrixCol.h, include/tvmet/xpr/MatrixDiag.h,
+	include/tvmet/xpr/MatrixFunctions.h,
+	include/tvmet/xpr/MatrixOperators.h, include/tvmet/xpr/MatrixRow.h,
+	include/tvmet/xpr/MatrixTranspose.h,
+	include/tvmet/xpr/MatrixUnaryFunctions.h,
+	include/tvmet/xpr/MtMProduct.h, include/tvmet/xpr/MtVProduct.h,
+	include/tvmet/xpr/Null.h, include/tvmet/xpr/UnOperator.h,
+	include/tvmet/xpr/Vector.h,
+	include/tvmet/xpr/VectorBinaryFunctions.h,
+	include/tvmet/xpr/VectorFunctions.h,
+	include/tvmet/xpr/VectorOperators.h,
+	include/tvmet/xpr/VectorUnaryFunctions.h, regression/RegrUtil.h,
+	regression/SelfTest.cc, regression/SelfTest.h,
+	regression/TestComplexMatrix.cc, regression/TestComplexMatrix.h,
+	regression/TestComplexVector.cc, regression/TestComplexVector.h,
+	regression/TestConstruction.cc, regression/TestConstruction.h,
+	regression/TestDimension.cc, regression/TestDimension.h,
+	regression/TestMathOps.cc, regression/TestMathOps.h,
+	regression/TestMatrixEval.cc, regression/TestMatrixEval.h,
+	regression/TestMatrixFunctions.cc,
+	regression/TestMatrixFunctions.h,
+	regression/TestMatrixOperators.cc,
+	regression/TestMatrixOperators.h, regression/TestSTL.cc,
+	regression/TestSTL.h, regression/TestUnFunc.cc,
+	regression/TestUnFunc.h, regression/TestUnloops.cc,
+	regression/TestUnloops.h, regression/TestVectorEval.cc,
+	regression/TestVectorEval.h, regression/TestVectorFunctions.cc,
+	regression/TestVectorFunctions.h,
+	regression/TestVectorOperators.cc,
+	regression/TestVectorOperators.h, regression/TestXpr.cc,
+	regression/TestXpr.h, regression/TestXprMatrixFunctions.cc,
+	regression/TestXprMatrixFunctions.h,
+	regression/TestXprMatrixOperators.cc,
+	regression/TestXprMatrixOperators.h,
+	regression/TestXprVectorFunctions.cc,
+	regression/TestXprVectorFunctions.h,
+	regression/TestXprVectorOperators.cc,
+	regression/TestXprVectorOperators.h, regression/main.cc: email
+	adress changed to point to sourceforce.
+
+2003-11-29 09:27  opetzold
+
+	* include/tvmet/CompileTimeError.h: Compile Time Error got tvmet
+	prefix.
+
+2003-11-20 20:33  opetzold
+
+	* regression/TestComplexVector.h: test on abs ready.
+
+2003-11-14 14:51  opetzold
+
+	* regression/TestUnFunc.h: asin results are compared against
+	M_PI/2.0 (forgotten to change).
+
+2003-11-14 14:00  opetzold
+
+	* include/tvmet/xpr/MatrixBinaryFunctions.h: cosmetic.
+
+2003-11-14 14:00  opetzold
+
+	* include/tvmet/xpr/VectorBinaryFunctions.h: functions on
+	expressions doesn't return const_ref's - useless for expressions.
+	Thanks to Julian C. Cummings.
+
+2003-11-14 13:55  opetzold
+
+	* regression/TestUnFunc.h: arguments are vOne/mOne for asin
+	function. Thanks to Julian C. Cummings.
+
+2003-11-13 21:41  opetzold
+
+	* NEWS: updated for the upcoming release.
+
+2003-11-13 20:44  opetzold
+
+	* regression/TestUnloops.h: MM. MtM, MMt, Mv and Mtv tests added.
+
+2003-11-13 20:44  opetzold
+
+	* regression/TestUnloops.cc: regression test for int's ready.
+
+2003-11-13 20:42  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, Matrix.h, MatrixFunctions.h,
+	MatrixImpl.h, UnaryFunctionals.h, Vector.h, VectorFunctions.h,
+	VectorImpl.h: Expression printing gives more detailed informations.
+	Further more they use a meta trigger to distuingish between use of
+	meta or loop templates. This is done by overloading specialized
+	member functions. We use an assign_to member function, which can be
+	used for caching without leaving the scope! Matrix and Vector does
+	have an enum Rows/Cols and Size.
+
+2003-11-13 20:39  opetzold
+
+	* include/tvmet/TvmetBase.h: indent level changed to 4 spaces,
+	struct MetaTag added - used for member overloading to diszuingish
+	between meta and loop templates.
+
+2003-11-13 20:34  opetzold
+
+	* include/tvmet/xpr/: BinOperator.h, Literal.h, MMProduct.h,
+	MMProductTransposed.h, MMtProduct.h, MVProduct.h, Matrix.h,
+	MatrixCol.h, MatrixDiag.h, MatrixRow.h, MatrixTranspose.h,
+	MtMProduct.h, MtVProduct.h, Null.h, UnOperator.h, Vector.h:
+	Expression printing gives more detailed informations. Further more
+	they use a meta trigger to distuingish between use of meta or loop
+	templates. This is done by overloading specialized member
+	functions.
+
+2003-11-13 20:31  opetzold
+
+	* include/tvmet/loop/Gemm.h: prod is static inline.
+
+2003-11-13 20:28  opetzold
+
+	* include/tvmet/loop/Vector.h: added.
+
+2003-11-13 20:28  opetzold
+
+	* include/tvmet/tvmet.h: TVMET_COMPLEXITY_{M,V}_ASSIGN_TRIGGER and
+	TVMET_COMPLEXITY_{MM,MV}_TRIGGER added resp. changed.
+
+2003-11-03 20:53  opetzold
+
+	* include/tvmet/loop/Makefile.am: Gemv.h and Gemtv.h added.
+
+2003-11-03 20:52  opetzold
+
+	* include/tvmet/loop/: Gemtv.h, Gemv.h: added for Mv and Mtv
+	products.
+
+2003-10-28 21:11  opetzold
+
+	* include/tvmet/loop/Matrix.h: Duff's device removed, since bugy -
+	using loops as before.
+
+2003-10-28 21:02  opetzold
+
+	* include/tvmet/loop/: Gemm.h, Gemmt.h, Gemtm.h, Matrix.h:
+	rewritten using duff's device.
+
+2003-10-28 19:54  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: member print_on():
+	informations about types and sizes removed.
+
+2003-10-28 19:43  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: Printing changed. A 'cout <<
+	{matrix,vector};' doesn't give any informations about types and
+	sizes any more - only data print. To get this use the static member
+	function info(), which returns a {Matrix,Vector}::Info object for
+	print on ostreams. This simplifies the copy&paste process to
+	octave/matlab.
+
+2003-10-28 18:27  opetzold
+
+	* include/tvmet/Vector.h: complexity counter added, added a enum
+	Sz.
+
+2003-10-28 18:26  opetzold
+
+	* include/tvmet/MatrixImpl.h: expression level printing according
+	to other output.
+
+2003-10-28 18:25  opetzold
+
+	* include/tvmet/MatrixFunctions.h: row(), col() and diag() are
+	using a MatrixConstReference now.
+
+2003-10-28 18:25  opetzold
+
+	* include/tvmet/Matrix.h: Matrix, MatrixConstReference does have an
+	complexity counter as well as rewritten expression level printing.
+	static member rows() and cols() renamed to n_rows()/n_cols(). Added
+	new enum rows and cols. Using assign_to syntax.
+
+2003-10-28 18:19  opetzold
+
+	* include/tvmet/xpr/: BinOperator.h, Eval.h, Literal.h,
+	MMProduct.h, MMProductTransposed.h, MMtProduct.h, MVProduct.h,
+	Matrix.h, MatrixCol.h, MatrixDiag.h, MatrixRow.h,
+	MatrixTranspose.h, MtMProduct.h, MtVProduct.h, Null.h,
+	UnOperator.h, Vector.h: complexity counter added; expression level
+	printing shows the complexity. XPrMatrix do have an assign_to
+	member.
+
+2003-10-28 18:17  opetzold
+
+	* regression/Makefile.am: TestUnloops.{h,cc} added. Optimizer level
+	is -O, no compiler debug infos.
+
+2003-10-28 18:16  opetzold
+
+	* regression/: TestUnloops.cc, TestUnloops.h: new test for loop
+	regression operations added.
+
+2003-10-28 18:12  opetzold
+
+	* include/tvmet/loop/: Gemm.h, Gemmt.h, Gemtm.h: classes's
+	constructor is public.
+
+2003-10-28 18:11  opetzold
+
+	* include/tvmet/loop/Makefile.am: Matrix.h added.
+
+2003-10-28 18:07  opetzold
+
+	* include/tvmet/loop/Matrix.h: added.
+
+2003-10-26 09:18  opetzold
+
+	* include/tvmet/TvmetBase.h: Indentlevel changed from 4 to 2
+	spaces.
+
+2003-10-26 08:13  opetzold
+
+	* include/tvmet/Matrix.h: check on self assign removed since
+	useless. The function operator=(const Matrix<T2, Rows, Cols>& rhs)
+	does have a different signature allready.
+
+2003-10-25 07:49  opetzold
+
+	* regression/Makefile.am: optimization level changed to -O1 to
+	reduce compile time.
+
+2003-10-23 19:55  opetzold
+
+	* include/tvmet/xpr/: MMProduct.h, MMProductTransposed.h,
+	MMtProduct.h, MtMProduct.h: using new unrool looping stuff for
+	bigger sized matrices.
+
+2003-10-23 19:54  opetzold
+
+	* include/tvmet/loop/Makefile.am: Gemmt.h and Gemtm.h added.
+
+2003-10-23 19:53  opetzold
+
+	* include/tvmet/loop/Gemm.h: doxygen corrections; internal enums
+	renamed.
+
+2003-10-23 19:52  opetzold
+
+	* include/tvmet/loop/: Gemmt.h, Gemtm.h: added. Using loop
+	unrolling for MtM and MMt matrix-matrix products.
+
+2003-10-23 19:51  opetzold
+
+	* include/tvmet/meta/Gemmt.h: doxygen corrections.
+
+2003-10-21 21:49  opetzold
+
+	* include/tvmet/loop/Gemm.h: doxygen corrections.
+
+2003-10-21 21:42  opetzold
+
+	* tests/Makefile.am: file bad_xpr_const_ref.cc added.
+
+2003-10-21 21:40  opetzold
+
+	* tests/bad_xpr_const_ref.cc: This example shows the problem on
+	holding references by expressions. On higher optimization levels
+	all things are good. Without optimizations it crashs.
+
+2003-10-21 21:37  opetzold
+
+	* tests/tvmet.cc: cvs Id and notes added. 'const E& restrict'
+	replaced by 'const E'.
+
+2003-10-21 21:23  opetzold
+
+	* include/tvmet/xpr/MMProductTransposed.h: include header to meta
+	stuff moved from MatrixFunctions.h to the appropriate headers.
+
+2003-10-21 21:07  opetzold
+
+	* include/tvmet/: tvmet.h, tvmet.h: macro TVMET_RVO_BUG_WO removed
+	- never be needed. Macro TVMET_COMPLEXITY_{DEFAULT, MM, MV}_TRIGGER
+	added. This allows the user to change meta template to
+	looping/unlooping strategy. Since this is architecture/compiler
+	specific, the best place would be inside config/config-[compiler].h
+
+2003-10-21 20:48  opetzold
+
+	* include/tvmet/NumericTraits.h: complexity for numeric types
+	added.
+
+2003-10-21 20:39  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MMProduct.h,
+	xpr/MMtProduct.h, xpr/MVProduct.h, xpr/MtMProduct.h,
+	xpr/MtVProduct.h: include header to meta stuff moved from
+	MatrixFunctions.h to the appropriate headers.
+
+2003-10-21 18:45  opetzold
+
+	* doc/intro.dox: link to rvo_bug removed, since absolete.
+
+2003-10-19 11:14  opetzold
+
+	* include/tvmet/: meta/Gemm.h, meta/Gemmt.h, meta/Gemtm.h,
+	xpr/MVProduct.h: doxygen corrections and extensions.
+
+2003-10-19 10:34  opetzold
+
+	* configure.ac: version 1.3.0 released and tagged.
+
+2003-10-19 10:32  opetzold
+
+	* NEWS: updated.
+
+2003-10-19 10:32  opetzold
+
+	* include/tvmet/xpr/: BinOperator.h, Eval.h, MMProduct.h,
+	MMProductTransposed.h, MMtProduct.h, MVProduct.h, Matrix.h,
+	MatrixCol.h, MatrixDiag.h, MatrixRow.h, MatrixTranspose.h,
+	MtMProduct.h, MtVProduct.h, UnOperator.h, Vector.h: all expressions
+	hold their arguments/sub expressions by const value instead by
+	const reference as before. Compiled code runs successfully even
+	with no optimization levels like -O0.
+
+2003-10-19 09:04  opetzold
+
+	* doc/notes.dox: composed operations updated. I have to write more
+	using the O-notation.
+
+2003-10-18 11:52  opetzold
+
+	* include/tvmet/tvmet.h: doxygen docs for namespace loop added.
+
+2003-10-18 11:42  opetzold
+
+	* configure.ac, include/tvmet/Makefile.am: loop stuff added.
+
+2003-10-18 11:42  opetzold
+
+	* include/tvmet/loop/Makefile.am: added.
+
+2003-10-18 11:41  opetzold
+
+	* include/tvmet/loop/Gemm.h: prod() function using loops resp. loop
+	unrolling added.
+
+2003-10-18 09:43  opetzold
+
+	* include/tvmet/Matrix.h: Matrix member functions rows() and cols()
+	are static now.
+
+2003-10-18 07:43  opetzold
+
+	* regression/RegrUtil.h: doxygen docs added.
+
+2003-10-14 19:27  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: operator=({Matrix,Vector})
+	checks on self assign.
+
+2003-10-14 18:32  opetzold
+
+	* tests/tvmet.cc: enlighted. This shows only one calculation:
+	B'D*B2.
+
+2003-10-14 18:27  opetzold
+
+	* tests/Makefile.am: bad_temps.cc added.
+
+2003-10-14 18:27  opetzold
+
+	* tests/bad_temps.cc: added. Acts as an example for wrong use of
+	temps, aka rvo_bug.cc prior.
+
+2003-10-14 18:06  opetzold
+
+	* include/tvmet/xpr/Makefile.am: XprMtVProduct.h added.
+
+2003-10-12 12:05  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: new feature 8) on defined
+	TVMET_DYNAMIC_MEMORY: tvmet allocates memory using new/delete. This
+	should simplify the debugging process using valgrind.
+
+2003-10-12 12:03  opetzold
+
+	* regression/Makefile.am: to CXXFLAGS -g for debugging added.
+
+2003-10-12 11:01  opetzold
+
+	* include/tvmet/xpr/ProductTransposed.h: removed since isn't used
+	anywhere/anymore.
+
+2003-10-12 09:52  opetzold
+
+	* regression/TestComplexVector.h: tests on abs added, but not yet
+	bounded to unit tests.
+
+2003-10-12 09:50  opetzold
+
+	* regression/TestComplexMatrix.h: tests on abs added.
+
+2003-10-12 09:49  opetzold
+
+	* doc/notes.dox: section rvo_bug removed, section temporaries
+	updated.
+
+2003-10-12 09:48  opetzold
+
+	* doc/faq.dox: old reference about ne_operator removed.
+
+2003-10-12 09:48  opetzold
+
+	* configure.ac: message about make docs added.
+
+2003-10-12 09:24  opetzold
+
+	* include/tvmet/: MatrixUnaryFunctions.h, VectorUnaryFunctions.h:
+	complex types does have their own macro to avoid ambigous
+	overloads, happened by examples/frob_matrix_norm.cc and norm().
+
+2003-10-12 08:49  opetzold
+
+	* include/tvmet/MatrixOperators.h: doxygen corrections.
+
+2003-10-12 08:45  opetzold
+
+	* include/tvmet/: meta/Gemtv.h, MatrixFunctions.h: doxygen
+	corrections.
+
+2003-10-12 08:43  opetzold
+
+	* tests/README: spelling error corrected.
+
+2003-10-12 08:42  opetzold
+
+	* tests/Makefile.am: rvo_bug.cc removed.
+
+2003-10-12 08:42  opetzold
+
+	* tests/rvo_bug.cc: removed, since absolete.
+
+2003-10-12 08:41  opetzold
+
+	* examples/hspiess.cc: use with a user specified temporary added.
+
+2003-10-11 19:13  opetzold
+
+	* NEWS, THANKS: updated.
+
+2003-10-11 19:11  opetzold
+
+	* examples/hspiess.cc: comments on wrong results removed, since
+	absolete.
+
+2003-10-11 19:10  opetzold
+
+	* tests/Makefile.am: tvmet.cc added.
+
+2003-10-11 19:10  opetzold
+
+	* tests/tvmet.cc: new approached used added.
+
+2003-10-11 19:08  opetzold
+
+	* include/tvmet/: CommaInitializer.h, Matrix.h, MatrixFunctions.h,
+	MatrixImpl.h, MatrixOperators.h, Vector.h, VectorBinaryFunctions.h,
+	VectorImpl.h, meta/Gemm.h, meta/Gemmt.h, meta/Gemtm.h, meta/Gemv.h,
+	meta/Matrix.h, meta/Vector.h, xpr/MMProduct.h,
+	xpr/MMProductTransposed.h, xpr/MMtProduct.h, xpr/MVProduct.h,
+	xpr/Matrix.h, xpr/MatrixCol.h, xpr/MatrixDiag.h,
+	xpr/MatrixFunctions.h, xpr/MatrixOperators.h, xpr/MatrixRow.h,
+	xpr/MatrixTranspose.h, xpr/MtMProduct.h, xpr/ProductTransposed.h,
+	xpr/UnOperator.h, xpr/Vector.h: new approach for expression
+	templates. This solves the RVO problem. Combining expressions is
+	working now. All temporaries used are removed.
+	{Matrix,Vector}ConstReference is used everywhere. Further more some
+	cosmetic changes.
+
+2003-10-11 19:02  opetzold
+
+	* regression/TestDimension.h: Test for Mtx renamed.
+
+2003-10-11 19:01  opetzold
+
+	* include/tvmet/meta/Makefile.am: include/tvmet/xpr/MtVProduct.h
+	include/tvmet/meta/Gemtv.h added.
+
+2003-10-11 19:00  opetzold
+
+	* include/tvmet/: meta/Gemtv.h, xpr/MtVProduct.h: added for
+	transpose(Matrix)*Vector function.
+
+2003-10-11 12:30  opetzold
+
+	* include/tvmet/xpr/UnOperator.h: internal member naming convention
+	simplified/cleared.
+
+2003-10-11 11:50  opetzold
+
+	* include/tvmet/xpr/: MatrixCol.h, MatrixDiag.h: internal member
+	naming convention simplified/cleared.
+
+2003-10-11 11:44  opetzold
+
+	* include/tvmet/xpr/Literal.h: internal member naming convention
+	simplified/cleared.
+
+2003-10-11 11:37  opetzold
+
+	* include/tvmet/xpr/: BinOperator.h, BinOperator.h: internal member
+	naming convention simplified/cleared.
+
+2003-10-05 19:46  opetzold
+
+	* include/tvmet/xpr/Makefile.am: ConstRef.h removed.
+
+2003-10-03 15:30  opetzold
+
+	* include/tvmet/: MatrixBinaryFunctions.h, VectorBinaryFunctions.h,
+	VectorBinaryFunctions.h: cosmetic.
+
+2003-10-03 15:04  opetzold
+
+	* include/tvmet/xpr/MatrixBinaryFunctions.h: macro FUNC(T lhs,
+	const XprMatrix<E, Rows, Cols>& rhs) removed since never
+	used/usefull.
+
+2003-10-03 14:57  opetzold
+
+	* include/tvmet/: MatrixBinaryFunctions.h, VectorBinaryFunctions.h:
+	complex math: cref replaced by const_ref
+
+2003-10-03 12:50  opetzold
+
+	* regression/Makefile.am: TestComplexVector.h,
+	TestComplexVector.cc, TestComplexMatrix.h, TestComplexMatrix.cc
+	added
+
+2003-10-03 12:49  opetzold
+
+	* regression/: TestComplexMatrix.cc, TestComplexMatrix.h,
+	TestComplexVector.cc, TestComplexVector.h: added.
+
+2003-10-03 09:38  opetzold
+
+	* regression/Makefile.am: RegrUtil.h added.
+
+2003-10-03 09:37  opetzold
+
+	* regression/RegrUtil.h: added, provides an Incrementor class for
+	use with std::generate.
+
+2003-10-02 22:24  opetzold
+
+	* include/tvmet/: MatrixEval.h, VectorEval.h: cross links from
+	{any,all}_elements to usage about compare.
+
+2003-10-02 22:12  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, CommaInitializer.h,
+	CompileTimeError.h, Extremum.h, Functional.h, Matrix.h,
+	MatrixBinaryFunctions.h, MatrixEval.h, MatrixFunctions.h,
+	MatrixImpl.h, MatrixOperators.h, MatrixUnaryFunctions.h,
+	NumericTraits.h, RunTimeError.h, TvmetBase.h, TypePromotion.h,
+	UnaryFunctionals.h, Vector.h, VectorBinaryFunctions.h,
+	VectorEval.h, VectorFunctions.h, VectorImpl.h, VectorOperators.h,
+	VectorUnaryFunctions.h, tvmet.h, meta/Gemm.h, meta/Gemmt.h,
+	meta/Gemtm.h, meta/Gemv.h, meta/Matrix.h, meta/Vector.h,
+	util/General.h, xpr/BinOperator.h, xpr/Eval.h, xpr/Literal.h,
+	xpr/MMProduct.h, xpr/MMProductTransposed.h, xpr/MMtProduct.h,
+	xpr/MVProduct.h, xpr/Matrix.h, xpr/MatrixBinaryFunctions.h,
+	xpr/MatrixCol.h, xpr/MatrixDiag.h, xpr/MatrixFunctions.h,
+	xpr/MatrixOperators.h, xpr/MatrixRow.h, xpr/MatrixTranspose.h,
+	xpr/MatrixUnaryFunctions.h, xpr/MtMProduct.h, xpr/Null.h,
+	xpr/ProductTransposed.h, xpr/UnOperator.h, xpr/Vector.h,
+	xpr/VectorBinaryFunctions.h, xpr/VectorFunctions.h,
+	xpr/VectorOperators.h, xpr/VectorUnaryFunctions.h: cosmetic;
+	indentations, cpp directive 'ifdef()' replaced by 'if defined'.
+
+2003-10-02 22:09  opetzold
+
+	* doc/dox_functions.cc: undo removing abs doc.
+
+2003-10-02 21:39  opetzold
+
+	* include/tvmet/xpr/ConstRef.h: removed, since never used.
+
+2003-10-02 20:36  opetzold
+
+	* regression/TestMathOps.h: undo for vector norm2 test.
+
+2003-10-02 20:10  opetzold
+
+	* include/tvmet/VectorUnaryFunctions.h: real, imag, arg, norm and
+	conj added for complex types.
+
+2003-10-02 20:10  opetzold
+
+	* doc/dox_functions.cc: abs removed.
+
+2003-10-02 20:10  opetzold
+
+	* include/tvmet/: UnaryFunctionals.h, VectorBinaryFunctions.h: abs,
+	real, imag, arg and norm functions for complex types added.
+	include/tvmet/UnaryFunctionals.h
+
+2003-10-02 20:09  opetzold
+
+	* include/tvmet/MatrixUnaryFunctions.h: real,imag,arg,norm and conj
+	for complex types added.
+
+2003-10-02 20:08  opetzold
+
+	* include/tvmet/MatrixBinaryFunctions.h: pow and polar for complex
+	types added.
+
+2003-10-02 20:06  opetzold
+
+	* include/tvmet/BinaryFunctionals.h: Fcnl_polar added; cosmetic on
+	Fcnl_swap
+
+2003-10-02 20:04  opetzold
+
+	* regression/: TestConstruction.cc, TestDimension.cc,
+	TestMathOps.cc, TestMathOps.h: extented tests for complex types.
+
+2003-09-28 11:07  opetzold
+
+	* include/tvmet/VectorBinaryFunctions.h: pow and polar for complex
+	types added.
+
+2003-09-28 11:07  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, Matrix.h,
+	MatrixBinaryFunctions.h, MatrixFunctions.h, MatrixImpl.h,
+	MatrixOperators.h, MatrixUnaryFunctions.h, UnaryFunctionals.h,
+	Vector.h, VectorFunctions.h, VectorImpl.h, VectorOperators.h,
+	VectorUnaryFunctions.h, xpr/MatrixBinaryFunctions.h,
+	xpr/MatrixFunctions.h, xpr/MatrixOperators.h,
+	xpr/MatrixUnaryFunctions.h, xpr/VectorBinaryFunctions.h,
+	xpr/VectorFunctions.h, xpr/VectorOperators.h,
+	xpr/VectorUnaryFunctions.h: functionals prefix fcnl_ renamed to
+	Fcnl_ to follow the naming convention.
+
+2003-09-28 11:04  opetzold
+
+	* regression/: TestMatrixFunctions.h, TestXprMatrixFunctions.h,
+	TestDimension.h: prodTrans renamed to trans_prod.
+
+2003-09-28 09:30  opetzold
+
+	* tests/rvo_bug.cc: type promotion removed and others - problem
+	description simplified and shorter as before.
+
+2003-09-28 09:22  opetzold
+
+	* NEWS, NEWS: updated for upcoming release 1.3.0.
+
+2003-09-28 09:16  opetzold
+
+	* doc/notes.dox: Links from prodTrans to trans_prod renamed.
+
+2003-09-28 09:12  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MatrixFunctions.h:
+	prodTrans renamed to trans_prod, this follows the naming convention
+	of other special prod functions.
+
+2003-09-28 09:07  opetzold
+
+	* doc/: faq.dox, notes.dox, usage.dox: Documentaion updated for
+	comparing matrices and vectors.
+
+2003-09-28 08:38  opetzold
+
+	* regression/: TestConstruction.h, TestDimension.h, TestMathOps.h,
+	TestMatrixEval.h, TestMatrixFunctions.h, TestMatrixOperators.h,
+	TestUnFunc.cc, TestUnFunc.h, TestVectorEval.h,
+	TestVectorFunctions.h, TestVectorOperators.h, TestXpr.h,
+	TestXprMatrixFunctions.h, TestXprMatrixOperators.h,
+	TestXprVectorFunctions.h, TestXprVectorOperators.h: All tests with
+	the bool eval() function replaced by {all,any}_elements.
+
+2003-09-28 08:37  opetzold
+
+	* include/tvmet/: MatrixEval.h, VectorEval.h, meta/Matrix.h,
+	meta/Vector.h: bool eval() removed. This implementation was
+	identical with these of all_elements.
+
+2003-09-28 08:32  opetzold
+
+	* doc/notes.dox: more notes about aliasing.
+
+2003-09-28 08:31  opetzold
+
+	* examples/Makefile.am: aliasing.cc added to show and how to
+	prevent aliasing.
+
+2003-09-28 08:31  opetzold
+
+	* examples/aliasing.cc: added to show and how to prevent aliasing.
+
+2003-09-27 22:48  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, UnaryFunctionals.h,
+	meta/Matrix.h, meta/Vector.h, xpr/BinOperator.h, xpr/UnOperator.h:
+	Member function applyOn renamed to apply_on according to tvmet's
+	naming convention.
+
+2003-09-27 22:47  opetzold
+
+	* doc/benchmark.dox: updated.
+
+2003-09-27 18:59  opetzold
+
+	* doc/build.dox: configure target benchmark removed.
+
+2003-09-27 18:54  opetzold
+
+	* Makefile.am, configure.ac: benchmark removed from sources.
+
+2003-09-27 18:50  opetzold
+
+	* benchmark/: BenchImpl.h, BenchInfo.h, Benchmark.h,
+	BenchmarkBase.h, Interface.h, Makefile.am, benchmark.m, blitz.cc,
+	blitz.h, mtl.cc, mtl.h, peak.cc, peak.h, stl.cc, stl.h, tvmet.cc,
+	tvmet.h, ublas.cc, ublas.h: benchmark removed from sources.
+
+2003-09-27 18:14  opetzold
+
+	* autogen.sh: comments on file.
+
+2003-09-27 17:33  opetzold
+
+	* include/tvmet/: CommaInitializer.h, CompileTimeError.h, Matrix.h,
+	RunTimeError.h, Vector.h, xpr/Matrix.h, xpr/MatrixCol.h,
+	xpr/MatrixDiag.h, xpr/MatrixRow.h, xpr/Vector.h: Macros
+	{RT,CT}_CONDITION does have the prefix TVMET now.
+
+2003-09-27 17:19  opetzold
+
+	* config/ac_cxx_have_complex.m4: replaced from autoconf-archive.
+
+2003-09-27 17:19  opetzold
+
+	* config/: ac_cxx_have_complex_math1.m4,
+	ac_cxx_have_complex_math2.m4: added from autoconf-archive, replaced
+	for old ac_cxx_have_complex_math.m4
+
+2003-09-27 17:17  opetzold
+
+	* config/ac_cxx_have_complex_math.m4: ac_cxx_have_complex_math.m4
+	removed, since it doesn't do what it should, thanks to Julian C.
+	Cummings.
+
+2003-09-27 16:46  opetzold
+
+	* include/tvmet/MatrixBinaryFunctions.h: complex<> support improved
+	using TVMET_HAVE_COMPLEX_MATH{1,2}
+
+2003-09-25 21:37  opetzold
+
+	* Makefile.am, configure.ac: better support for complex math -
+	using new m4 files.
+
+2003-09-25 21:34  opetzold
+
+	* configure.ac: message about make targets added.
+
+2003-09-25 21:10  opetzold
+
+	* THANKS: updated.
+
+2003-09-25 21:09  opetzold
+
+	* include/tvmet/xpr/BinOperator.h: BinOps::value_type used since
+	it's allways promoted, Thanks to Alex V. Frolov.
+
+2003-09-25 21:07  opetzold
+
+	* include/tvmet/BinaryFunctionals.h: return_type renamed to
+	value_type to be consist to tvmet's naming standard. Conform to
+	UnaryFunctionals.h now.
+
+2003-09-25 21:05  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: this_type replaced by
+	appropriate class name.
+
+2003-09-23 20:52  opetzold
+
+	* THANKS: updated.
+
+2003-09-23 20:29  opetzold
+
+	* include/tvmet/: CommaInitializer.h, Matrix.h, Vector.h:
+	assignValue renamed to assign_value - following tvmet's nameing
+	convention now.
+
+2003-09-23 20:26  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: Constructors on this_type
+	does assign ConstReference directly (no more use of typename);
+	Iterator constructor loop uses != for comparing.
+
+2003-09-21 09:06  opetzold
+
+	* doc/: benchmark.dox, build.dox, compiler.dox, faq.dox, intro.dox,
+	license.dox, links.dox, notes.dox, projects.dox, usage.dox,
+	works.dox: some corrections more.
+
+2003-09-21 08:59  opetzold
+
+	* include/tvmet/tvmet.h: document corrections about TVMET_DEBUG.
+
+2003-09-16 20:13  opetzold
+
+	* tests/rvo_bug.cc: dynamic allocation more generic, using
+	value_type instead double.  PromoteTraits for long added.
+
+2003-09-16 19:54  opetzold
+
+	* configure.ac: release 1.2.1 updated and tagged
+
+2003-09-16 19:50  opetzold
+
+	* tests/rvo_bug.cc: matrix data can use dynamic memory for
+	debugging with valgrind. valgrind reports 30 invalid reads of size
+	8, using the static temp work arround no errors where found.
+
+2003-09-16 18:28  opetzold
+
+	* THANKS: updated.
+
+2003-09-16 18:25  opetzold
+
+	* regression/TestDimension.h: Tests added for non-square row and
+	col access.
+
+2003-09-16 18:24  opetzold
+
+	* include/tvmet/MatrixFunctions.h: bug removed: col() did return
+	the wrong dimension (cols). Thanks to David Sarrut.
+
+2003-09-13 09:29  opetzold
+
+	* include/tvmet/: Makefile.am, meta/Makefile.am, util/Makefile.am,
+	xpr/Makefile.am: target make-install-dirs and install-data-hook,
+	tvmet replaced by PACKAGE macro.
+
+2003-09-13 09:27  opetzold
+
+	* include/tvmet/config/Makefile.am: cvs Id added.
+
+2003-09-13 09:04  opetzold
+
+	* regression/Makefile.am: cvs Id added.
+
+2003-09-12 23:06  opetzold
+
+	* doc/compiler.dox: subsection label for gcc33x corrected.
+
+2003-09-11 21:09  opetzold
+
+	* NEWS: updated for upcoming release.
+
+2003-09-11 20:57  opetzold
+
+	* include/tvmet/xpr/: MatrixCol.h, MatrixRow.h: doxygen header
+	corrections.
+
+2003-09-11 20:49  opetzold
+
+	* include/tvmet/Extremum.h: doxygen header corrections.
+
+2003-09-11 20:44  opetzold
+
+	* include/tvmet/UnaryFunctionals.h: doxygen header corrections.
+
+2003-09-11 20:36  opetzold
+
+	* tests/: Makefile.am, rvo_bug.cc: RVO bug problem added.
+
+2003-09-06 12:05  opetzold
+
+	* include/tvmet/meta/: Vector.h, Matrix.h: assign member functions
+	takes const functionals argument too for now.
+
+2003-09-06 11:41  opetzold
+
+	* include/tvmet/BinaryFunctionals.h: fcnl_Assign expression
+	printing output corrected.
+
+2003-09-06 11:08  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixBinaryFunctions.h, MatrixEval.h,
+	MatrixFunctions.h, MatrixImpl.h, MatrixOperators.h,
+	MatrixUnaryFunctions.h, Vector.h, VectorBinaryFunctions.h,
+	VectorEval.h, VectorFunctions.h, VectorImpl.h, VectorOperators.h,
+	VectorUnaryFunctions.h, xpr/VectorBinaryFunctions.h: all cref()
+	renamed to const_ref() to be conform to the naming convention used.
+
+2003-09-06 11:04  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixImpl.h, Vector.h, VectorImpl.h:
+	all assign operator=() implementations moved from impl header to
+	definition header, assign is using a const functional reference
+	now.
+
+2003-09-06 09:53  opetzold
+
+	* include/tvmet/Matrix.h: doxygen corrections on wrong member docs.
+
+2003-09-06 09:34  opetzold
+
+	* doc/notes.dox: section on rvo bug extended.
+
+2003-09-06 09:03  opetzold
+
+	* NEWS: news added for upcoming release
+
+2003-09-06 08:42  opetzold
+
+	* include/tvmet/xpr/: VectorOperators.h, VectorOperators.h: bug
+	corrected: bitops operator on XprVector and ints moved from subbed
+	namespace tvmet to element_wise.
+
+2003-09-06 08:39  opetzold
+
+	* include/tvmet/tvmet.h: doxygen namespace docs corrected, the
+	entries appears only once.
+
+2003-08-26 20:55  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixOperators.h,
+	xpr/MatrixFunctions.h, xpr/MatrixOperators.h: doxygen header
+	corrections and extensions.
+
+2003-08-26 20:15  opetzold
+
+	* doc/Doxyfile.in: EXCLUDE directive for sources in the doc dir
+	written.
+
+2003-08-26 20:14  opetzold
+
+	* doc/projects.dox: project iplt added.
+
+2003-07-05 08:29  opetzold
+
+	* include/tvmet/meta/: Gemm.h, Gemmt.h, Gemtm.h, Gemv.h, Matrix.h,
+	Vector.h: cosmetic; private constructors, copy constructors and
+	assign operators added where missed.
+
+2003-07-03 19:48  opetzold
+
+	* include/tvmet/xpr/Vector.h: doxygen header enlighted - removed
+	comment on const correctnesss since it's not relevant.
+
+2003-07-03 19:41  opetzold
+
+	* include/tvmet/Vector.h: unused argument removed from
+	VectorConstReference::operator=()
+
+2003-07-03 19:31  opetzold
+
+	* examples/: ray.cc, frob_matrix_norm.cc: asm output updated for up
+	to date gcc und tvmet version.
+
+2003-07-03 19:29  opetzold
+
+	* include/tvmet/xpr/: BinOperator.h, ConstRef.h, Eval.h,
+	MMProduct.h, MMProductTransposed.h, MMtProduct.h, MVProduct.h,
+	Matrix.h, MatrixCol.h, MatrixDiag.h, MatrixRow.h,
+	MatrixTranspose.h, MtMProduct.h, Null.h, ProductTransposed.h,
+	UnOperator.h, Vector.h: all expression holds a const expression
+	reference now; missed copy ctor added by defined
+	TVMET_OPTIMIZE_XPR_MANUAL_CCTOR; cosmetci changes.
+
+2003-07-03 19:27  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: manual copy ctor define
+	TVMET_OPTIMIZE_XPR_MANUAL_CCTOR removed on
+	{Vector,Matrix}ConstReference, since isn't an expression and it
+	does crash teh regression tests.
+
+2003-07-01 21:38  opetzold
+
+	* include/tvmet/xpr/Literal.h: cosmetci changes.
+
+2003-07-01 21:13  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: cosmetic changes.
+
+2003-06-29 18:21  opetzold
+
+	* tests/Makefile.am: target mmv removed.
+
+2003-06-29 17:57  opetzold
+
+	* configure.ac: release 1.2.0 tagged and updated.
+
+2003-06-29 17:46  opetzold
+
+	* NEWS: updated for upcoming release 1.2.0
+
+2003-06-29 17:32  opetzold
+
+	* include/tvmet/: MatrixEval.h, VectorEval.h: forwards on
+	std::complex removed.
+
+2003-06-29 17:31  opetzold
+
+	* include/tvmet/TypePromotion.h: cosmetic changes, forwards on
+	std::complex removed.
+
+2003-06-29 16:27  opetzold
+
+	* tests/mmv.cc: removed, obsolete.
+
+2003-06-29 16:13  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MatrixFunctions.h: row/col
+	functions updated for use with XprMatrix{Row,Col}. The row/col
+	function on matrix expressions avoids use of temporaries due to
+	now.
+
+2003-06-29 16:11  opetzold
+
+	* include/tvmet/xpr/Makefile.am: XprMatrix{Row,Col} added as
+	replacement for Matrix{Row,Col}VectorConstReference.
+
+2003-06-29 16:07  opetzold
+
+	* include/tvmet/xpr/: MatrixCol.h, MatrixRow.h: XprMatrix{Row,Col}
+	added as replacement for Matrix{Row,Col}VectorConstReference.
+
+2003-06-29 16:06  opetzold
+
+	* include/tvmet/MatrixImpl.h: print_on function on level printing
+	extended.
+
+2003-06-29 16:03  opetzold
+
+	* include/tvmet/Matrix.h: Matrix{Row,Col}VectorConstReference
+	removed, print_on function on level printing extended.
+
+2003-06-28 18:26  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: note on temporary on diag
+	function removed.
+
+2003-06-28 17:27  opetzold
+
+	* examples/: Makefile.am, frob_matrix_norm.cc: example added for
+	diag function on matrix expression.
+
+2003-06-28 17:23  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MatrixFunctions.h: diag
+	functions adapted. diag on expressions does avoid temporaries for
+	evaluations now.
+
+2003-06-28 17:14  opetzold
+
+	* include/tvmet/xpr/: MatrixDiag.h, Makefile.am: XprMatrixDiag
+	added as replacement for MatrixDiagVectorConstReference
+
+2003-06-28 17:14  opetzold
+
+	* include/tvmet/Matrix.h: MatrixDiagVectorConstReference removed.
+
+2003-06-28 10:48  opetzold
+
+	* doc/: Doxyfile.in, Makefile.am, intro.dox: News file added.
+	Doxyfile.in simplifies with *.dox pattern.
+
+2003-06-28 10:30  opetzold
+
+	* configure.ac: cosmetic for configure's help switch
+
+2003-06-28 10:24  opetzold
+
+	* regression/Makefile.am: CXXFLAGS added to compile tests with own
+	flags. Avoids failed inline warnings on gcc-3.3. Changing
+	compiler's inline-limit to 15.000 avoids warning too but warnings
+	from cppunit!
+
+2003-06-28 09:40  opetzold
+
+	* doc/compiler.dox: closing words on gcc2.95.3 added.
+
+2003-06-28 09:04  opetzold
+
+	* doc/compiler.dox: Updated notes on gcc-3.3.
+
+2003-06-27 23:32  opetzold
+
+	* doc/compiler.dox: some text added on gcc-2.95.3. Complete porting
+	to needs a lot of time and knowlege which doesn't I have.
+
+2003-06-27 22:58  opetzold
+
+	* include/tvmet/RunTimeError.h: include cassert added, makes
+	g++-2.95.3 happy
+
+2003-06-27 22:39  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: header g++2.95.3
+	ready, member operator on pod implementions changed: takes
+	apropriate member functions instead of operators (avoid confusions
+	from element_wise namespace).
+
+2003-06-27 22:37  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: header g++2.95.3 ready,
+	syntax changes only.
+
+2003-06-26 18:04  opetzold
+
+	* NEWS: updated for upcoming release 1.2.0
+
+2003-06-26 17:55  opetzold
+
+	* examples/: hspiess.cc, xpr_print_m1.cc, xpr_print_m2.cc,
+	xpr_print_m3.cc, xpr_print_m4.cc, xpr_print_mv1.cc,
+	xpr_print_mv2.cc: corrections on new syntax, transpose -> trans
+
+2003-06-26 17:51  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h, VectorFunctions.h,
+	meta/Vector.h, util/General.h, xpr/BinOperator.h, xpr/Eval.h,
+	xpr/Literal.h, xpr/MVProduct.h, xpr/UnOperator.h, xpr/Vector.h,
+	xpr/VectorFunctions.h: Vector index access changed from [] to ().
+	This is the new default style style for tvmet Vectors. Old access
+	with [] still supported and valid.
+
+2003-06-26 17:43  opetzold
+
+	* regression/: SelfTest.h, TestMathOps.h, TestVectorFunctions.h,
+	TestVectorOperators.h, TestXprVectorFunctions.h: Vector index
+	access changed from [] to (). This is the new default style style.
+
+2003-06-24 21:31  opetzold
+
+	* include/tvmet/Matrix.h: MatrixReference removed, since isn't used
+	anywhere.
+
+2003-06-24 21:31  opetzold
+
+	* include/tvmet/Vector.h: VectorReference removed, since isn't used
+	anywhere.
+
+2003-06-24 20:58  opetzold
+
+	* include/tvmet/Matrix.h: cosmetic change: access operator(i,j)
+	does return a typedef reference instead of value_type&
+
+2003-06-24 20:56  opetzold
+
+	* include/tvmet/Vector.h: access operator[i] const does return a
+	value_type; this solves (hopefully) reported problems with
+	g++2.95.x and is conform to the matrix access operator(i,j) now.
+
+2003-06-18 18:54  opetzold
+
+	* doc/notes.dox: notes on rvo bug added to notes contents.
+
+2003-06-16 21:27  opetzold
+
+	* NEWS: updated for upcoming release 1.2.0
+
+2003-06-16 19:56  opetzold
+
+	* doc/intro.dox: link added to note's rvo bug.
+
+2003-06-16 19:52  opetzold
+
+	* doc/notes.dox: chapter on chained expressions added.
+
+2003-06-16 19:52  opetzold
+
+	* doc/faq.dox: comments on chained expressions removed
+
+2003-06-16 19:44  opetzold
+
+	* doc/faq.dox: removed chapter on call overloaded operator since
+	the example is obsolete. No idea if there a need for this chapter
+	any more - the praxis will it show.
+
+2003-06-16 19:41  opetzold
+
+	* doc/notes.dox: updated chapter on optimizing.
+
+2003-06-15 10:37  opetzold
+
+	* include/tvmet/MatrixFunctions.h: min/max temps correct
+	innitialized.
+
+2003-06-15 10:36  opetzold
+
+	* doc/faq.dox, doc/notes.dox, include/tvmet/MatrixFunctions.h,
+	include/tvmet/MatrixOperators.h, include/tvmet/VectorFunctions.h,
+	include/tvmet/meta/Gemm.h, include/tvmet/meta/Gemmt.h,
+	include/tvmet/meta/Gemtm.h, include/tvmet/meta/Gemv.h,
+	include/tvmet/xpr/MMProduct.h,
+	include/tvmet/xpr/MMProductTransposed.h,
+	include/tvmet/xpr/MMtProduct.h, include/tvmet/xpr/MVProduct.h,
+	include/tvmet/xpr/MatrixFunctions.h,
+	include/tvmet/xpr/MatrixOperators.h,
+	include/tvmet/xpr/MtMProduct.h,
+	include/tvmet/xpr/ProductTransposed.h,
+	include/tvmet/xpr/VectorFunctions.h, regression/TestDimension.h,
+	regression/TestMathOps.h, regression/TestMatrixFunctions.h,
+	regression/TestMatrixOperators.h, regression/TestVectorFunctions.h,
+	regression/TestXpr.h, regression/TestXprMatrixFunctions.h,
+	regression/TestXprMatrixOperators.h,
+	regression/TestXprVectorFunctions.h: all product functions renamed
+	to prod, all transpose to trans. This allows shorter equations.
+
+2003-06-13 19:59  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: cosmetic changes
+
+2003-06-10 20:00  opetzold
+
+	* include/tvmet/BinaryFunctionals.h: fcnl_Swap::print_on()
+	corrected, temp type renamed according to tvmet's style.
+
+2003-06-10 19:56  opetzold
+
+	* regression/: TestMatrixFunctions.h, TestVectorFunctions.h: test
+	corrected and extended due to renaming max to maximum, min to
+	minimum and introduced the new function min/max.
+
+2003-06-08 21:01  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, VectorFunctions.h: old max/min
+	function renamed to maximum/minimum. new function max/min added
+	returning max/min as value.
+
+2003-06-08 20:20  opetzold
+
+	* doc/intro.dox: notes for chained expressions on frontpage. There
+	are problems on chained expressions due to used temporaries.
+
+2003-06-08 20:16  opetzold
+
+	* doc/faq.dox: extended for chained expressions.
+
+2003-06-08 19:53  opetzold
+
+	* doc/: dox_functions.cc, dox_operators.cc: doxygen doc generators
+	partiell corrected
+
+2003-06-08 19:30  opetzold
+
+	* include/tvmet/: MatrixEval.h, MatrixFunctions.h: doxygen header
+	corrections
+
+2003-06-08 19:18  opetzold
+
+	* examples/hspiess.cc: some notes on example written.
+
+2003-06-08 19:01  opetzold
+
+	* examples/: Makefile.am, hspiess.cc: practical example added.
+
+2003-06-08 18:55  opetzold
+
+	* include/tvmet/: config/config-gcc.h, xpr/BinOperator.h,
+	xpr/Eval.h, xpr/Matrix.h, xpr/MatrixTranspose.h, xpr/UnOperator.h,
+	xpr/Vector.h: optimizing defines
+	TVMET_OPTIMIZE_XPR_CTOR_ARGS_BY_VALUE
+	TVMET_OPTIMIZE_XPR_MANUAL_CCTOR removed, all arguments are taken by
+	const references and we hope on optimized copy constructor by
+	compiler.
+
+2003-06-08 18:22  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixBinaryFunctions.h, MatrixEval.h,
+	MatrixFunctions.h, MatrixImpl.h, MatrixOperators.h, Vector.h,
+	VectorBinaryFunctions.h, VectorEval.h, VectorFunctions.h,
+	VectorImpl.h, VectorOperators.h, meta/Matrix.h, meta/Vector.h,
+	xpr/MatrixBinaryFunctions.h, xpr/MatrixFunctions.h,
+	xpr/MatrixOperators.h, xpr/MatrixUnaryFunctions.h,
+	xpr/VectorBinaryFunctions.h, xpr/VectorFunctions.h,
+	xpr/VectorOperators.h, xpr/VectorUnaryFunctions.h: all expression
+	are taken by const references now. This solves the problem with g++
+	regression tests. Obviously is the return value optimization is
+	limited to to small expressions even by argument copying.
+
+2003-06-08 16:36  opetzold
+
+	* include/tvmet/Matrix.h: member naming frm m_matrix changed to
+	m_data according to others.
+
+2003-06-08 15:49  opetzold
+
+	* regression/TestXprMatrixFunctions.h: test on row/col II
+	corrected.
+
+2003-06-08 12:59  opetzold
+
+	* include/tvmet/MatrixImpl.h: comment changes for
+	operator=(XprMatrix).
+
+2003-06-08 12:58  opetzold
+
+	* include/tvmet/VectorImpl.h: comment changes for
+	operator=(XprVector<>)
+
+2003-06-08 12:17  opetzold
+
+	* include/tvmet/MatrixImpl.h: comment changes for
+	operator=(XprMatrix).
+
+2003-06-08 10:58  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixOperators.h,
+	VectorFunctions.h, VectorOperators.h, xpr/MatrixFunctions.h,
+	xpr/MatrixOperators.h, xpr/VectorFunctions.h,
+	xpr/VectorOperators.h: undo: functions and operators with pod are
+	specialized by pod type again, the icc does compile now once more;
+	added more complex support.
+
+2003-06-08 10:58  opetzold
+
+	* regression/TestXprMatrixFunctions.h: critical functions  on
+	failed regression tests moved to own test function.
+
+2003-06-07 14:53  opetzold
+
+	* regression/TestXprMatrixFunctions.h: test changed for row,col and
+	diag.
+
+2003-06-07 14:52  opetzold
+
+	* regression/: TestXprMatrixOperators.cc, TestXprMatrixOperators.h,
+	Makefile.am: new tests added for operators on XprMatrizes.
+
+2003-06-07 12:13  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MatrixFunctions.h: number
+	argument on function col renamed to no to avoid confusions.
+
+2003-06-07 11:54  opetzold
+
+	* include/tvmet/: Matrix.h, MatrixFunctions.h,
+	xpr/MatrixFunctions.h: correction on const correctness on Matrix<>
+	functions for row,col and diag. MatrixRowVectorReference,
+	MatrixColVectorReference and MatrixDiagVectorReference renamed to
+	MatrixRowVectorConstReference, MatrixColVectorConstReference and
+	MatrixDiagVectorConstReference.
+
+2003-06-07 11:54  opetzold
+
+	* regression/TestXprMatrixFunctions.h: new tests added for
+	row,col,diag,transpose and xxx_products on XprMatrizes
+
+2003-06-07 11:16  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: MMt_product() argument
+	corrected.
+
+2003-06-07 10:14  opetzold
+
+	* THANKS: new entry
+
+2003-06-07 09:59  opetzold
+
+	* doc/faq.dox: FAQ wrote on no_match_operator.
+
+2003-06-07 09:32  opetzold
+
+	* examples/: Makefile.am, redwards.cc: example added from problem
+	report from R.Edwards.
+
+2003-06-05 22:22  opetzold
+
+	* include/tvmet/xpr/: MatrixFunctions.h, VectorFunctions.h: doxygen
+	header corrections
+
+2003-06-05 22:20  opetzold
+
+	* include/tvmet/xpr/VectorFunctions.h: matrix expression's binary
+	and unary functions moved to an own header.
+
+2003-06-05 22:14  opetzold
+
+	* include/tvmet/xpr/: Makefile.am, Vector.h,
+	VectorBinaryFunctions.h, VectorUnaryFunctions.h: matrix
+	expression's binary and unary functions moved to an own header.
+
+2003-06-05 22:01  opetzold
+
+	* include/tvmet/xpr/MatrixOperators.h: operators for add,sub,mul
+	and div use the appropriate functions. operators reordered and
+	cosmetics.
+
+2003-06-05 21:56  opetzold
+
+	* include/tvmet/xpr/Matrix.h: matrix expression's binary and unary
+	functions moved to an own header.
+
+2003-06-05 21:41  opetzold
+
+	* include/tvmet/VectorOperators.h: namespace element_wise
+	corrections.
+
+2003-06-05 21:33  opetzold
+
+	* include/tvmet/MatrixOperators.h: namespace element_wise
+	corrections.
+
+2003-06-05 21:13  opetzold
+
+	* include/tvmet/xpr/Makefile.am: header sorted according to 'ls
+	-la', new header MatrixBinaryFunctions.h MatrixUnaryFunctions.h
+	added.
+
+2003-06-05 21:09  opetzold
+
+	* include/tvmet/xpr/: MatrixBinaryFunctions.h, MatrixFunctions.h,
+	MatrixUnaryFunctions.h: matrix expression's binary and unary
+	functions moved to an own header.
+
+2003-06-05 21:06  opetzold
+
+	* regression/TestMathOps.h: Test added on
+	product(Matrix,XprVector).
+
+2003-06-05 20:14  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: new function on matrix
+	expressions for transpose, row, col and diag added.
+
+2003-06-05 19:43  opetzold
+
+	* regression/TestMathOps.h: test added for prod(Matrix, XprVector).
+
+2003-06-05 19:42  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: productTransposed,
+	MtM_product, MMt_product on XprMatrizes does return the appropriate
+	function, same to product(XprMatrix,XprVector).
+
+2003-06-05 19:36  opetzold
+
+	* include/tvmet/MatrixOperators.h: copy&past devel on operator on
+	Matrix and XprVector killed.
+
+2003-06-05 19:34  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixOperators.h: new product
+	function and operator on Matrix and XprVector added.
+
+2003-06-05 19:23  opetzold
+
+	* include/tvmet/: VectorFunctions.h, meta/Vector.h,
+	xpr/VectorFunctions.h: meta::Vector::cross() removed, compile error
+	(never occoured before). Since its build by hand it doesn't matter.
+	Remark todo added in doxygen header.
+
+2003-06-05 18:54  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: productTransposed,
+	MtM_product, MMt_product on XprMatrizes added.
+
+2003-06-05 18:30  opetzold
+
+	* regression/Makefile.am: header and cpp files reordered according
+	to a 'ls -ls'
+
+2003-06-02 21:37  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: Bug removed: dimension on
+	temporary rhs corrected.
+
+2003-06-02 21:37  opetzold
+
+	* include/tvmet/: MatrixImpl.h, VectorImpl.h: implementing macros
+	renamed according to tvmet's standard.
+
+2003-06-02 20:00  opetzold
+
+	* include/tvmet/Makefile.am: Files Matrix{Binary,Unary}Functions.h,
+	Vector{Binary,Unary}Functions.h added.
+
+2003-06-01 16:57  opetzold
+
+	* regression/TestXprVectorOperators.h: corrected negate() test.
+
+2003-06-01 16:01  opetzold
+
+	* regression/: Makefile.am, TestXprVectorOperators.cc,
+	TestXprVectorOperators.h: added.
+
+2003-06-01 15:59  opetzold
+
+	* regression/TestVectorFunctions.h: beautified
+
+2003-06-01 15:57  opetzold
+
+	* include/tvmet/xpr/VectorOperators.h: fucntions for add,sub,mul
+	and div use their appropriate functions, reordering of
+	implementations.
+
+2003-06-01 15:55  opetzold
+
+	* include/tvmet/: BinaryFunctionals.h, UnaryFunctionals.h: acros
+	reordered, all macros implementing somethings does have the
+	TVMET_IMPLEMENT_MACRO name.
+
+2003-06-01 15:15  opetzold
+
+	* include/tvmet/UnaryFunctionals.h: macro TVMET_UNARY_FUNCTION
+	renamed to TVMET_IMPLEMENT_MACRO
+
+2003-06-01 15:13  opetzold
+
+	* include/tvmet/BinaryFunctionals.h: macro TVMET_BINARY_FUNCTION
+	renamed to TVMET_IMPLEMENT_MACRO
+
+2003-06-01 13:38  opetzold
+
+	* regression/: Makefile.am, TestXprMatrixFunctions.cc,
+	TestXprMatrixFunctions.h: tests added for add,sub,mul and div on
+	xpr matrizes.
+
+2003-06-01 00:46  opetzold
+
+	* include/tvmet/: VectorFunctions.h, meta/Vector.h,
+	xpr/VectorFunctions.h: Vector norm1 implementation replaced by
+	sum(abs(v)); no need for meta:abs_sum() which is removed.
+
+2003-06-01 00:46  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: new arithmetic functions
+	add,sub,mul and div for expression matrizes added.
+
+2003-05-31 23:30  opetzold
+
+	* regression/TestXprVectorFunctions.h: tests for sum, prod, dot,
+	cross, norm1, norm2, normalize for vector expressions added.
+
+2003-05-31 23:29  opetzold
+
+	* include/tvmet/: Vector.h, xpr/Vector.h, xpr/VectorFunctions.h:
+	new functions sum, prod, dot, cross, norm1, norm2, normalize for
+	vector expressions added.
+
+2003-05-31 22:14  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h, xpr/Matrix.h,
+	xpr/MatrixFunctions.h, xpr/Vector.h: include headers order changed.
+	Hopefully better distuingish between Matrix and Vector.
+
+2003-05-31 22:11  opetzold
+
+	* include/tvmet/xpr/Makefile.am: Xpr.h removed.
+
+2003-05-31 22:11  opetzold
+
+	* include/tvmet/xpr/Xpr.h: removed.
+
+2003-05-31 22:06  opetzold
+
+	* NEWS: some news added for upcoming release.
+
+2003-05-31 21:54  opetzold
+
+	* include/tvmet/xpr/Makefile.am: Functions.h removed.
+
+2003-05-31 21:44  opetzold
+
+	* include/tvmet/xpr/Functions.h: removed.
+
+2003-05-31 21:39  opetzold
+
+	* include/tvmet/Matrix.h: RT_CONDITION on Row/ColVectorReference
+	corrected.
+
+2003-05-31 21:38  opetzold
+
+	* include/tvmet/xpr/: Matrix.h, Vector.h: include header corrected.
+
+2003-05-31 21:05  opetzold
+
+	* include/tvmet/Matrix.h: RT_CONDITION on element access for
+	MatrixReference, Row/Col/DiagVector added.
+
+2003-05-31 21:00  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: RT_CONDITION error message
+	changed - report class name now.
+
+2003-05-31 20:58  opetzold
+
+	* include/tvmet/xpr/: Matrix.h, Vector.h: RT_CONDITION on element
+	access added.
+
+2003-05-31 20:25  opetzold
+
+	* include/tvmet/xpr/VectorFunctions.h: new functions add,sub,mul
+	and div on vector expressions.
+
+2003-05-31 20:23  opetzold
+
+	* regression/TestMathOps.h: corrections, removed parts from other
+	tests.
+
+2003-05-31 20:20  opetzold
+
+	* regression/: TestUnFunc.cc, TestUnFunc.h: cosmetic, new tests for
+	min/max added.
+
+2003-05-31 20:19  opetzold
+
+	* regression/Makefile.am: TestXprVectorFunctions.h
+	TestXprVectorFunctions.cc added.
+
+2003-05-31 20:18  opetzold
+
+	* regression/: TestXprVectorFunctions.cc, TestXprVectorFunctions.h:
+	added.
+
+2003-05-31 20:16  opetzold
+
+	* include/tvmet/VectorFunctions.h: doxygen header correction
+
+2003-05-31 17:20  opetzold
+
+	* regression/TestXpr.h: tests on eval removed since its on its own
+	headers.
+
+2003-05-31 16:19  opetzold
+
+	* regression/TestSTL.h: test on construction and std::copy() for
+	matrizes added
+
+2003-05-31 15:59  opetzold
+
+	* regression/: TestMatrixOperators.cc, TestMatrixOperators.h,
+	Makefile.am: added, tests on matrix operators.
+
+2003-05-31 15:40  opetzold
+
+	* regression/TestMatrixFunctions.h: rewritten and extended, holds
+	all arithmetic functions from header tvmet/MatrixFunctions.h.
+
+2003-05-31 15:27  opetzold
+
+	* include/tvmet/RunTimeError.h: forgotten trailing backslash added
+	after change of output format.
+
+2003-05-31 15:21  opetzold
+
+	* include/tvmet/: RunTimeError.h, Matrix.h, Vector.h: output format
+	changed for macro RT_CONDITION
+
+2003-05-31 11:10  opetzold
+
+	* regression/TestVectorFunctions.h: test on normalize added.
+
+2003-05-31 10:54  opetzold
+
+	* regression/Makefile.am: TestVectorOperators.h
+	TestVectorOperators.cc added.
+
+2003-05-31 10:54  opetzold
+
+	* regression/: TestVectorOperators.cc, TestVectorOperators.h: added
+	for tests on vector operators. Test on all arithmetic operators on
+	vectors and vector expressions.
+
+2003-05-31 10:50  opetzold
+
+	* regression/TestVectorFunctions.h: scalarUpdAssign1() on int
+	specialized functions removed.
+
+2003-05-31 10:35  opetzold
+
+	* regression/TestVectorFunctions.h: test on neg operator removed;
+	self test on reference functions/operations use assert now.
+
+2003-05-31 10:29  opetzold
+
+	* regression/TestVectorFunctions.h: new tests added. This file
+	holds the tests for all functions declared in header
+	tvmet/VectorFunctions.h, exspect normalize.
+
+2003-05-29 11:39  opetzold
+
+	* regression/SelfTest.cc: self test on std::complex added.
+
+2003-05-29 11:26  opetzold
+
+	* regression/TestConstruction.h: cosmetic
+
+2003-05-29 10:26  opetzold
+
+	* include/tvmet/: MatrixOperators.h, VectorOperators.h: big
+	cosmetic changes, operators using add,sub,mul and div functions
+	written
+
+2003-05-29 10:26  opetzold
+
+	* regression/Makefile.am: new files TestMatrixEval.h,
+	TestMatrixEval.cc, TestVectorEval.h, TestVectorEval.cc added
+
+2003-05-29 10:26  opetzold
+
+	* regression/TestMathOps.h: test on vector elementwise product:
+	function renamed to prod.
+
+2003-05-29 10:26  opetzold
+
+	* regression/TestXpr.h: fn_MVProduct: product on vectors renamed to
+	elementwise mul function due to function name change.
+
+2003-05-29 10:26  opetzold
+
+	* regression/TestMatrixFunctions.h: ew_product: elementwise product
+	on matrix renamed to element_wise::mul function due to function
+	name change.
+
+2003-05-29 10:25  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: transpose(XprMatrix<>) moved
+	here from MatrixFunctions.h - it's on a better place here.
+
+2003-05-29 09:56  opetzold
+
+	* include/tvmet/Matrix.h: header for matrix binary and unary
+	functions included here.
+
+2003-05-29 09:53  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixUnaryFunctions.h,
+	MatrixBinaryFunctions.h: all unary/binary functions moved to an own
+	header; new arithmetic functions add, sub, mul, div; a lot of
+	cosmetic
+
+2003-05-29 09:47  opetzold
+
+	* include/tvmet/tvmet.h: forward for std::complex<T> here now,
+	cosmetic changes
+
+2003-05-29 09:45  opetzold
+
+	* include/tvmet/Vector.h: cosmetic, header for vector binary and
+	unary functions included here.
+
+2003-05-29 09:45  opetzold
+
+	* include/tvmet/: VectorBinaryFunctions.h, VectorUnaryFunctions.h:
+	all unary/binary functions moved to an own header; new arithmetic
+	functions add, sub, mul, div; a lot of cosmetic
+
+2003-05-29 09:45  opetzold
+
+	* include/tvmet/VectorFunctions.h: all unary/binary functions moved
+	to an own header; new arithmetic functions add, sub, mul, div;
+	former product renamed to prod to avoid name conflicts (does
+	element wise product on all elements vs. product on
+	matrix/vectors); element_wise::product renamed to mul; a lot of
+	cosmetic
+
+2003-05-29 09:18  opetzold
+
+	* include/tvmet/VectorEval.h: doc corrected on eval use in example;
+	cosmetic changes
+
+2003-05-29 09:15  opetzold
+
+	* include/tvmet/util/General.h: namespace delimiter tvmet:: on
+	functions removed.
+
+2003-05-29 09:14  opetzold
+
+	* regression/TestVectorEval.h: cosmetic changes
+
+2003-05-29 09:12  opetzold
+
+	* regression/: TestMatrixEval.cc, TestMatrixEval.h: added, former
+	matrix part of TestEval
+
+2003-05-27 22:46  opetzold
+
+	* include/tvmet/VectorEval.h: eval for long long added,
+	eval(XprVector<E1, Sz> e1, XprVector<E2, Sz> e2, XprVector<E3, Sz>
+	e3) removed it was allways here.
+
+2003-05-27 22:44  opetzold
+
+	* regression/: TestVectorEval.cc, TestVectorEval.h: added, former
+	vector part of TestEval
+
+2003-05-27 21:45  opetzold
+
+	* regression/: TestEval.cc, TestEval.h: files removed and replaced
+	by new files TestVectorEval.{h,cc} and TestMatrixEval.{h,cc}
+
+2003-05-26 21:03  opetzold
+
+	* include/tvmet/: VectorEval.h, VectorFunctions.h: doxygen headers
+	beautified.
+
+2003-05-25 17:11  opetzold
+
+	* configure.ac: release 1.1.0 tagged and updated.
+
+2003-05-25 11:34  opetzold
+
+	* include/tvmet/VectorFunctions.h: doxygen correctness on
+	norm1/norm2 doc
+
+2003-05-25 11:30  opetzold
+
+	* regression/TestMathOps.h: regression for norm1/2 rewritten.
+
+2003-05-25 11:30  opetzold
+
+	* include/tvmet/: VectorFunctions.h, meta/Vector.h: new function
+	norm1 added.
+
+2003-05-25 10:15  opetzold
+
+	* regression/Makefile.am: new files TestMatrixEval.h,
+	TestMatrixEval.cc, TestVectorEval.h, TestVectorEval.cc added
+
+2003-05-25 09:49  opetzold
+
+	* regression/TestMathOps.h: tests on vector norm changed due to
+	name changing.
+
+2003-05-25 09:48  opetzold
+
+	* include/tvmet/VectorFunctions.h: naming convention changed: norm2
+	is the l2 form of vector norm, prior name was norm; old norm2
+	removed since it was the l2 norm squared.
+
+2003-05-24 14:46  opetzold
+
+	* configure.ac: icc CXXFLAGS warnings changed to avoid remarks
+
+2003-05-24 12:20  opetzold
+
+	* doc/usage.dox: chapter about row and col wise access on matrizes
+	added.
+
+2003-05-24 11:49  opetzold
+
+	* doc/Makefile.am: CXXFLAGS changed to avoid icc compiler remarks
+
+2003-05-24 11:48  opetzold
+
+	* doc/: faq.dox, intro.dox, notes.dox, usage.dox: some small
+	addtions and corrections
+
+2003-05-24 11:20  opetzold
+
+	* doc/usage.dox: some small addtions and corrections
+
+2003-05-24 11:02  opetzold
+
+	* doc/intro.dox: some small addtions and corrections
+
+2003-05-24 10:19  opetzold
+
+	* tvmet-config.in: very old name of tvmet replaced (in the begining
+	the name was tvm - unfortunally these name was reserved on
+	sourceforge).
+
+2003-05-24 10:14  opetzold
+
+	* NEWS: some news added for the upcoming rel. 1.1.0
+
+2003-05-24 10:08  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, VectorFunctions.h,
+	xpr/MatrixFunctions.h, xpr/VectorFunctions.h: binary functions and
+	operators added for fn/op(POD, Matrix<>||Vector<>) resp. fn/op(POD,
+	XprMatrix<>||XprVector<>) for the rare case of evaluting
+	expressions like eval(1 == matrix) instead of eval(matrix == 1).
+
+2003-05-24 09:45  opetzold
+
+	* include/tvmet/VectorFunctions.h: doxygen header doc corrected
+
+2003-05-24 09:44  opetzold
+
+	* regression/main.cc: removed some old code, error return value
+	removed since it does disturb the make dist process.
+
+2003-05-24 09:31  opetzold
+
+	* regression/: SelfTest.cc, SelfTest.h, TestConstruction.cc,
+	TestConstruction.h, TestDimension.cc, TestDimension.h,
+	TestElementWise.h, TestEval.cc, TestEval.h, TestMathOps.cc,
+	TestMathOps.h, TestMatrixFunctions.cc, TestMatrixFunctions.h,
+	TestSTL.cc, TestSTL.h, TestUnFunc.cc, TestUnFunc.h,
+	TestVectorFunctions.cc, TestVectorFunctions.h, TestXpr.cc,
+	TestXpr.h, main.cc: regression test rewritten/extended. We use
+	cppunits factory facility to compile each unit test in a separate
+	cpp file. New files added with news tests
+
+2003-05-24 09:31  opetzold
+
+	* regression/Makefile.am: forgotten regression test on
+	TestMathOps.{cc|h} added.
+
+2003-05-24 09:06  opetzold
+
+	* include/tvmet/MatrixFunctions.h: product() functions using
+	temporaries rewritten to allow using compiler's return value
+	optimizing - doesn't change things on gcc-3.2 failed regression
+	tests on product/operator*(XprMatrix<int>, XprVector<int>)
+
+2003-05-24 08:57  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: product() functions using
+	temporaries rewritten to allow using compiler's return value
+	optimizing - doesn't change things on gcc-3.2 failed regression
+	tests on product/operator*(XprMatrix<int>, XprVector<int>)
+
+2003-05-24 08:34  opetzold
+
+	* include/tvmet/MatrixEval.h: cosmetic changes
+
+2003-05-24 08:02  opetzold
+
+	* include/tvmet/MatrixOperators.h: cosmetic changes
+
+2003-05-24 08:00  opetzold
+
+	* include/tvmet/MatrixOperators.h: operator+,-,== etc. corrected to
+	allow operations on non-square matrizes too.
+
+2003-05-18 19:40  opetzold
+
+	* include/tvmet/VectorFunctions.h: new function product(Vector,
+	Vector) added - same as operator*(Vector,Vector); cosmetic changes
+
+2003-05-18 19:37  opetzold
+
+	* include/tvmet/: Matrix.h, Vector.h: cast to std::size_t for
+	iterator concept constructors runtime check.
+
+2003-05-18 18:04  opetzold
+
+	* include/tvmet/xpr/ProductTransposed.h: file added
+
+2003-05-18 16:04  opetzold
+
+	* regression/: TestBitOps.cc, TestBitOps.h: removed, since they
+	doesn't contain any test
+
+2003-05-18 12:59  opetzold
+
+	* doc/usage.dox: chapter about Construction and Initializing
+	extended for construction on iterators.
+
+2003-05-18 12:58  opetzold
+
+	* include/tvmet/Matrix.h: Some doxygen notes about construction on
+	iterators added. Further more runtime condition added for
+	constructor on iterators.
+
+2003-05-18 12:57  opetzold
+
+	* include/tvmet/Vector.h: Some doxygen notes about construction on
+	iterators added.
+
+2003-05-17 21:58  opetzold
+
+	* doc/: faq.dox, intro.dox, notes.dox, usage.dox: doc updates
+
+2003-05-17 21:45  opetzold
+
+	* NEWS: updated for the upcoming release
+
+2003-05-17 21:44  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixOperators.h: doxygen
+	headers corrected.
+
+2003-05-17 19:28  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, meta/Gemmt.h,
+	meta/Makefile.am, xpr/MMtProduct.h, xpr/Makefile.am, xpr/Xpr.h: new
+	function added: MMt_product for the product of MM^T.
+
+2003-05-17 16:38  opetzold
+
+	* include/tvmet/MatrixOperators.h: new function
+	operator*(Matrix<>,XprMatrix<>) added.
+
+2003-05-17 16:33  opetzold
+
+	* include/tvmet/MatrixFunctions.h: new function
+	product(Matrix<>,XprMatrix<>) added.
+
+2003-05-17 16:05  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/MMProductTransposed.h,
+	xpr/Makefile.am, xpr/Xpr.h: function
+	productTransposed(Matrix<>,Matrix<>) added, also a new expression
+	Xpr
+
+2003-05-17 15:53  opetzold
+
+	* include/tvmet/MatrixFunctions.h, regression/TestMathOps.h:
+	productTransposed(Matrix<>,Vector<>) renamed to Mtx_product;
+	productTransposed renamed to MtM_product(Matrix<>,Matrix<>) to
+	avoid confusions a name conflics with future functions
+
+2003-05-17 15:13  opetzold
+
+	* include/tvmet/MatrixFunctions.h: new function
+	transpose(XprMatrix<>) added.
+
+2003-05-17 11:04  opetzold
+
+	* include/tvmet/MatrixOperators.h: doxygen doc corrected for
+	operator*(Xprmatrix<>,Vector<>)
+
+2003-05-17 11:03  opetzold
+
+	* include/tvmet/MatrixOperators.h: missing operator added:
+	operator*(XprMatrix<>, Matrix<>)
+
+2003-05-17 10:58  opetzold
+
+	* include/tvmet/MatrixFunctions.h: missing function added:
+	product(XprMatrix<>, Matrix<>)
+
+2003-05-17 10:34  opetzold
+
+	* include/tvmet/VectorOperators.h: cosmetic changes
+
+2003-05-17 10:32  opetzold
+
+	* include/tvmet/: MatrixOperators.h, xpr/MatrixOperators.h,
+	xpr/VectorOperators.h: undo: all operator?(POD,...) restored since
+	eval is using those - thanks to regression tests...
+
+2003-05-17 10:12  opetzold
+
+	* include/tvmet/MatrixOperators.h: cosmetic changes; operator?(POD,
+	XprMatrix<>) removed since isn't usefull
+
+2003-05-17 09:53  opetzold
+
+	* include/tvmet/xpr/VectorOperators.h: operator?(POD, XprVector<>)
+	removed since isn't usefull
+
+2003-05-17 09:50  opetzold
+
+	* include/tvmet/xpr/MatrixOperators.h: cosmetic changes;
+	operator?(POD, XprMatrix<>) removed since isn't usefull
+
+2003-05-13 22:20  opetzold
+
+	* include/tvmet/VectorFunctions.h: some cosmetic changes; functions
+	with func(POD, Matrix) removed
+
+2003-05-13 22:16  opetzold
+
+	* include/tvmet/MatrixFunctions.h: some cosmetic changes; functions
+	with func(POD, Matrix) removed
+
+2003-05-13 22:14  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: some cosmetic changes
+
+2003-05-13 22:05  opetzold
+
+	* include/tvmet/xpr/Makefile.am: header VectorFunctions.h added
+
+2003-05-13 22:04  opetzold
+
+	* include/tvmet/xpr/VectorFunctions.h: added, holds functions of
+	XprVector
+
+2003-05-13 22:03  opetzold
+
+	* include/tvmet/xpr/: Functions.h, MatrixFunctions.h: functions for
+	XprMatrizes and XprVectors moved to sperate files.
+
+2003-05-13 21:17  opetzold
+
+	* include/tvmet/xpr/MatrixFunctions.h: used temporary renamed
+
+2003-05-12 20:22  opetzold
+
+	* doc/usage.dox: usage about cleared matrix and vector added.
+
+2003-05-12 20:13  opetzold
+
+	* include/tvmet/MatrixOperators.h: doxygen function header
+	corrected
+
+2003-05-12 20:11  opetzold
+
+	* regression/TestXpr.h: spelling erros corrected
+
+2003-05-12 20:09  opetzold
+
+	* include/tvmet/MatrixFunctions.h: product(XprMatrix<>, Vector<>)
+	doxygen docs corrected and expanded, used temporary renamed
+
+2003-05-11 21:46  opetzold
+
+	* include/tvmet/MatrixFunctions.h: productTransposed(M,V) corrected
+	for non square matrizes
+
+2003-05-11 21:44  opetzold
+
+	* include/tvmet/MatrixFunctions.h: Header guard corrected
+
+2003-05-11 20:57  opetzold
+
+	* regression/TestMathOps.h: MatrixTransposedMatrix() regression
+	added.
+
+2003-05-11 20:07  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, xpr/Xpr.h: new function
+	productTransposed(M1,M2) for transposed(Matrix)*Matrix product
+	added
+
+2003-05-11 20:06  opetzold
+
+	* include/tvmet/: meta/Makefile.am, xpr/Makefile.am: meta/Gemtm.h
+	and xpr/MtMProduct.h added
+
+2003-05-11 20:03  opetzold
+
+	* include/tvmet/: meta/Gemtm.h, xpr/MtMProduct.h: created for
+	transposed(Matrix)*Matrix product
+
+2003-05-11 19:50  opetzold
+
+	* include/tvmet/: xpr/MMProduct.h, MatrixFunctions.h: cosmetic
+	changes
+
+2003-05-11 09:50  opetzold
+
+	* doc/notes.dox: section about MMV operations added
+
+2003-05-11 09:49  opetzold
+
+	* doc/faq.dox: section about missing MMV operations removed, since
+	it is absolete
+
+2003-05-11 09:25  opetzold
+
+	* regression/Makefile.am: target regression renamed to driver, so
+	avoid name confusion
+
+2003-04-23 07:40  opetzold
+
+	* configure.ac: release 1.0.1 created and tagged
+
+2003-04-17 21:34  opetzold
+
+	* NEWS: news added for rel-1-0-1
+
+2003-04-17 21:31  opetzold
+
+	* THANKS: email adresses removed, new add
+
+2003-04-17 21:23  opetzold
+
+	* tvmet.m4: bug removed: using --cxxflags acording to tvmet-config
+	now
+
+2003-04-08 21:05  opetzold
+
+	* doc/: benchmark.dox, build.dox, compiler.dox: doxygen's url
+	corrected
+
+2003-04-08 20:58  opetzold
+
+	* NEWS: News for release v1.0.0 added
+
+2003-04-07 21:48  opetzold
+
+	* configure.ac: release 1.0.0 created and tagged
+
+2003-04-03 21:42  opetzold
+
+	* include/tvmet/xpr/MMProduct.h: doxygen header corrected
+
+2003-04-03 21:09  opetzold
+
+	* include/tvmet/CommaInitializer.h: mamber naming convention of
+	member iter_ to m_iter corrected
+
+2003-04-03 21:03  opetzold
+
+	* include/tvmet/VectorFunctions.h: doxygen docu norm and normalize
+	formula index corrected
+
+2003-03-27 17:44  opetzold
+
+	* include/tvmet/xpr/MatrixOperators.h: doxygen class docu corrected
+
+2003-03-27 17:40  opetzold
+
+	* include/tvmet/xpr/: MMProduct.h, MVProduct.h, MatrixOperators.h:
+	doxygen class docu corrected
+
+2003-03-24 21:39  opetzold
+
+	* doc/: build.dox, compiler.dox: all doxygen hypertext links are
+	working now
+
+2003-03-24 21:26  opetzold
+
+	* include/tvmet/: MatrixFunctions.h, MatrixOperators.h,
+	VectorFunctions.h: doxygen group spelling error corrected
+
+2003-03-24 21:23  opetzold
+
+	* include/tvmet/MatrixOperators.h: operator*(XprMatrix, Vector)
+	added
+
+2003-03-24 21:20  opetzold
+
+	* include/tvmet/MatrixFunctions.h: product(XprMatrix, Vector) added
+
+2003-03-24 21:17  opetzold
+
+	* regression/TestXpr.h: Test for Xpr operators added
+
+2003-03-24 21:15  opetzold
+
+	* include/tvmet/xpr/: Functions.h, Makefile.am, MatrixFunctions.h,
+	MatrixOperators.h, Xpr.h: product(XprMatrix, XprVector) added;
+	moved with product(XprMatrix,XprMatrix) to new header
+	MatrixFunctions.h
+
+2003-03-24 20:48  opetzold
+
+	* Makefile.am: target ChangeLog does check for cvs2log too
+
+2003-03-22 16:52  opetzold
+
+	* include/tvmet/config/: config-kcc.h, config-pgi.h: warning about
+	compiler missing optimizations removed
+
+2003-03-22 16:35  opetzold
+
+	* doc/compiler.dox: gcc compiler notes regarding to regression test
+	link corrected
+
+2003-03-22 16:07  opetzold
+
+	* doc/: compiler.dox, faq.dox: Updated compiler support, notes to
+	gcc failed regression test with int's product(Xprmatrix, XprVector>
+
+2003-03-22 15:42  opetzold
+
+	* regression/TestXpr.h: Regression for product(XprMatrix<>,
+	XprMatrix<>) as well as product(XprMatrix<>, XprVector<>) added
+
+2003-03-22 15:11  opetzold
+
+	* regression/: TestUnFunc.cc, TestUnFunc.h: Test for Abs added in
+	header, Abs() unused temporaries removed
+
+2003-03-22 15:09  opetzold
+
+	* regression/main.cc: doxygen correctness increased
+
+2003-03-22 14:45  opetzold
+
+	* configure.ac: icc compiler warning turned on (-Wall)
+
+2003-03-22 14:42  opetzold
+
+	* regression/Makefile.am: CXXFLAGS removed since we didn't
+	distuingish between the compilers here
+
+2003-03-22 14:35  opetzold
+
+	* include/tvmet/config/config-icc.h: warning about icc missing
+	optimizations removed
+
+2003-03-22 14:32  opetzold
+
+	* examples/: cmm.cc, cmv.cc: std::complex ambiguous removed; icc
+	does compile now
+
+2003-03-22 14:27  opetzold
+
+	* include/tvmet/: MatrixEval.h, MatrixOperators.h, VectorEval.h,
+	VectorOperators.h: forwared std::complex<T> corrected, icc doesn't
+	confused any more
+
+2003-03-22 13:46  opetzold
+
+	* include/tvmet/util/General.h: Gemv algorithm initialized by zero,
+	to much problems due to the need of a cleaned output vector
+
+2003-03-20 21:39  opetzold
+
+	* include/tvmet/xpr/Functions.h: Vector forwared, header does
+	compiler now.
+
+2003-03-20 21:17  opetzold
+
+	* include/tvmet/xpr/Functions.h: product(XprMatrix<>, XprVector<>)
+	added
+
+2003-03-20 20:57  opetzold
+
+	* doc/works.dox: updated, product(XprA, XprB) does exist
+
+2003-03-20 20:47  opetzold
+
+	* include/tvmet/xpr/: BinOperator.h, ConstRef.h, Eval.h, Literal.h,
+	MMProduct.h, MVProduct.h, Makefile.am, Matrix.h, MatrixOperators.h,
+	MatrixTranspose.h, Null.h, UnOperator.h, Vector.h,
+	VectorOperators.h, Xpr.h: Xpr headers splitted to smaller
+
+2003-03-20 20:03  opetzold
+
+	* configure.ac, include/tvmet/Makefile.am, include/tvmet/Matrix.h,
+	include/tvmet/Vector.h, include/tvmet/Xpr.h,
+	include/tvmet/XprFunctions.h, include/tvmet/XprMatrixOperators.h,
+	include/tvmet/XprVectorOperators.h, include/tvmet/xpr/Functions.h,
+	include/tvmet/xpr/Makefile.am, include/tvmet/xpr/MatrixOperators.h,
+	include/tvmet/xpr/VectorOperators.h, include/tvmet/xpr/Xpr.h: Xpr
+	stuff moved to sub directory
+
+2003-03-17 18:28  opetzold
+
+	* doc/dox_operators.cc: op(XprMatrix,XprMatrix) doxygen header
+	generating corrected, less doxygen warnings now
+
+2003-03-17 18:12  opetzold
+
+	* include/tvmet/MatrixFunctions.h: diag(Matrix<T, Sz, Sz>& m)
+	doxygen header corrected
+
+2003-03-07 07:43  opetzold
+
+	* Makefile.am: rpm-dist target does copy rpms from users home
+
+2003-03-07 07:40  opetzold
+
+	* doc/usage.dox: spell error corrected
+
+2003-03-01 11:50  opetzold
+
+	* NEWS: about delayed benchmark
+
+2003-03-01 11:48  opetzold
+
+	* doc/: bench_daxpy.png, bench_matrix_matrix_product.png,
+	bench_matrix_vector_product.png, bench_vector_add.png,
+	bench_vector_inner_product.png: undo: benchmark test. Now we have
+	the pictures 'Benchmarkk not performed'
+
+2003-03-01 11:37  opetzold
+
+	* doc/benchmark.dox: benchmark delayed, it takes to much time, even
+	if Laurent Plagne did the work
+
+2003-03-01 11:27  opetzold
+
+	* benchmark/Makefile.am: results PNG files aren't copied anymore to
+	the docs. New target copy_results added for this purpose
+
+2003-03-01 11:25  opetzold
+
+	* benchmark/benchmark.m: ranges adapted to P4/2400MHz
+
+2003-03-01 11:07  opetzold
+
+	* configure.ac: release counter incremented to 0.9.0
+
+2003-03-01 11:05  opetzold
+
+	* NEWS: news added
+
+2003-03-01 11:05  opetzold
+
+	* tests/t.cc: modified for feature check
+
+2003-03-01 10:59  opetzold
+
+	* include/tvmet/XprMatrixOperators.h: operator*(Xprmatrix<>,
+	XprMatrix<>) added
+
+2003-03-01 10:58  opetzold
+
+	* include/tvmet/XprFunctions.h: product(Xprmatrix<>, XprMatrix<>)
+	added
+
+2003-03-01 09:42  opetzold
+
+	* NEWS: this file is used now, for short messages about changes on
+	releases
+
+2003-03-01 09:32  opetzold
+
+	* doc/faq.dox: FAQ about 'call of overloaded product() ... Compiler
+	Error' added
+
+2003-03-01 09:32  opetzold
+
+	* doc/: bench_daxpy.png, bench_matrix_matrix_product.png,
+	bench_matrix_vector_product.png, bench_vector_add.png,
+	bench_vector_inner_product.png: benchmark test
+
+2003-03-01 09:30  opetzold
+
+	* regression/: Makefile.am, TestElementWise.h, main.cc: elementwise
+	operations for regressions added
+
+2003-03-01 08:45  opetzold
+
+	* include/tvmet/MatrixOperators.h: TVMET_BINARY_OPERATOR(fcnl_Mul,
+	*) removed. It can be used due to the call of overloaded operator*.
+	A note is written about that inside.
+
+2003-03-01 08:14  opetzold
+
+	* regression/TestMathOps.h: elementwise operations removed
+
+2003-03-01 08:08  opetzold
+
+	* regression/: TestBitOps.cc, TestBitOps.h, TestConstruction.h,
+	TestMathOps.h, TestSTL.h, TestUnFunc.cc, TestUnFunc.h, TestXpr.h,
+	main.cc: LGPL header and cvs keyword added
+
+2003-03-01 07:56  opetzold
+
+	* benchmark/benchmark.m: terminal settings for jpeg removed
+
+2003-03-01 07:50  opetzold
+
+	* benchmark/blitz.h: blitz-6.0 has changed some headers, corrected
+	header include. Anyway, we have to use release v0.6 of blitz++ now.
+
+2003-02-20 22:15  opetzold
+
+	* Makefile.am: target ChangeLog really added, dist-hook depends on
+	it
+
+2003-02-20 22:09  opetzold
+
+	* Makefile.am: cvs2log added to dist-hook, to create the ChangeLog
+	from cvs to dist
+
+2003-02-20 21:56  opetzold
+
+	* configure.ac, configure.in: configure.in renamed to configure.ac
+	to be conform to autoconf 2.5x and automake 1.6x
+
+2003-02-20 21:54  opetzold
+
+	* LICENSE, Makefile.am, THANKS, tvmet.spec.in, doc/faq.dox,
+	doc/license.dox: License Addendum to the LGPL
+
+2003-02-12 20:11  opetzold
+
+	* ChangeLog, ChangeLog.1, Makefile.am: old ChangeLog renamed to
+	ChangeLog.1, using cvs logs for ChangeLog now
+
+2003-02-12 20:08  opetzold
+
+	* ChangeLog: the last ChangeLog entry
+
+2003-02-12 20:04  opetzold
+
+	* examples/Makefile.am: example target diag added
+
+2003-02-12 20:03  opetzold
+
+	* examples/diag.cc: example for diag added
+
+2003-02-12 20:03  opetzold
+
+	* regression/TestMathOps.h: TestMathOps<T>::MatrixDiagVector()
+	added
+
+2003-02-12 20:02  opetzold
+
+	* include/tvmet/MatrixFunctions.h: diag(Matrix<T, Sz, Sz>& m) added
+
+2003-02-12 20:02  opetzold
+
+	* include/tvmet/Matrix.h: MatrixDiagVectorReference added
+
+2003-02-10 19:09  opetzold
+
+	* ChangeLog: ChangeLog
+
+2003-02-10 19:08  opetzold
+
+	* tvmet.spec.in: target tvmet-doc-xxx removed, it's inside the
+	standard rpm package
+
+2003-02-10 19:06  opetzold
+
+	* Makefile.am: rpm package is using bz2 archive now
+
+2003-02-10 19:05  opetzold
+
+	* configure.in: AM_CPPUNIT uncommented
+
+2003-02-09 16:39  opetzold
+
+	* configure.in: release incremented to 0.8.0
+
+2003-02-09 16:34  opetzold
+
+	* ChangeLog: ChangeLog
+
+2003-02-09 16:28  opetzold
+
+	* ChangeLog: Makefile.am
+
+2003-02-09 16:28  opetzold
+
+	* Makefile.am: target doc-dist added to dist-hook, also doc's
+	ps/pdf manuals moved into dist dir
+
+2003-02-09 16:13  opetzold
+
+	* doc/compiler.dox: HTML li environment removed to avoid problems
+	with latex ref manual
+
+2003-02-09 15:59  opetzold
+
+	* Makefile.am, configure.in: parts adapted to new syntax style of
+	autoconf 2.5x and automake 1.6x
+
+2003-02-09 13:11  opetzold
+
+	* configure.in: version literal expl. written (todo: fix the
+	problem)
+
+2003-02-09 13:07  opetzold
+
+	* doc/Makefile.am: better progress printing on doc install target
+
+2003-02-09 13:05  opetzold
+
+	* Makefile.am: bug fixed: target rpm using @echo inside @it loop
+
+2003-02-09 12:44  opetzold
+
+	* ChangeLog: ChangeLog
+
+2003-02-09 12:41  opetzold
+
+	* include/tvmet/util/Timer.h: cpp define RUSAGE replaced with
+	config.h's defines
+
+2003-02-09 12:28  opetzold
+
+	* ChangeLog: ChangeLog
+
+2003-02-09 12:25  opetzold
+
+	* configure.in: better check, using autoconf-2.5x features - not
+	really working\!
+
+2003-02-09 12:23  opetzold
+
+	* doc/Doxyfile.in: INPUT points to @top_srcdir@/include/@PACKAGE@,
+	therefore I can apply other lib's includes too, e.g. for benchmark
+
+2003-02-09 00:39  opetzold
+
+	* THANKS, doc/doxygen-warning: doc/doxygen-warning
+
+2003-02-09 00:14  opetzold
+
+	* benchmark/BenchImpl.h, benchmark/BenchInfo.h,
+	benchmark/Benchmark.h, benchmark/BenchmarkBase.h,
+	benchmark/Interface.h, benchmark/blitz.cc, benchmark/blitz.h,
+	benchmark/mtl.cc, benchmark/mtl.h, benchmark/peak.cc,
+	benchmark/peak.h, benchmark/stl.cc, benchmark/stl.h,
+	benchmark/tvmet.cc, benchmark/tvmet.h, benchmark/ublas.cc,
+	benchmark/ublas.h, doc/Util.h, doc/dox_functions.cc,
+	doc/dox_operators.cc, include/tvmet/BinaryFunctionals.h,
+	include/tvmet/CommaInitializer.h, include/tvmet/CompileTimeError.h,
+	include/tvmet/Extremum.h, include/tvmet/Functional.h,
+	include/tvmet/Matrix.h, include/tvmet/MatrixEval.h,
+	include/tvmet/MatrixFunctions.h, include/tvmet/MatrixImpl.h,
+	include/tvmet/MatrixOperators.h, include/tvmet/NumericTraits.h,
+	include/tvmet/RunTimeError.h, include/tvmet/TvmetBase.h,
+	include/tvmet/TypePromotion.h, include/tvmet/UnaryFunctionals.h,
+	include/tvmet/Vector.h, include/tvmet/VectorEval.h,
+	include/tvmet/VectorFunctions.h, include/tvmet/VectorImpl.h,
+	include/tvmet/VectorOperators.h, include/tvmet/Xpr.h,
+	include/tvmet/XprFunctions.h, include/tvmet/XprMatrixOperators.h,
+	include/tvmet/XprVectorOperators.h, include/tvmet/tvmet.h,
+	include/tvmet/config/config-gcc.h,
+	include/tvmet/config/config-icc.h,
+	include/tvmet/config/config-kcc.h,
+	include/tvmet/config/config-pgi.h, include/tvmet/meta/Gemm.h,
+	include/tvmet/meta/Gemv.h, include/tvmet/meta/Matrix.h,
+	include/tvmet/meta/Vector.h, include/tvmet/util/General.h:
+	Copyright notize is up to date now
+
+2003-02-09 00:08  opetzold
+
+	* config/license, ChangeLog: config/license removed
+
+2003-02-09 00:03  opetzold
+
+	* Makefile.am, aclocal.m4, configure, configure.in,
+	config/Makefile.am, config/aclocal.m4, config/config.guess,
+	config/config.h.in, config/config.sub, config/depcomp,
+	config/install-sh, config/missing, config/mkinstalldirs,
+	config/stamp-h.in, doc/doxygen-warning: aclocal, autoheader,
+	autoconf and automake generated files removed from repository
+
+2003-02-08 23:16  opetzold
+
+	* include/tvmet/: meta/Makefile.am, util/Makefile.am: bug fixed:
+	EXTRA_HEADERS have had paths
+
+2003-02-08 23:12  opetzold
+
+	* configure.in: version 0.7.6 released
+
+2003-02-08 23:07  opetzold
+
+	* ChangeLog, ChangeLog: ChangeLog
+
+2003-02-08 23:00  opetzold
+
+	* ChangeLog: project changes added
+
+2003-02-08 22:57  opetzold
+
+	* benchmark/benchmark.log: benchmark/benchmark.log removed from
+	repository
+
+2003-02-08 22:49  opetzold
+
+	* doc/: bench_daxpy.png, bench_matrix_matrix_product.png,
+	bench_matrix_vector_product.png, bench_vector_add.png,
+	bench_vector_inner_product.png: bench-png's added with 'empty'
+	results
+
+2003-02-08 22:19  opetzold
+
+	* benchmark/ev.m: ev.m deleted from repository
+
+2003-02-08 22:17  opetzold
+
+	* doc/: changelog.dox, credits.dox, functions.dox, install.dox,
+	operators.dox: generated docs removed from repository
+
+2003-02-08 22:12  opetzold
+
+	* benchmark/benchmark.m: cvs Id keyword corrected
+
+2003-02-08 22:11  opetzold
+
+	* benchmark/peak.ok.m: matlab files peak.ok.m removed from
+	repository
+
+2003-02-08 22:10  opetzold
+
+	* doc/: bench_daxpy.png, bench_matrix_matrix_product.png,
+	bench_matrix_vector_product.png, bench_vector_add.png,
+	bench_vector_inner_product.png: benchmark result png removed from
+	repository
+
+2003-02-08 22:04  opetzold
+
+	* ChangeLog, Makefile.in, configure, configure.in,
+	benchmark/Makefile.in, config/Makefile.in, doc/Makefile.in,
+	doc/changelog.dox, doc/doxygen-warning, examples/Makefile.in,
+	include/Makefile.in, include/tvmet/Makefile.in,
+	include/tvmet/config/Makefile.in, regression/Makefile.in,
+	tests/Makefile.in: Makefile.in's removed from repository
+
+2003-02-08 21:59  opetzold
+
+	* doc/Makefile.am: bug fixed: tgz dist installs the docs now
+
+2003-02-08 21:53  opetzold
+
+	* include/tvmet/: Makefile.am, meta/Makefile.am, util/Makefile.am:
+	bug fixed: tgz dist install target doesn't install meta and util
+	directory
+
+2003-02-08 21:02  opetzold
+
+	* ChangeLog: version-0.7.5
+
+2003-02-08 20:51  opetzold
+
+	* ChangeLog: corrected: Id keyword was expanded by cvs
+
+2003-02-08 20:49  opetzold
+
+	* ChangeLog, benchmark/BenchImpl.h, benchmark/BenchInfo.h,
+	benchmark/Benchmark.h, benchmark/BenchmarkBase.h,
+	benchmark/Interface.h, benchmark/blitz.cc, benchmark/blitz.h,
+	benchmark/mtl.cc, benchmark/mtl.h, benchmark/peak.cc,
+	benchmark/peak.h, benchmark/stl.cc, benchmark/stl.h,
+	benchmark/tvmet.cc, benchmark/tvmet.h, benchmark/ublas.cc,
+	benchmark/ublas.h, doc/Util.h, doc/dox_functions.cc,
+	doc/dox_operators.cc, include/tvmet/BinaryFunctionals.h,
+	include/tvmet/CommaInitializer.h, include/tvmet/CompileTimeError.h,
+	include/tvmet/Extremum.h, include/tvmet/Functional.h,
+	include/tvmet/Matrix.h, include/tvmet/MatrixEval.h,
+	include/tvmet/MatrixFunctions.h, include/tvmet/MatrixImpl.h,
+	include/tvmet/MatrixOperators.h, include/tvmet/NumericTraits.h,
+	include/tvmet/RunTimeError.h, include/tvmet/TvmetBase.h,
+	include/tvmet/TypePromotion.h, include/tvmet/UnaryFunctionals.h,
+	include/tvmet/Vector.h, include/tvmet/VectorEval.h,
+	include/tvmet/VectorFunctions.h, include/tvmet/VectorImpl.h,
+	include/tvmet/VectorOperators.h, include/tvmet/Xpr.h,
+	include/tvmet/XprFunctions.h, include/tvmet/XprMatrixOperators.h,
+	include/tvmet/XprVectorOperators.h, include/tvmet/tvmet.h,
+	include/tvmet/config/config-gcc.h,
+	include/tvmet/config/config-icc.h,
+	include/tvmet/config/config-kcc.h,
+	include/tvmet/config/config-pgi.h, include/tvmet/meta/Gemm.h,
+	include/tvmet/meta/Gemv.h, include/tvmet/meta/Matrix.h,
+	include/tvmet/meta/Vector.h, include/tvmet/util/General.h,
+	include/tvmet/util/Timer.h: header cvs Id keyword corrected, also
+	missed header guards TVMET prefix added
+
+2003-02-08 20:32  opetzold
+
+	* AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am, Makefile.in,
+	NEWS, README, THANKS, aclocal.m4, autogen.sh, configure,
+	configure.in, tvmet-config.1, tvmet-config.in, tvmet.m4,
+	tvmet.spec.in, benchmark/BenchImpl.h, benchmark/BenchInfo.h,
+	benchmark/Benchmark.h, benchmark/BenchmarkBase.h,
+	benchmark/Interface.h, benchmark/Makefile.am,
+	benchmark/Makefile.in, benchmark/benchmark.log,
+	benchmark/benchmark.m, benchmark/blitz.cc, benchmark/blitz.h,
+	benchmark/ev.m, benchmark/mtl.cc, benchmark/mtl.h,
+	benchmark/peak.cc, benchmark/peak.h, benchmark/peak.ok.m,
+	benchmark/stl.cc, benchmark/stl.h, benchmark/tvmet.cc,
+	benchmark/tvmet.h, benchmark/ublas.cc, benchmark/ublas.h,
+	config/Makefile.am, config/Makefile.in, config/ac_c_long_long.m4,
+	config/ac_create_prefix_config_h.m4, config/ac_cxx_have_complex.m4,
+	config/ac_cxx_have_complex_math.m4,
+	config/ac_cxx_have_ieee_math.m4, config/ac_cxx_have_mutable.m4,
+	config/ac_cxx_have_namespaces.m4, config/ac_cxx_have_sysv_math.m4,
+	config/ac_cxx_partial_specialization.m4, config/ac_cxx_restrict.m4,
+	config/ac_cxx_typename.m4, config/ac_prog_cxx_intel.m4,
+	config/ac_prog_cxx_kai.m4, config/ac_prog_cxx_pgi.m4,
+	config/ac_prog_doxygen.m4, config/aclocal.m4, config/config.guess,
+	config/config.h.in, config/config.sub, config/depcomp,
+	config/install-sh, config/license, config/missing,
+	config/mkinstalldirs, config/stamp-h.in, doc/Doxyfile.in,
+	doc/Makefile.am, doc/Makefile.in, doc/Util.h, doc/bench_daxpy.png,
+	doc/bench_matrix_matrix_product.png,
+	doc/bench_matrix_vector_product.png, doc/bench_vector_add.png,
+	doc/bench_vector_inner_product.png, doc/benchmark.dox,
+	doc/build.dox, doc/changelog.dox, doc/compiler.dox,
+	doc/credits.dox, doc/dox_functions.cc, doc/dox_operators.cc,
+	doc/doxygen-warning, doc/faq.dox, doc/footer.html,
+	doc/functions.dox, doc/header.html, doc/install.dox, doc/intro.dox,
+	doc/license.dox, doc/links.dox, doc/misc.dox, doc/notes.dox,
+	doc/operator_tab.html, doc/operators.dox, doc/projects.dox,
+	doc/sflogo.png, doc/tvmet.css, doc/usage.dox, doc/works.dox,
+	examples/Makefile.am, examples/Makefile.in, examples/cmm.cc,
+	examples/cmv.cc, examples/matrix_col.cc, examples/mm.cc,
+	examples/mv.cc, examples/ray.cc, examples/xpr_print_m1.cc,
+	examples/xpr_print_m2.cc, examples/xpr_print_m3.cc,
+	examples/xpr_print_m4.cc, examples/xpr_print_mv1.cc,
+	examples/xpr_print_mv2.cc, examples/xpr_print_v1.cc,
+	examples/xpr_print_v2.cc, examples/xpr_print_v3.cc,
+	examples/xpr_print_v4.cc, include/Makefile.am, include/Makefile.in,
+	include/tvmet/BinaryFunctionals.h,
+	include/tvmet/CommaInitializer.h, include/tvmet/CompileTimeError.h,
+	include/tvmet/Extremum.h, include/tvmet/Functional.h,
+	include/tvmet/Makefile.am, include/tvmet/Makefile.in,
+	include/tvmet/Matrix.h, include/tvmet/MatrixEval.h,
+	include/tvmet/MatrixFunctions.h, include/tvmet/MatrixImpl.h,
+	include/tvmet/MatrixOperators.h, include/tvmet/NumericTraits.h,
+	include/tvmet/RunTimeError.h, include/tvmet/TvmetBase.h,
+	include/tvmet/TypePromotion.h, include/tvmet/UnaryFunctionals.h,
+	include/tvmet/Vector.h, include/tvmet/VectorEval.h,
+	include/tvmet/VectorFunctions.h, include/tvmet/VectorImpl.h,
+	include/tvmet/VectorOperators.h, include/tvmet/Xpr.h,
+	include/tvmet/XprFunctions.h, include/tvmet/XprMatrixOperators.h,
+	include/tvmet/XprVectorOperators.h, include/tvmet/tvmet.h,
+	include/tvmet/config/Makefile.am, include/tvmet/config/Makefile.in,
+	include/tvmet/config/config-gcc.h,
+	include/tvmet/config/config-icc.h,
+	include/tvmet/config/config-kcc.h,
+	include/tvmet/config/config-pgi.h, include/tvmet/meta/Gemm.h,
+	include/tvmet/meta/Gemv.h, include/tvmet/meta/Matrix.h,
+	include/tvmet/meta/Vector.h, include/tvmet/util/General.h,
+	include/tvmet/util/Timer.h, regression/Makefile.am,
+	regression/Makefile.in, regression/TestBitOps.cc,
+	regression/TestBitOps.h, regression/TestConstruction.h,
+	regression/TestMathOps.h, regression/TestSTL.h,
+	regression/TestUnFunc.cc, regression/TestUnFunc.h,
+	regression/TestXpr.h, regression/main.cc, tests/Makefile.am,
+	tests/Makefile.in, tests/README, tests/mmv.cc, tests/swap.cc,
+	tests/t.cc: Initial revision
+
+2003-02-08 20:32  opetzold
+
+	* AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am, Makefile.in,
+	NEWS, README, THANKS, aclocal.m4, autogen.sh, configure,
+	configure.in, tvmet-config.1, tvmet-config.in, tvmet.m4,
+	tvmet.spec.in, benchmark/BenchImpl.h, benchmark/BenchInfo.h,
+	benchmark/Benchmark.h, benchmark/BenchmarkBase.h,
+	benchmark/Interface.h, benchmark/Makefile.am,
+	benchmark/Makefile.in, benchmark/benchmark.log,
+	benchmark/benchmark.m, benchmark/blitz.cc, benchmark/blitz.h,
+	benchmark/ev.m, benchmark/mtl.cc, benchmark/mtl.h,
+	benchmark/peak.cc, benchmark/peak.h, benchmark/peak.ok.m,
+	benchmark/stl.cc, benchmark/stl.h, benchmark/tvmet.cc,
+	benchmark/tvmet.h, benchmark/ublas.cc, benchmark/ublas.h,
+	config/Makefile.am, config/Makefile.in, config/ac_c_long_long.m4,
+	config/ac_create_prefix_config_h.m4, config/ac_cxx_have_complex.m4,
+	config/ac_cxx_have_complex_math.m4,
+	config/ac_cxx_have_ieee_math.m4, config/ac_cxx_have_mutable.m4,
+	config/ac_cxx_have_namespaces.m4, config/ac_cxx_have_sysv_math.m4,
+	config/ac_cxx_partial_specialization.m4, config/ac_cxx_restrict.m4,
+	config/ac_cxx_typename.m4, config/ac_prog_cxx_intel.m4,
+	config/ac_prog_cxx_kai.m4, config/ac_prog_cxx_pgi.m4,
+	config/ac_prog_doxygen.m4, config/aclocal.m4, config/config.guess,
+	config/config.h.in, config/config.sub, config/depcomp,
+	config/install-sh, config/license, config/missing,
+	config/mkinstalldirs, config/stamp-h.in, doc/Doxyfile.in,
+	doc/Makefile.am, doc/Makefile.in, doc/Util.h, doc/bench_daxpy.png,
+	doc/bench_matrix_matrix_product.png,
+	doc/bench_matrix_vector_product.png, doc/bench_vector_add.png,
+	doc/bench_vector_inner_product.png, doc/benchmark.dox,
+	doc/build.dox, doc/changelog.dox, doc/compiler.dox,
+	doc/credits.dox, doc/dox_functions.cc, doc/dox_operators.cc,
+	doc/doxygen-warning, doc/faq.dox, doc/footer.html,
+	doc/functions.dox, doc/header.html, doc/install.dox, doc/intro.dox,
+	doc/license.dox, doc/links.dox, doc/misc.dox, doc/notes.dox,
+	doc/operator_tab.html, doc/operators.dox, doc/projects.dox,
+	doc/sflogo.png, doc/tvmet.css, doc/usage.dox, doc/works.dox,
+	examples/Makefile.am, examples/Makefile.in, examples/cmm.cc,
+	examples/cmv.cc, examples/matrix_col.cc, examples/mm.cc,
+	examples/mv.cc, examples/ray.cc, examples/xpr_print_m1.cc,
+	examples/xpr_print_m2.cc, examples/xpr_print_m3.cc,
+	examples/xpr_print_m4.cc, examples/xpr_print_mv1.cc,
+	examples/xpr_print_mv2.cc, examples/xpr_print_v1.cc,
+	examples/xpr_print_v2.cc, examples/xpr_print_v3.cc,
+	examples/xpr_print_v4.cc, include/Makefile.am, include/Makefile.in,
+	include/tvmet/BinaryFunctionals.h,
+	include/tvmet/CommaInitializer.h, include/tvmet/CompileTimeError.h,
+	include/tvmet/Extremum.h, include/tvmet/Functional.h,
+	include/tvmet/Makefile.am, include/tvmet/Makefile.in,
+	include/tvmet/Matrix.h, include/tvmet/MatrixEval.h,
+	include/tvmet/MatrixFunctions.h, include/tvmet/MatrixImpl.h,
+	include/tvmet/MatrixOperators.h, include/tvmet/NumericTraits.h,
+	include/tvmet/RunTimeError.h, include/tvmet/TvmetBase.h,
+	include/tvmet/TypePromotion.h, include/tvmet/UnaryFunctionals.h,
+	include/tvmet/Vector.h, include/tvmet/VectorEval.h,
+	include/tvmet/VectorFunctions.h, include/tvmet/VectorImpl.h,
+	include/tvmet/VectorOperators.h, include/tvmet/Xpr.h,
+	include/tvmet/XprFunctions.h, include/tvmet/XprMatrixOperators.h,
+	include/tvmet/XprVectorOperators.h, include/tvmet/tvmet.h,
+	include/tvmet/config/Makefile.am, include/tvmet/config/Makefile.in,
+	include/tvmet/config/config-gcc.h,
+	include/tvmet/config/config-icc.h,
+	include/tvmet/config/config-kcc.h,
+	include/tvmet/config/config-pgi.h, include/tvmet/meta/Gemm.h,
+	include/tvmet/meta/Gemv.h, include/tvmet/meta/Matrix.h,
+	include/tvmet/meta/Vector.h, include/tvmet/util/General.h,
+	include/tvmet/util/Timer.h, regression/Makefile.am,
+	regression/Makefile.in, regression/TestBitOps.cc,
+	regression/TestBitOps.h, regression/TestConstruction.h,
+	regression/TestMathOps.h, regression/TestSTL.h,
+	regression/TestUnFunc.cc, regression/TestUnFunc.h,
+	regression/TestXpr.h, regression/main.cc, tests/Makefile.am,
+	tests/Makefile.in, tests/README, tests/mmv.cc, tests/swap.cc,
+	tests/t.cc: initial import to cvs
+
diff --git a/tvmet-1.7.1/ChangeLog.1 b/tvmet-1.7.1/ChangeLog.1
new file mode 100644
index 0000000..5f17f4b
--- /dev/null
+++ b/tvmet-1.7.1/ChangeLog.1
@@ -0,0 +1,761 @@
+2003-02-12  Olaf Petzold  <opetzold@wit.regiocom.net>
+
+	* ChangeLog: this files is renamed to ChangeLog.1 and holds all old
+		Changes. We use the cvs ChangeLog now.
+
+	* examples/Makefile.am: example target diag added.
+
+	* examples/diag.cc: added.
+
+	* regression/TestMathOps.h: TestMathOps<T>::MatrixDiagVector() added.
+
+	* include/tvmet/MatrixFunctions.h: diag(Matrix<T, Sz, Sz>& m)  added.
+
+	* include/tvmet/Matrix.h: MatrixDiagVectorReference added.
+
+2003-02-10 opetzold  <opetzold@wit.regiocom.net>
+
+	* Makefile.am (rpm): rpm package is using bz2 archive now.
+
+	* tvmet.spec.in: target tvmet-doc-xxx removed, it's inside the standard
+		rpm package
+
+2003-02-09 opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.8.0 released (cvs tagged)
+
+	* Makefile.am: target doc-dist added to dist-hook, as well as
+		moving ps/pdf manuals into distdir.
+
+	* doc/compiler.dox: HTML <li></li> environment removed to avoid
+		problems with latex ref manual.
+
+	* configure.in, Makefile.am: parts adapted to new syntax style of
+		autoconf 2.5x and automake 1.6x
+
+	* include/tvmet/util/Timer.h: rusage cpp wrapper replaced with
+		config.h's defined(TVMET_HAVE_XYZ_H)
+
+	* configure.in: enhanced for better recognizing, features from autoconf-2.5x
+		added. Some problems left using
+		AC_INIT(AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
+
+	* doc/Doxyfile.in (INPUT): points to @top_srcdir@/include/@PACKAGE@, therefore
+		we can apply other lib's includes too (e.g. for benchmark)
+
+2003-02-08 opetzold  <opetzold@wit.regiocom.net>
+
+	* config/license: removed
+
+	* version 0.7.6 released internally (cvs tagged)
+
+	* misc corrections to the cvs
+
+	* doc/bench*.png: replaced with an 'empty' picture
+
+	* doc/Makefile.am: bug fixed: tgz dist installs the docs now
+
+	* include/tvmet/Makefile.am: bug fixed: tgz dist install target doesn't
+		install meta and util directory; include/tvmet/meta/Makefile.am,
+		include/tvmet/util/Makefile.am added
+
+	* version 0.7.5 released internally (cvs tagged)
+
+	* project imported into cvs, cvs keyword Id corrected and added
+
+	* doc/Util.h: header guard prefix TVMET extended
+
+	* include/tvmet/meta/: copyright and cvs Id keyword added
+
+2002-12-28  opetzold  <opetzold@wit.regiocom.net>
+
+	* benchmark/BenchImpl.h: Each BenchImpl does run 10 times each benchmark to
+		trick the optimizer a little bit.
+
+2002-12-27  opetzold  <opetzold@wit.regiocom.net>
+
+	* benchmark/Makefile.am: each benchmark got his own optimizer cxxflags.
+
+2002-12-22  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.7.4 released internally
+
+	* include/tvmet/MatrixFunctions.h: element_wise::product(Matrix, Matrix)
+		added.
+
+	* benchmark/benchmark.m: stl and peak benchmark added
+
+	* benchmark/stl.{cc|h}: created to measure STL performance
+
+	* benchmark/peak.{cc|h}: created to measure peak performance
+
+	* benchmark/Interface.h: interface_peak etc. added
+
+	* benchmark/BenchmarkBase.h: created, moved basic functionality from
+		Benchmark.h
+
+2002-12-21  opetzold  <opetzold@wit.regiocom.net>
+
+	* benchmark/BenchInfo.h: created, class definition moved from
+		Benchmark.h into.
+
+2002-12-17  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.7.3 released internally
+
+	* doc/benchmark.dox: Result comments to each benchmark removed.
+
+	* doc/ doxygen extension is dox now to avoid confusion.
+
+	* include/tvmet/util/General.h: all functions inside doxygroup
+		_util_function now.
+
+	* benchmark/Makefile.am: Depencies corrected.
+
+2002-12-16  opetzold  <opetzold@wit.regiocom.net>
+
+	* benchmark/Benchmark.h (class BenchInfo): typeid added
+
+	* benchmark/*.cc: axpy included in benchmark
+
+	* benchmark/BenchImpl.h (BenchImpl::vector_inner_product): result z static
+		now to avoid removing by optimizer of gcc-3.2, thanks to Jörg Walter.
+
+	* benchmark/Benchmark.h (class Benchmark): BUG inside set_complexity(),
+		vector_add(), vector_outer_product() removed, thanks to Jörg Walter.
+
+2002-12-15  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/XprMatrixOperators.h: element_wise
+		operator*(XprMatrix, XprMatrix) supports non-square matrizes now.
+
+	* bechmark/*: (C) added
+
+	* include/tvmet/XprOperators.h: IMPLEMENT macros splitted for
+		XprVector<> and XprMatrix<>, NS element_wise introduced,
+		file splited into Xpr{Matrix, Vector}Operators.h
+
+2002-12-14  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.7.2 released internally; interface has changed too!
+
+	* include/tvmet/MatrixImpl.h (Matrix::print_on): small BUG removed,
+		introduced from v0.4.2 (last comma separator was wrong)
+
+	* doc/operator_tab.html: added as doc for namespace element_wise
+
+	* regressions/*: adapted to namespace element_wise
+
+	* include/tvmet/tvmet.h: doxygen namespace description moved from
+		doc/misc.doc into this header.
+
+	* include/tvmet/MatrixOperators.h: operators for *=, /= ... <<= for
+		Matrix<> and XprMatrix<> inside namespace element_wise now!
+		Macro KICK_MATH_SENSE absolete now!
+
+	* include/tvmet/MatrixImpl.h: operator impl for +=, -= ... <<= for
+		Matrix<> and XprMatrix<> moved here from Matrix.h.
+
+	* include/tvmet/MatrixImpl.h: Forgotten macro prefix TVMET_ added.
+		operator %=,^=,&=,|= have as argument std::size_t since these
+		are bitops, only int's are allowed/usefull.
+
+	* include/tvmet/Matrix.h (class Matrix): operator %=,^=,&=,|= have
+		as argumeent std::size_t since these are bitops, only int's
+		are allowed/usefull.
+
+	* include/tvmet/VectorOperators.h: operators for /=, %= ... <<= for
+		Vector<> and XprVector<> inside namespace element_wise now!
+		Macro KICK_MATH_SENSE absolete now!
+
+	* include/tvmet/VectorImpl.h: operator impl for +=, -= ... <<= for
+		Vector<> and XprVector<> moved here from Vector.h.
+
+	* include/tvmet/Vector.h (class Vector): member operators for
+		+=, -= ... <<= for Vector<> and XprVector<> named to equivalent
+		functions.
+
+	* doc/faq.doc: comma_initializer and assign_op compiler error section
+		added.
+
+	* include/tvmet/VectorImpl.h: Forgotten macro prefix TVMET_ added.
+
+	* version 0.7.1 released internally
+
+2002-12-10  opetzold  <opetzold@wit.regiocom.net>
+
+	* doc/notes.doc: notes about aliasing added.
+
+	* doc/benchmark.doc: Fomula written for benchmarks, notes abot aliasing.
+
+	* benchmark/ublas.h: assumes alias free ops, thanks to Jörg Walter
+
+2002-12-08  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/MatrixOperators.h: operator*(XprMatrix, Matrix|Matrix, XprMatrix)
+		moved from NS tvmet::element_wise to tvmet,
+		operator/(XprMatrix, Matrix|Matrix, XprMatrix) moved from NS
+		tvmet to tvmet::element_wise. M = transpose(M1) * M2 is working now.
+
+	* include/tvmet/meta/Gemv.h: doxygen class docs corrected.
+
+	* regression/TestMathOps.h: productTranspose regression Test added
+
+	* include/tvmet/MatrixFunctions.h: Formula written in doxygen docs for
+		productTransposed(M,x)
+
+2002-11-30  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.7.0 released
+
+	* include/tvmet/{Matrix,Vector}.h: Reference level printing changed.
+
+2002-11-26  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/{Xpr,BinaryFunctionals,UnaryFunctionals,Matrix,Vector}.h:
+		expression printing enhanced.
+
+	* include/tvmet/VectorOperators.h: Vector<std::complex<T>, Sz> and std::complex<T>,
+		std::complex<T> and Vector<std::complex<T>, Sz> are working now.
+
+	* include/tvmet/MatrixOperators.h:  Matrix<T, Rows, Cols> and complex<T>,
+ 		complex<T> and Matrix<T, Rows, Cols> are working now.
+
+2002-11-24  opetzold  <opetzold@wit.regiocom.net>
+
+	* regression/TestSTL.h: added for regression with STL's vector class.
+
+	* include/tvmet/Vector.h (class Vector): runtime condition added for
+		construction from given iterator.
+
+	* regression/*: TVMET prefix for all *.h
+
+	* version 0.6.3 released internally
+
+	* regression/Makefile.am: CXXFLAGS limited to the minimum optimizations
+
+	* regression/TestMathOps.h: adapted to the new situation.
+
+	* regression/MVOps.h: moved to namespace util, file moved to
+		include/tvmet/util/General.h; functions renamed
+
+	* include/tvmet/Timer.h: moved to util subdir.
+
+	* include/tvmet/*: All meta stuff moved to an own namespace into a
+		subdirectoy meta.
+
+	* include/tvmet/Matrix.h (class Matrix::assign): adapted for use of meta
+		templates default parameter
+
+	* include/tvmet/MetaMatrix.h (class Matrix): {Row,Col}Stride have default
+		parameter now.
+
+	* doc/Makefile.am: CXXFLAGS limited to the minimum optimizations
+
+2002-11-23  opetzold  |opetzold@wit.regiocom.net>
+
+	* version 0.6.2 released internally
+
+	* doc/benchmark.doc: updated.
+
+	* benchmark/* completly rewritten, uses interfaces for libaries (blitz,
+		ublas, mtl), results in MFlops now.
+
+2002-11-16  opetzold  <opetzold@wit.regiocom.net>
+
+	* benchmark/Timer.h (class Timer): moved to namespace tvmet::util, file
+		moved to include/tvmet
+
+2002-11-14  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.6.1 released internally
+
+	* doc/{notes,faq}.doc: About regression test moved from notes to
+		faq. Added to faq dimension check error compiler.
+
+	* doc/*: Benchmark results added.
+
+	* regression/TestMathOps.h (TestMathOps<T>::MatrixOps()): Regression
+		for trace(Matrix<>) added.
+
+	* include/tvmet/MatrixFunctions.h: trace(Matrix<>) added.
+
+	* include/tvmet/Matrix.h (class MetaMatrix): MetaMatrix::trace added.
+
+2002-11-13  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/*.h:  brute force replace DECLARE_XYZ with TVMET prefix
+		to avoid complications with other macros.
+		Same to asXpr() -> as_expr() to hold member conventions.
+
+	* include/tvmet/*.h:  brute force replace ExprType with expr_type to be
+		conform to the used style.
+
+2002-11-12  opetzold  <opetzold@wit.regiocom.net>
+
+	* regression/MVOps.h: Header guard with TVMET prefix, doxygen like,
+		VVAdd fn added.
+
+2002-11-10  opetzold  <opetzold@wit.regiocom.net>
+
+	* regression/*: completly rewritten. Now we have a benchmark with blitz++,
+		tvmet, ublas and conventional implementation.
+
+	* doc/*: Corrections and Enhancements to the docs generally (intro rewritten).
+
+	* include/tvmet/tvmet.h: Guard for defined DEBUG arround TVMET_DEBUG removed.
+		TVMET_DEBUG isn't turned on at defined DEBUG any more.
+
+2002-11-03  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.6.0 released
+
+	* regression/TestMathOps.h: Test for normalize(Vector<>) added.
+
+	* include/tvmet/{Matrix,Vector}Operators.h: Matrix/Vector<T, Sz> and POD's
+		extended with long long int to handle long long from NumericTraits
+		too.
+
+2002-10-29  opetzold  <opetzold@wit.regiocom.net>
+
+	* doc/{usage,faq}.doc enhanced.
+
+	* include/tvmet/VectorFunctions.h: normalize(Vector<>) added.
+
+	* regression/TestUnFunc.h: copy && paste devel killed:
+		3 test cases indicate that they are testing the inverse functions,
+		asin, acos, atan but the test case calls the sin function - thanks
+		to Darin DeForest (deforest) from sf.
+
+2002-10-19  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/{Matrix|Vector}Functions.h: Formula docs enhanced,
+		doxy grouping enhanced for unary and binary functions and
+		operators.
+
+2002-10-17  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.5.1 released as doc update
+
+	* doc/Doxygen.in: PREDEFINED targets use the forgotten TVMET prefix too.
+
+	* include/tvmet/{Binary|UnaryFunctionals.h, NumericTraits.h,
+		TypePromotion.h TvmetBase.h}: macros
+		generated operators, functions and functionals doc added for
+		doxygen include path.
+
+2002-10-10  opetzold  <opetzold@wit.regiocom.net>
+
+	* doc/{functions|operators}_doc.cc: naming convention for private
+		data updated
+
+	* doc/*: Corrections and Enhancements to the docs generally.
+
+2002-08-18  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.5.o released after some time of playing with.
+
+	* doc/tvmet.css: using tvmet.css now.
+
+	* Small docs enhancements.
+
+2002-08-03  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/VectorImpl.h (print_on): simplifyied rewritten.
+
+	* include/tvmet/MatrixImpl.h (print_on): simplifyied rewritten.
+
+	* version 0.4.2 released only internal
+
+	* doc/compiler.doc: Section general compiler requirements added.
+
+	* include/tvmet/*.h: forwards for namespace std rewritten to avoid
+		doxygen confuse.
+
+	* regression/TestMathOps.h: Regression test for row() and col() added.
+
+	* include/tvmet/Matrix.h (Matrix{Row, Col}VectorReference):
+		operator[] const added, manual ctor removed.
+
+	* include/tvmet/Matrix.h (Matrix{Row, Col}VectorReference): XprLevel is
+		IndentLevl now (removed	bug from beginning time.)
+
+	* examples/mv.cc: cstdlib for rand added for compatibility.
+
+2002-07-27  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.4.1 released only internal
+
+	* regression/Makefile.am (regression_LDADD): cppunit-1.9.8 needs -ldl for
+		dl{open,close,sym}.
+
+	* include/tvmet/Matrix.h (class Matrix): added reverse_iterator STL
+		interface as well as empty() and max_size(). size() is static now.
+
+	* include/tvmet/Vector.h (class Vector): added reverse_iterator STL
+		interface as well as front(), back(), empty(), max_size().
+		size() is static now.
+
+	* tvmet.spec.in: Adapted for manual.
+
+	* Makefile.am (man_MANS): manual for tvmet-config written
+
+	* include/tvmet/*: brute force query replace printOn with print_on
+		for member naming conformity.
+
+	* include/tvmet/*: brute force query replace restrict by _tvmet_restrict
+		due to the use of the prefix macro.
+
+	* include/tvmet/* all header guards with TVMET_ prefix extensioned.
+
+	* doc/Doxyfile.in: adapted to the new situation
+
+	* tvmet-config.in (Usage): corrected very old package name (tvm)
+
+	* include/tvmet/config/config-{icc,kcc,pgi}.h: dummies created for
+		compiler specifics.
+
+	* include/tvmet/config/config-gcc.h: created for gcc specifics.
+
+	* include/tvmet/TvmetBase.h: created, contents of old tvmet.h moved in.
+
+	* include/tvmet/tvmet.h (IndentLevel): forgotten member rename to be
+		conform to m_xxx; particular rewritten and splitted, so below
+		and above.
+
+	* configure.in: We are using the ac_create_prefix_config_h to create
+		a prefixed config.h header now. Unfortunally accconfig.h is
+		deprecated too. With this we can easy mix different packages
+		(prior all autoXXX defined PACKAGE and VERSION with the result
+		of multiple define warnings).
+
+	* Makefile.am (m4sources): added ac_create_prefix_config_h.m4, aclocal.m4
+		moved from root dir to config dir.
+
+2002-07-24  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/VectorImpl.h: printOn() does care the io manipulators
+		std::setw(), see examples/mv.cc
+
+	* include/tvmet/MatrixImpl.h: same too.
+
+2002-07-23  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.4.0 released
+
+	* include/tvmet/NumericTraits.h: rewritten to avoid macro and ifdef garbage.
+
+	* include/tvmet/*: member rename to be conform to m_xxx
+
+	* include/tvmet/Matrix.h: CT_CONDITION have the tvmet identifier now.
+
+	* include/tvmet/Vector.h: CT_CONDITION have the tvmet identifier now.
+
+2002-07-17  opetzold  <opetzold@wit.regiocom.net>
+
+	* now we have a postscript and pdf manual
+
+	* doc/functions_doc.cc: some missed return statements added.
+
+2002-07-16  opetzold  <opetzold@wit.regiocom.net>
+
+	* doc/Makefile.am: pdf support improved.
+
+	* doc/Makefile.am (doc-dist): tvmet-doc-xxx dist doesn't have html subdir anymore
+		- usefull for sourceforge dist since we have only html docs.
+
+	* regression/main.cc (main): args removed to avoid warnings.
+
+	* configure.in: CXX_OPTIMIZE_FLAG/CXX_DEBUG_FLAGS for GnuCC -W -Wall added
+
+	* include/tvmet/TypePromotion.h: No idea when this bug where introduced - the
+		header guard was in wrong scope, v0.3.1 suffered. Nobdy told me ...
+
+	* include/tvmet/TypePromotion.h: Support for long long. Enhanced for unsigned
+		and complex types as well. Change ranking breaks compatibility
+		with prior releases.
+
+	* include/tvmet/NumericTraits.h: support for long long. Specialized version for
+		long double and long long self removed - there isn't a way to guarantee
+		the precision than.
+
+	* config/ac_c_long_long.m4 added.
+
+2002-07-13  opetzold  <opetzold@wit.regiocom.net>
+
+	* acconfig.h: political correct error messages now 8-)
+
+2002-07-07  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.3.1 released
+
+	* include/tvmet/Vector.h (class Vector): brute force query replace ThisType
+		by this_type, to be conform to the naming convention
+
+	* include/tvmet/Matrix.h (class Matrix): brute force query replace ThisType
+		by this_type, to be conform to the naming convention
+
+	* doc/Doxyfile.in: slighly minor changes.
+
+2002-07-06  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/Matrix.h (class Matrix): same here.
+
+	* include/tvmet/Vector.h (class Vector): doxygen correctness for copy ctor doc.
+
+2002-06-25  opetzold  <opetzold@wit.regiocom.net>
+
+	* doc/notes.doc: chapter _thread inside contents now.
+
+	* include/tvmet/TypePromotion.h: classes inside namespace tvmet now.
+
+2002-06-23  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.3.0 released
+
+	* doc-dists does have a doxygen tag file now
+
+	* header class descriptions follows now the statement
+		\class <name> [<header-file>] [<header-name>]
+
+	* include/tvmet/CompileTimeError.h, include/tvmet/CommaInitializer.h: doxygen
+		confuseness removed (first line of header (LGPL) introduced a doxy comment - therfore
+		doxygen did interpret the follwing statement)
+
+2002-06-22  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/Functional.h: class replaced by struct, since all members are public
+
+	* include/tvmet/XprOperators.h: std::complex<T> templated
+
+	* include/tvmet/XprFunctions.h: std::complex<T> templated
+
+	* include/tvmet/VectorOperators.h: std::complex<T> templated
+
+	* include/tvmet/VectorFunctions.h: std::complex<T> templated
+
+	* include/tvmet/VectorEval.h: std::complex<T> templated, macro removed
+
+	* include/tvmet/UnaryFunctionals.h: std::complex<T> templated
+
+	* include/tvmet/MatrixFunctions.h:  std::complex<T> templated
+
+	* include/tvmet/MatrixOperators.h: std::complex<T> templated
+
+	* include/tvmet/MatrixEval.h: std::complex<T> templated, macro removed
+
+	* include/tvmet/XprFunctions.h: forgotten exp function added
+
+	* regression/TestMathOps.h: bug removed in regressions due to prior initialized
+		vars. Moved the test into MatrixMatrixVector.
+
+	* benchmark/Benchmark.h: new, parts from m1.cc and v1.cc has been moved here.
+
+2002-06-20  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/TypePromotion.h: std::complex<int> added, therfore the priorities
+		for all complex types have changed!
+
+	* include/tvmet/NumericTraits.h: depends on HAVE_LONG_DOUBLE, sum_type of double
+		is long double or double.
+
+	* include/tvmet/{MatrixEval.h, MatrixFunctions.h, MatrixOperators.h, NumericTraits.h,
+		TypePromotion.h, UnaryFunctionals.h, VectorEval.h, VectorFunctions.h,
+		VectorOperators.h, XprFunctions.h, XprOperators.h} HAVE_LONG_DOUBLE
+		encapsulated.
+
+	* configure.in: AC_C_LONG_DOUBLE added.
+
+	* include/tvmet/UnaryFunctionals.h: for std::complex<> expanded, uses now a const reference.
+		functions for std::complex<int> added
+
+	* include/tvmet/MatrixEval.h: std::complex<int> added
+
+	* doc/Doxyfile.in (BIN_ABSPATH): updated for doxygen 2.2.18 (new generated).
+
+2002-06-16  opetzold  <opetzold@wit.regiocom.net>
+
+	* examples/Makefile.am (examples): bug corrected.
+
+	* include/tvmet/NumericTraits.h: complex<int> numeric traits added.
+
+	* include/tvmet/MatrixOperators.h: operator*() is in namespace element_wise left
+
+2002-06-13  opetzold  <opetzold@wit.regiocom.net>
+
+	* doc/Makefile.am (doc-dist): gzip with bzip2 replaced
+
+	* Makefile.am (doc-dist): gzip to bzip2 replaced as well
+
+	* include/tvmet/MatrixFunctions.h: for std::complex<> expanded, uses now a const reference.
+		functions for std::complex<int> added
+
+2002-06-12  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/XprFunctions.h: for std::complex<> expanded, uses now a const reference.
+		functions for std::complex<int> added
+
+	* include/tvmet/MatrixOperators.h (DECLARE_BINARY_OPERATOR): for std::complex<>
+		expanded, uses now a const reference.
+		operators for std::complex<int> added
+
+	* include/tvmet/VectorOperators.h (DECLARE_BINARY_OPERATOR): for std::complex<>
+		expanded, uses now a const reference.
+		operators for std::complex<int> added
+
+	* include/tvmet/XprOperators.h (DECLARE_BINARY_OPERATOR): for std::complex<>
+		expanded, uses now a const reference.
+		logical operators for float, double etc. removed, since isn't applicable
+		operators for std::complex<int> added
+
+2002-06-11  opetzold  <opetzold@wit.regiocom.net>
+
+	* acconfig.h (__S_STL_INTERNAL_RELOPS): hack removed since isn't usefull.
+
+	* doc/Makefile.am (api): target renamed to doc
+
+	* include/tvmet/tvmet.h: NS_TVMET_BEGIN/END removed again due to doxygen problems
+		description of namespace moved to misc.doc
+
+	* doc/Doxyfile.in (INPUT): @top_srcdir@/include/tvmet now
+
+	* include/tvmet/tvmet.h: macros NS_TVMET_BEGIN/END completly removed - too
+		much trouble with doxygen, only NS_TVMET_NAME is used now. NS_TVMET_NAME
+		has a guard now.
+
+	* include/tvmet/*.h: doxygen grouping for global functions and operators
+
+	* doc/functions.doc: added for global functions documenting
+
+	* doc/operators.doc: added for global operators documenting
+
+2002-06-09  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.2.1 released
+
+	* benchmark/* completly rewritten
+
+	* regression/MVOps.h: extracted from TestMathOp.h for use for benchmarking
+
+2002-06-08  opetzold  <opetzold@wit.regiocom.net>
+
+	* regression/: checked/rewritten and updated against cppunit-1.8.0,
+		which s now used for regression test.0
+		TestConstruction.cc TestMathOps.cc TestXpr.cc removed.
+
+	* regression/main.cc: Oops, non std iostream include header fixed. Thanks
+		to gcc-3.1 8-)
+
+	* include/tvmet/*.h: doxygen enhancements
+
+	* doc/Makefile.am: modified for splitted doc files, ChangeLog and THANKS files
+		included into html doc tree.
+
+	* doc/intro.doc: original intro.doxy splitted to several *.doc files,
+		anhanced docs and topics regrouped.
+
+	* include/tvmet/Matrix.h (class Matrix): Member assignValue(), forgotten return
+		statement added. Thanks to Kresimir Fresl <fresl@grad.hr>
+
+2002-06-02  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.2.0 released
+
+	* include/tvmet/Matrix.h (class Matrix): STL iterator constructors and interface
+		added.
+
+	* include/tvmet/Vector.h (class Vector): STL iterator constructors and interface
+		added.
+
+	* generell: Designer decision to rename all const_reference to ConstReference,
+		reference to Reference, expr_type to ExprType. This make its possible
+		to support the STL interface. Finally this means a public interface
+		change.
+
+	* include/tvmet/MatrixFunctions.h (class MetaMM ): typename
+		PromoteTraits<T1, T2>::value_type' is implicitly a typename,
+		changed, (class MetaMV ): same here.
+
+	* include/tvmet/: brute-force query-replace size_t with std::size_t
+
+	* doc/intro.doxy: slightly changed and anhanced docs due to positive
+		test with stlport and gcc-3.1.
+
+	* include/tvmet/UnaryFunctionals.h: removed ieee math functions
+		from namespace std, STLport does it right.
+
+2002-06-01  opetzold  <opetzold@wit.regiocom.net>
+
+	* cleaned some comments/doxygen tags for cosmetic
+
+	* removed doing vector cross product as ET from todo list
+
+	* include/tvmet/Vector.h (class Vector): enum  size removed, since it's never used
+		here and not really usefull. Added new member function size() instead.
+
+	* include/tvmet/Matrix.h (class Matrix): enum { rows, cols} removed since they are
+		never used here, and not really usefull. Added new member functions
+		rows() and cols() instead.
+
+	* include/tvmet/Vector.h (class Vector): template argument length replaced
+		with tvmet::Vector template argument Sz, since it's the same.
+		Removed enum length, since isn't needed.
+
+	* Makefile.am (rpm): --target=noarch added, therefore it's really
+		plattform independed 8)
+
+2002-04-27  opetzold  <opetzold@wit.regiocom.net>
+
+	* version 0.1.2 released
+
+	* include/tvmet/tvmet.h (NS_TVMET): removed since it holds only the name self and
+		isn't used anwhere expect NS_TVMET_BEGIN.
+
+	* doc/header.html: meta tags added and sf logo changed.
+
+2002-04-21  opetzold  <opetzold@wit.regiocom.net>
+
+	* docs/ adhanced
+
+	* include/tvmet/Matrix.h (MatrixReference::operator()): removed const since
+		it isn't const.
+
+2002-04-20  opetzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/Matrix.h: MatrixColVectorReference, MatrixRowVectorReference added.
+
+	* include/tvmet/MatrixFunctions.h: row() and col() functions added
+
+	* examples/: new complex examples
+
+	* macro for automake added tvmet.m4
+
+2002-03-11  O.Petzold  <opetzold@wit.regiocom.net>
+
+	* version 0.1.1 released
+
+2002-03-05  O.Petzold  <opetzold@wit.regiocom.net>
+
+	* examples/: some examples added for xpr printing and simple mv, mm ops
+
+	* include/tvmet/Vector.h (VectorReference, VectorConstReference): XprLevel
+		printing uses typeid now.
+
+	* include/tvmet/Matrix.h (MatrixReference, MatrixConstReference): XprLevel
+		printing uses typeid now.
+
+	* include/tvmet/VectorImpl.h (operator<<()): XprLevel printing uses typeid now.
+
+	* include/tvmet/MatrixImpl.h (operator<<()): XprLevel printing uses typeid now.
+
+2002-03-04  O.Petzold  <opetzold@wit.regiocom.net>
+
+	* include/tvmet/MatrixFunctions.h: min/max temp vars improved
+
+	* include/tvmet/VectorFunctions.h: min/max temp vars improved
+
+	* doc/intro.doxy: corrections
+
+2002-03-01  O.Petzold  <opetzold@wit.regiocom.net>
+
+	* version 0.1.0 released
diff --git a/tvmet-1.7.1/INSTALL b/tvmet-1.7.1/INSTALL
new file mode 100644
index 0000000..54caf7c
--- /dev/null
+++ b/tvmet-1.7.1/INSTALL
@@ -0,0 +1,229 @@
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
+Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the `--target=TYPE' option to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/tvmet-1.7.1/LICENSE b/tvmet-1.7.1/LICENSE
new file mode 100644
index 0000000..c29dde6
--- /dev/null
+++ b/tvmet-1.7.1/LICENSE
@@ -0,0 +1,53 @@
+
+
+
+
+
+                           ADDENDUM TO LICENSE
+                              Februar 2003
+
+                Copyright (C) 2003 Olaf Petzold
+
+        Everyone is permitted to copy and distribute verbatim copies
+     of this license addendum document, but changing it is not allowed.
+
+
+tvmet License Agreement.
+
+
+0. tvmet ("The Library") is licensed under GNU Lesser General Public License
+as published by the Free Software Foundation, version 2.1 of the License, or
+(at your option) any later version, with the following additional conditions.
+The following conditions take precedence over any conditions or restrictions
+stipulated by the Lesser General Public License insofar as a conflict exists.
+
+1. The tvmet License Agreement ("License") covers only tvmet ("The Library").
+Other libraries which the Library may use are covered by their own respective
+licenses.
+
+2. Modification of the configure scripts, makefiles, or installation tools of
+the Library to support a specific platform does not constitute creating a
+modified or derivative work based on the Library.
+
+3. Statically linking of a copy of the Library against any work using the
+Library, i.e. the inclusion of (parts of) the Library into a program or binary,
+is functionally equivalent to a work using the Library by linking to it
+dynamically, and therefore does not constitute creating a modified or derivative
+work based on the Library.
+
+4. Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of the GNU Lesser General Public
+License.  Any executables containing that work also may be distributed under
+the Lesser General Public License whether or not they are linked directly with
+the Library itself.
+
+5. Programs or binaries linked with the Library must be identified as such by
+including, in the Documentation or by other means (for example in the About
+Box or Online Help), the following statement:
+
+"This software uses tvmet (http://tvmet.sourceforge.net)."
+
+
+
+
+                             END OF ADDENDUM
diff --git a/tvmet-1.7.1/Makefile.am b/tvmet-1.7.1/Makefile.am
new file mode 100644
index 0000000..3023c01
--- /dev/null
+++ b/tvmet-1.7.1/Makefile.am
@@ -0,0 +1,101 @@
+# $Id: Makefile.am,v 1.25 2004/09/16 08:12:28 opetzold Exp $
+
+ACLOCAL_AMFLAGS  = -I config
+
+SUBDIRS = include examples testsuite doc tests benchmark
+
+m4sources = \
+	config/ac_c_long_long.m4 \
+	config/ac_create_prefix_config_h.m4 \
+	config/ac_cxx_have_complex.m4 \
+	config/ac_cxx_have_complex_math1.m4 \
+	config/ac_cxx_have_complex_math2.m4 \
+	config/ac_cxx_have_ieee_math.m4 \
+	config/ac_cxx_have_mutable.m4 \
+	config/ac_cxx_have_namespaces.m4 \
+	config/ac_cxx_have_sysv_math.m4 \
+	config/ac_cxx_partial_specialization.m4 \
+	config/ac_cxx_typename.m4 \
+	config/ac_set_compiler.m4 \
+	config/ac_prog_cxx_intel.m4 \
+	config/ac_prog_cxx_kai.m4 \
+	config/ac_prog_cxx_pgi.m4 \
+	config/op_doxygen_doc.m4
+
+# m4 automake macros
+m4datadir = $(datadir)/aclocal
+m4data_DATA = tvmet.m4
+
+# setup/config scripts
+bin_SCRIPTS = tvmet-config
+
+# manual for script
+man_MANS = tvmet-config.1
+
+EXTRA_DIST = \
+	$(m4sources) \
+	$(m4data_DATA) \
+	$(man_MANS) \
+	ChangeLog.1 \
+	LICENSE
+
+DISTCLEANFILES = \
+	$(PACKAGE)-docs-$(VERSION).tar.bz2 \
+	$(PACKAGE)-$(VERSION).pdf.bz2
+
+# Targets
+ChangeLog:
+	@if test -d CVS -a -x `which cvs2log`; then \
+		echo "Create ChangeLog from CVS"; \
+		`which cvs2log`; \
+	fi
+
+dist-hook: ChangeLog
+	cp tvmet.spec $(distdir)
+	$(MAKE) doc-dist
+	@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps; then \
+		$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps $(PACKAGE)-$(VERSION).ps; \
+		cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps | bzip2 --best > $(PACKAGE)-$(VERSION).ps.bz2; \
+	fi
+	@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf; then \
+		$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf $(PACKAGE)-$(VERSION).pdf; \
+		cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf | bzip2 --best > $(PACKAGE)-$(VERSION).pdf.bz2; \
+	fi
+
+.PHONY: release snapshot rpm docs doc-dist
+
+release:
+	rm -rf .deps */.deps
+	$(MAKE) distcheck
+
+snapshot:
+	$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)-`date +"%y%m%d"`
+
+docs:
+	$(MAKE) -C doc
+
+if CONFIG_DOC
+doc-dist: docs
+	$(MAKE) -C doc doc-dist
+	mv -f doc/$(PACKAGE)-docs-$(VERSION).tar.bz2 .
+else
+doc-dist:
+endif
+
+example:
+	$(MAKE) -C examples example
+
+rpm: dist
+	@if test -f $(PACKAGE).spec; then \
+		echo "Build rpm distribution"; \
+		$(RM) $(PACKAGE).spec && make $(PACKAGE).spec; \
+	fi
+	rpm -ta --target noarch $(PACKAGE)-$(VERSION).tar.bz2
+	cp ~/RPM/SRPMS/$(PACKAGE)-$(VERSION)-1.src.rpm .
+	cp ~/RPM/RPMS/noarch/$(PACKAGE)-$(VERSION)-1.noarch.rpm .
+
+md5:
+	md5sum `find . -maxdepth 1 -name "*.rpm" -or -name "*.gz" -or -name "*.bz2" -xtype f` > MD5sums
+
+sign:	md5
+	cat MD5sums | gpg --clearsign > .MD5sums && mv .MD5sums MD5sums
diff --git a/tvmet-1.7.1/Makefile.in b/tvmet-1.7.1/Makefile.in
new file mode 100644
index 0000000..9cdeb49
--- /dev/null
+++ b/tvmet-1.7.1/Makefile.in
@@ -0,0 +1,822 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.25 2004/09/16 08:12:28 opetzold Exp $
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/tvmet-config.in \
+	$(srcdir)/tvmet.spec.in $(top_srcdir)/config/config.h.in \
+	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
+	THANKS config/config.guess config/config.sub config/depcomp \
+	config/install-sh config/ltmain.sh config/missing
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES = tvmet-config tvmet.spec
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(m4datadir)"
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+m4dataDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(m4data_DATA)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+ACLOCAL_AMFLAGS = -I config
+SUBDIRS = include examples testsuite doc tests benchmark
+m4sources = \
+	config/ac_c_long_long.m4 \
+	config/ac_create_prefix_config_h.m4 \
+	config/ac_cxx_have_complex.m4 \
+	config/ac_cxx_have_complex_math1.m4 \
+	config/ac_cxx_have_complex_math2.m4 \
+	config/ac_cxx_have_ieee_math.m4 \
+	config/ac_cxx_have_mutable.m4 \
+	config/ac_cxx_have_namespaces.m4 \
+	config/ac_cxx_have_sysv_math.m4 \
+	config/ac_cxx_partial_specialization.m4 \
+	config/ac_cxx_typename.m4 \
+	config/ac_set_compiler.m4 \
+	config/ac_prog_cxx_intel.m4 \
+	config/ac_prog_cxx_kai.m4 \
+	config/ac_prog_cxx_pgi.m4 \
+	config/op_doxygen_doc.m4
+
+
+# m4 automake macros
+m4datadir = $(datadir)/aclocal
+m4data_DATA = tvmet.m4
+
+# setup/config scripts
+bin_SCRIPTS = tvmet-config
+
+# manual for script
+man_MANS = tvmet-config.1
+EXTRA_DIST = \
+	$(m4sources) \
+	$(m4data_DATA) \
+	$(man_MANS) \
+	ChangeLog.1 \
+	LICENSE
+
+DISTCLEANFILES = \
+	$(PACKAGE)-docs-$(VERSION).tar.bz2 \
+	$(PACKAGE)-$(VERSION).pdf.bz2
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config/config.h: config/stamp-h1
+	@if test ! -f $@; then \
+	  rm -f config/stamp-h1; \
+	  $(MAKE) config/stamp-h1; \
+	else :; fi
+
+config/stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status
+	@rm -f config/stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config/config.h
+$(top_srcdir)/config/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	rm -f config/stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config/config.h config/stamp-h1
+tvmet-config: $(top_builddir)/config.status $(srcdir)/tvmet-config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+tvmet.spec: $(top_builddir)/config.status $(srcdir)/tvmet.spec.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f $$d$$p; then \
+	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	    echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	    $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.1*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    1*) ;; \
+	    *) ext='1' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+	done
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.1*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    1*) ;; \
+	    *) ext='1' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+	done
+install-m4dataDATA: $(m4data_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(m4datadir)" || $(mkdir_p) "$(DESTDIR)$(m4datadir)"
+	@list='$(m4data_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(m4dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(m4datadir)/$$f'"; \
+	  $(m4dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(m4datadir)/$$f"; \
+	done
+
+uninstall-m4dataDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(m4data_DATA)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(m4datadir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(m4datadir)/$$f"; \
+	done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (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):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	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; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if (etags --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	else \
+	  include_option=--include; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && \
+	      tags="$$tags $$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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	mkdir $(distdir)
+	$(mkdir_p) $(distdir)/. $(distdir)/config $(distdir)/doc $(distdir)/include/tvmet/config
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || mkdir "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="../$(top_distdir)" \
+	        distdir="../$(distdir)/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+dist-bzip2: distdir
+	$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	$(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(MANS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(m4datadir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-m4dataDATA install-man
+
+install-exec-am: install-binSCRIPTS
+
+install-info: install-info-recursive
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-info-am \
+	uninstall-m4dataDATA uninstall-man
+
+uninstall-info: uninstall-info-recursive
+
+uninstall-man: uninstall-man1
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+	check-am clean clean-generic clean-libtool clean-recursive \
+	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+	dist-shar dist-tarZ dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-recursive distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-binSCRIPTS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-m4dataDATA install-man install-man1 \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am \
+	uninstall-binSCRIPTS uninstall-info-am uninstall-m4dataDATA \
+	uninstall-man uninstall-man1
+
+
+# Targets
+ChangeLog:
+	@if test -d CVS -a -x `which cvs2log`; then \
+		echo "Create ChangeLog from CVS"; \
+		`which cvs2log`; \
+	fi
+
+dist-hook: ChangeLog
+	cp tvmet.spec $(distdir)
+	$(MAKE) doc-dist
+	@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps; then \
+		$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps $(PACKAGE)-$(VERSION).ps; \
+		cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).ps | bzip2 --best > $(PACKAGE)-$(VERSION).ps.bz2; \
+	fi
+	@if test -f $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf; then \
+		$(LN_S) $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf $(PACKAGE)-$(VERSION).pdf; \
+		cat $(top_builddir)/doc/$(PACKAGE)-$(VERSION).pdf | bzip2 --best > $(PACKAGE)-$(VERSION).pdf.bz2; \
+	fi
+
+.PHONY: release snapshot rpm docs doc-dist
+
+release:
+	rm -rf .deps */.deps
+	$(MAKE) distcheck
+
+snapshot:
+	$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)-`date +"%y%m%d"`
+
+docs:
+	$(MAKE) -C doc
+
+@CONFIG_DOC_TRUE@doc-dist: docs
+@CONFIG_DOC_TRUE@	$(MAKE) -C doc doc-dist
+@CONFIG_DOC_TRUE@	mv -f doc/$(PACKAGE)-docs-$(VERSION).tar.bz2 .
+@CONFIG_DOC_FALSE@doc-dist:
+
+example:
+	$(MAKE) -C examples example
+
+rpm: dist
+	@if test -f $(PACKAGE).spec; then \
+		echo "Build rpm distribution"; \
+		$(RM) $(PACKAGE).spec && make $(PACKAGE).spec; \
+	fi
+	rpm -ta --target noarch $(PACKAGE)-$(VERSION).tar.bz2
+	cp ~/RPM/SRPMS/$(PACKAGE)-$(VERSION)-1.src.rpm .
+	cp ~/RPM/RPMS/noarch/$(PACKAGE)-$(VERSION)-1.noarch.rpm .
+
+md5:
+	md5sum `find . -maxdepth 1 -name "*.rpm" -or -name "*.gz" -or -name "*.bz2" -xtype f` > MD5sums
+
+sign:	md5
+	cat MD5sums | gpg --clearsign > .MD5sums && mv .MD5sums MD5sums
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/NEWS b/tvmet-1.7.1/NEWS
new file mode 100644
index 0000000..0216d9c
--- /dev/null
+++ b/tvmet-1.7.1/NEWS
@@ -0,0 +1,190 @@
+* release 1.7.1
+
+- major and minor bug fix release.
+- element wise operations on non square matrix expressions.
+  does work as expected now.
+- tvmet compiles with gcc 3.4.3.
+- extended docs.
+- new regression tests.
+
+* release 1.7.0
+
+- support for Microsoft VC++ 7.1
+- several critical bug fixes.
+- docs enhanced and corrected; new chapter for VC++ 7.1.
+- conj for signed types disabled, since an unary minus operator
+  applied to unsigned type will	result unsigned type.
+- drem, hypot, jn, yn, cbrt and rint are inside the global namespace
+  now.
+- some fixes for Makefile on creating pdf documentation.
+- header depencies limited.
+
+* release 1.6.0
+
+- major bug fix: tvmet did crash on zero matrix print (introduced
+  with release 1.5.0, there was only a patch available).
+- corrected and extended docs.
+- new regressions added for traits.
+- some compiler specific optimizations for gcc and icc
+  (compatibility mode) introduced, use it by defined TVMET_OPTIMIZE.
+  This uses the gcc's __attribute__((always_inline)) wrapped by a
+  macro - this allows to produce high optimized and inline code
+  even on lower optimization levels, e.g. -O. This is enabled by
+  configure process by --enable-optimize.
+- For pgCC 5.1 the TVMET_HAVE_LONG_DOUBLE has been disabled, since
+  the support is incomplete imo. For icc some pragma are used
+  to avoid warnings about 'operands are evaluated in unspecified
+  order' since it concerns ostream printing only.
+- traits prepared to be an entry point of several functions
+  used in the feature.
+- new functions c{matrix,vector}_ref to handle C style vectors
+  and arrays as expressions - using inside the tvmet Matrix/Vector
+  expressions as usual.
+- tvmet's syntax/naming convention more cleaner, code should be
+  more readable now. Further more unused template parameter has
+  been removed.
+- new function identity<>() to create identity matrices.
+- some cosmetic changes.
+
+* release 1.5.0
+
+- the build process is more compliant to the GNU standard.
+- alias function extended.
+- Matrix and Vector data printing improved, gives better output
+  even by negative values/contents.
+- configure script supports different compiler better; users
+  can specify  --enable-optimize, --enable-debug and
+  --enable-warnings for their needs.
+- the configure and build process has been improved generally;
+  tvmet can be build in a separate build directory and passes
+  the distcheck target successfully.
+
+* release 1.4.1
+
+- new function alias to solve the aliasing problem.
+- major bug fix: forgotten header tvmet/loop/Vector.h added
+  and benchmark shows AtA and AAt graph with matrices
+  less than 10x10 too - the BTL patch is updated.
+
+* release 1.4.0
+
+- major and minor bug fixes
+- Matrix/Vector and XprMatrix/XprVector uses an assign_to()
+  function - this could be a way for pre-evaluate/caching
+  nodes of the sub expressions for further releases.
+- an alternate way of computing matrix-matrix and matrix-vector
+  products added: using meta templates or loops. Therefore some
+  trigger are introduced which are not tuned yet. Using
+  matrix-matrix products less than Rows*Cols 8*8 or
+  matrix-vector products less than Sz=8 uses meta templates
+  else loops.
+- regression tests added for loop products, as well as bugs
+  fixed.
+- enums Rows, Cols and Size for Matrix and Vector are
+  introduced.
+- expression level printing improved - more info's are shown
+- output format has been changed, the output is compatible
+  to octave/matlab. To get the type and size info as before
+  a new member function info() has been introduced which can
+  be streamed to ostreams.
+- improved data printing, aligns output regarding of maximum
+  element.
+- different members for expression and data printing.
+- BTL benchmark results added.
+
+* release 1.3.0
+
+- major and minor bug fixes - all users should update !
+- RVO problem/bug removed, chaining/composed expressions are
+  working now. The problem was related on use of temporaries
+  on composed functions, which gone out of scope.
+- sources compiled without optimizations, by -O0, doesn't crash
+  any more. The Problem was related by holding expressions by
+  references instead by value. At higher optimization levels
+  there were no faults than.
+- better english documentation (spelling and grammar) as well
+  some corrections and extensions.
+- benchmark removed from sources.
+- interface changes.
+- prodTrans renamed to trans_prod to follow the naming convention
+- boolean version of eval removed to avoid confusion, comparing
+  is done using all_elements and any_elements.
+- support for complex<> slightly improved.
+
+* release 1.2.1
+
+- major and minor bug fixes.
+- corrected and extended docs.
+- tvmet's const correctness improved.
+
+* release 1.2.0
+
+- major and minor bug fixes
+- better gcc 2.95.3 support but, still problems
+- function naming convention from product to prod, transpose
+  to trans etc. changed.
+- new functions add,sub,mul and div on element wise functions.
+- expressions used for row/col and diag vectors on matrices,
+  prevents use of temporaries on expressions for pre-evaluation.
+- Vector access using braces () is default on internal use,
+  brackets [] are still valid and supported.
+- better debug support.
+- regression test improved and more tests added, especially
+  on expressions.
+- more functions and operators on functions.
+- better header file layout.
+
+* release 1.1.0
+
+- major and minor bug fixes
+- new meta templated functions for matrix operations for
+  product(transpose(M), M), product(M, transpose(M)) and
+  transpose(product(M,M)), namely MtM_product(), MMt_product
+  as well as productTransposed().
+- productTranspose(M,V) renamed to Mtx_product(). In this
+  function is a return dimension bug removed (working for non-
+  square matrices too now).
+- Therefore, old productTransposed() functions doesn't have
+  the old meaning any more!
+- a matrix expression can be transposed too.
+- new functions and operators for products of expression of
+  matrices and vectors added - chaining of this should work
+  now.
+- better support for non-square matrices and non-square
+  matrix-matrix and matrix-vector functions/operations.
+- regression test improved and more tests added.
+- file and directory structure extended.
+
+* release 1.0.1:
+
+- minor bug fixes
+
+* release 1.0.0:
+
+- corrected and improved documents
+- new product(XprMatrix, Vector) and operator*(XprMatrix, Vector)
+  as well as product(XprMatrix<>, XprVector<>),
+- more regression tests
+- better intel compiler support
+- extended include directory structure
+
+* release 0.9.0:
+
+- the benchmark is delayed.
+- new function product(XprMatrix<>,XprMatrix<>) and operator*
+  (XprMatrix<>,XprMatrix<>), therefore concating of mathematical
+  expressions are better supported now.
+- Addendum to the LGPL, static linking is explicit allowed.
+- regression tests for element wise operations added.
+- docs FAQ enhanced.
+- new function diag(Matrix<>) added.
+- autoconf 2.5x ready.
+- default distribution is tar.bz2 now.
+- tvmet-doc-xxx.prm target removed, docs are inside the rpm
+  package self.
+
+
+
+
+
+%%% Local IspellDict: "english"
diff --git a/tvmet-1.7.1/README b/tvmet-1.7.1/README
new file mode 100644
index 0000000..f26f71a
--- /dev/null
+++ b/tvmet-1.7.1/README
@@ -0,0 +1,9 @@
+This tiny vector and matrix template libary uses meta templates and
+template expressions to evaluate results at compile time - to make
+it fast for low order systems. Temporaries are kicked off. 
+
+Nevertheless, this isn't a matlab or octave in C++!
+
+For more informations please have a look into docs/html/ or to the 
+project web page at http://tvmet.sourceforge.net
+
diff --git a/tvmet-1.7.1/THANKS b/tvmet-1.7.1/THANKS
new file mode 100644
index 0000000..dffebb1
--- /dev/null
+++ b/tvmet-1.7.1/THANKS
@@ -0,0 +1,49 @@
+Thanks to:
+
+- Alexei Sheplyakov reported a bug inside the matrix expressions
+  using elementwise operations and others.
+
+- Robi Carnecky for his report on success using MS VC 7.1 and
+  reporting missing typename keyword inside CommaInitializer.h
+  and others.
+
+- Krzysiek Goj found a bug inside the swap functions and
+  reported problems on calling functions in wrong namespace.
+
+- Claudia Bertram for reporting a bug by printing a zero
+  elements matrix.
+
+- Julian Cummings for his help on supporting complex types and
+  some other comments on tvmet.
+
+- Alex V. Frolov found inconsistens on typepromotion used.
+
+- David J. C. Beach, thanks! He checked the grammar and spelling
+  of tvmet's documents. Further more, he gave me hints for
+  any/all_elements and eval.
+
+- David Sarrut for correction on the matrix column access bug.
+
+- Holger Spiess, for his testing on real application (FEM), reporting
+  problems and conversations.
+
+- Erik Kruus, he found a bug inside tvmet.m4.
+
+- George Schnurer for his suggestions and help concerning the licensing
+  and the need to an addendum to it.
+
+- Laurent Plagne, the author of the BTL, for his testing and comparing
+  tvmet against other libs and others.
+
+- Jörg Walter about using uBlas faster assuming alias free operations.
+  Further more for his great conversation about benchmarking and others,
+  thanks!
+
+- Jörg Barfurth from de.compl.lang.iso-c++ for his help on instance
+  problems with templates occoured on regressions test.
+
+- Michael Kochetkov and Tom from comp.lang.c++ for help on namespace
+  problems. Now I know more about Koenig lookup and the problems due
+  too 8)
+
+- Darin DeForest, he found a nasty bug inside the regression tests.
diff --git a/tvmet-1.7.1/aclocal.m4 b/tvmet-1.7.1/aclocal.m4
new file mode 100644
index 0000000..0ef7657
--- /dev/null
+++ b/tvmet-1.7.1/aclocal.m4
@@ -0,0 +1,6945 @@
+# generated automatically by aclocal 1.8.3 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+dnl
+dnl AM_PATH_CPPUNIT([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl
+AC_DEFUN([AM_PATH_CPPUNIT],
+[
+
+AC_ARG_WITH(cppunit-prefix,[  --with-cppunit-prefix=PFX   Prefix where CppUnit is installed (optional)],
+            cppunit_config_prefix="$withval", cppunit_config_prefix="")
+AC_ARG_WITH(cppunit-exec-prefix,[  --with-cppunit-exec-prefix=PFX  Exec prefix where CppUnit is installed (optional)],
+            cppunit_config_exec_prefix="$withval", cppunit_config_exec_prefix="")
+
+  if test x$cppunit_config_exec_prefix != x ; then
+     cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix"
+     if test x${CPPUNIT_CONFIG+set} != xset ; then
+        CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config
+     fi
+  fi
+  if test x$cppunit_config_prefix != x ; then
+     cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix"
+     if test x${CPPUNIT_CONFIG+set} != xset ; then
+        CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config
+     fi
+  fi
+
+  AC_PATH_PROG(CPPUNIT_CONFIG, cppunit-config, no)
+  cppunit_version_min=$1
+
+  AC_MSG_CHECKING(for Cppunit - version >= $cppunit_version_min)
+  no_cppunit=""
+  if test "$CPPUNIT_CONFIG" = "no" ; then
+    no_cppunit=yes
+  else
+    CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags`
+    CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs`
+    cppunit_version=`$CPPUNIT_CONFIG --version`
+
+    cppunit_major_version=`echo $cppunit_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    cppunit_minor_version=`echo $cppunit_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    cppunit_micro_version=`echo $cppunit_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+    cppunit_major_min=`echo $cppunit_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    cppunit_minor_min=`echo $cppunit_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    cppunit_micro_min=`echo $cppunit_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+    cppunit_version_proper=`expr \
+        $cppunit_major_version \> $cppunit_major_min \| \
+        $cppunit_major_version \= $cppunit_major_min \& \
+        $cppunit_minor_version \> $cppunit_minor_min \| \
+        $cppunit_major_version \= $cppunit_major_min \& \
+        $cppunit_minor_version \= $cppunit_minor_min \& \
+        $cppunit_micro_version \>= $cppunit_micro_min `
+
+    if test "$cppunit_version_proper" = "1" ; then
+      AC_MSG_RESULT([$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version])
+    else
+      AC_MSG_RESULT(no)
+      no_cppunit=yes
+    fi
+  fi
+
+  if test "x$no_cppunit" = x ; then
+     ifelse([$2], , :, [$2])     
+  else
+     CPPUNIT_CFLAGS=""
+     CPPUNIT_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+
+  AC_SUBST(CPPUNIT_CFLAGS)
+  AC_SUBST(CPPUNIT_LIBS)
+])
+
+
+
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 47 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+         [],
+         [m4_define([AC_PROVIDE_IFELSE],
+	         [m4_ifdef([AC_PROVIDE_$1],
+		           [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+  AC_PROVIDE_IFELSE([AC_PROG_CXX],
+    [AC_LIBTOOL_CXX],
+    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+  ])])
+dnl And a similar setup for Fortran 77 support
+  AC_PROVIDE_IFELSE([AC_PROG_F77],
+    [AC_LIBTOOL_F77],
+    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+    [AC_LIBTOOL_GCJ],
+    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+      [AC_LIBTOOL_GCJ],
+      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+	[AC_LIBTOOL_GCJ],
+      [ifdef([AC_PROG_GCJ],
+	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([A][M_PROG_GCJ],
+	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([LT_AC_PROG_GCJ],
+	     [define([LT_AC_PROG_GCJ],
+		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+    [AC_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+[$]*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+  ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$5], , :, [$5])
+else
+    ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                          [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+     else
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$4], , :, [$4])
+else
+    ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+   test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_AC_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         AC_MSG_RESULT([yes])
+       else
+  AC_MSG_RESULT([no])
+fi
+       ;;
+   *)
+  AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+        [include additional configurations @<:@automatic@:>@])],
+    [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    AC_MSG_WARN([output file `$ofile' does not exist])
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+    else
+      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+    "") ;;
+    *)  AC_MSG_ERROR([invalid tag name: $tagname])
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      AC_MSG_ERROR([tag name \"$tagname\" already exists])
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  AC_LIBTOOL_LANG_CXX_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+	  AC_LIBTOOL_LANG_F77_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+	  AC_LIBTOOL_LANG_GCJ_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+	AC_LIBTOOL_LANG_RC_CONFIG
+	;;
+
+      *)
+	AC_MSG_ERROR([Unsupported tag name: $tagname])
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    AC_MSG_ERROR([unable to update list of available tagged configurations.])
+  fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+    [AC_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  case $host_cpu in
+  alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*)
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!).  If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, lt_dlinit,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    LTDLINCL=
+  fi
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+    ;;
+  esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+  AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | grep "[[ 	]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ 	]]" >/dev/null; then :
+  else
+    AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+    _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+  $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+  [],
+  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    output_verbose_link_cmd='echo'
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+  else
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+  fi
+    ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+  AC_PROG_LD
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    _LT_AC_TAGVAR(archive_cmds, $1)=''
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	else
+	  # We have old collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      _LT_AC_SYS_LIBPATH_AIX
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	_LT_AC_SYS_LIBPATH_AIX
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	_LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	# Exported symbols can be pulled into shared objects from archives
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+    # as there is no search path for DLLs.
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+    _LT_AC_TAGVAR(always_export_symbols, $1)=no
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    lt_int_apple_cc_single_mod=no
+    output_verbose_link_cmd='echo'
+    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+      lt_int_apple_cc_single_mod=yes
+    fi
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    else
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    fi
+    _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+  else
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+  fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  freebsd[12]*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  freebsd-elf*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  freebsd* | kfreebsd*-gnu)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    aCC)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+        ;;
+      ia64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        ;;
+      *)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+    ia64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+	;;
+    esac
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	 _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  sco*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	case $host_os in
+	  solaris2.[0-5] | solaris2.[0-5].*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars.  Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    _LT_AC_TAGVAR(compiler, $1) \
+    _LT_AC_TAGVAR(CC, $1) \
+    _LT_AC_TAGVAR(LD, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+    _LT_AC_TAGVAR(old_archive_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+    _LT_AC_TAGVAR(predep_objects, $1) \
+    _LT_AC_TAGVAR(postdep_objects, $1) \
+    _LT_AC_TAGVAR(predeps, $1) \
+    _LT_AC_TAGVAR(postdeps, $1) \
+    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+    _LT_AC_TAGVAR(archive_cmds, $1) \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(postinstall_cmds, $1) \
+    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+    _LT_AC_TAGVAR(no_undefined_flag, $1) \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+    _LT_AC_TAGVAR(hardcode_automatic, $1) \
+    _LT_AC_TAGVAR(module_cmds, $1) \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+    _LT_AC_TAGVAR(exclude_expsyms, $1) \
+    _LT_AC_TAGVAR(include_expsyms, $1); do
+
+    case $var in
+    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(module_cmds, $1) | \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\[$]0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+    ;;
+  esac
+
+ifelse([$1], [],
+  [cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  AC_MSG_NOTICE([creating $ofile])],
+  [cfgfile="$ofile"])
+
+  cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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
+# the Free Software Foundation; either version 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# 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.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+])
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDRT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      ccc*)
+        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+],[
+  runpath_var=
+  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_AC_TAGVAR(archive_cmds, $1)=
+  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+  _LT_AC_TAGVAR(module_cmds, $1)=
+  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(always_export_symbols, $1)=no
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_AC_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=no
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds"
+      fi
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+      runpath_var=LD_RUN_PATH
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_AC_TAGVAR(archive_cmds, $1)=''
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  else
+  	  # We have old collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       _LT_AC_SYS_LIBPATH_AIX
+       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 _LT_AC_SYS_LIBPATH_AIX
+	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      # see comment about different semantics on the GNU ld section
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    bsdi4*)
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      case "$host_os" in
+      rhapsody* | darwin1.[[012]])
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+      ;;
+
+    dgux*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    openbsd*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	   ;;
+	 *)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+      esac
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv5*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_AC_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+  AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+])
+AC_MSG_RESULT([$SED])
+])
+
+#                                                        -*- Autoconf -*-
+# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
+
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+
+# 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.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+	 [AM_AUTOMAKE_VERSION([1.8.3])])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright (C) 2001, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                              -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 6
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
+
+# serial 7						-*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+# 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,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# 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
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                            -*- Autoconf -*-
+
+# 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.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 11
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# 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.58])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
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+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_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_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
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# 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.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright (C) 2001, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+#                                                          -*- Autoconf -*-
+# Copyright (C) 2003  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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	-*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+#  -*- Autoconf -*-
+
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$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.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+
+# Copyright (C) 2003, 2004 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003  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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright (C) 2001, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+m4_include([config/ac_c_long_long.m4])
+m4_include([config/ac_create_prefix_config_h.m4])
+m4_include([config/ac_cxx_have_complex.m4])
+m4_include([config/ac_cxx_have_complex_math1.m4])
+m4_include([config/ac_cxx_have_complex_math2.m4])
+m4_include([config/ac_cxx_have_ieee_math.m4])
+m4_include([config/ac_cxx_have_mutable.m4])
+m4_include([config/ac_cxx_have_namespaces.m4])
+m4_include([config/ac_cxx_have_sysv_math.m4])
+m4_include([config/ac_cxx_partial_specialization.m4])
+m4_include([config/ac_cxx_typename.m4])
+m4_include([config/ac_set_compiler.m4])
+m4_include([config/op_doxygen_doc.m4])
diff --git a/tvmet-1.7.1/benchmark/BTL-20030124.patch b/tvmet-1.7.1/benchmark/BTL-20030124.patch
new file mode 100644
index 0000000..2488198
--- /dev/null
+++ b/tvmet-1.7.1/benchmark/BTL-20030124.patch
@@ -0,0 +1,3887 @@
+diff -Nur BTL-20030124/actions/action_aat_product.hh BTL/actions/action_aat_product.hh
+--- BTL-20030124/actions/action_aat_product.hh	2002-12-02 14:57:49.000000000 +0100
++++ BTL/actions/action_aat_product.hh	2003-11-12 19:06:26.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  action_aat_product.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef ACTION_AAT_PRODUCT
+ #define ACTION_AAT_PRODUCT
+ #include "utilities.h"
+@@ -26,103 +26,39 @@
+ #include "init/init_vector.hh"
+ #include "init/init_matrix.hh"
+ 
+-using namespace std;
+-
+ template<class Interface>
+-class Action_aat_product {
++class Action_aat_product
++{
++  Action_aat_product(const  Action_aat_product &);
+ 
+ public :
+-
+   // Ctor
+-
+-  Action_aat_product( int size ):_size(size)
+-  {
+-    MESSAGE("Action_aat_product Ctor");
+-
+-    // STL matrix and vector initialization
+-
+-    init_matrix<pseudo_random>(A_stl,_size);
+-    init_matrix<null_function>(X_stl,_size);
+-    init_matrix<null_function>(resu_stl,_size);
+-
+-    // generic matrix and vector initialization
+-
+-    Interface::matrix_from_stl(A_ref,A_stl);
+-    Interface::matrix_from_stl(X_ref,X_stl);
+-
+-    Interface::matrix_from_stl(A,A_stl);
+-    Interface::matrix_from_stl(X,X_stl);
+-
+-  }
+-
+-  // invalidate copy ctor
+-
+-  Action_aat_product( const  Action_aat_product & )
+-  {
+-    INFOS("illegal call to Action_aat_product Copy Ctor");
+-    exit(0);
+-  }
++  Action_aat_product(int size);
+ 
+   // Dtor
++  ~Action_aat_product();
+ 
+-  ~Action_aat_product( void ){
+-
+-    MESSAGE("Action_aat_product Dtor");
+-
+-    // deallocation
+-
+-    Interface::free_matrix(A,_size);
+-    Interface::free_matrix(X,_size);
+-
+-    Interface::free_matrix(A_ref,_size);
+-    Interface::free_matrix(X_ref,_size);
+-
+-  }
+-  
+   // action name
+-
+-  static inline std::string name( void )
+-  {
+-    return "aat_"+Interface::name();
++  static inline std::string name() {
++    return "aat_" + Interface::name();
+   }
+ 
+-  double nb_op_base( void ){
++  double nb_op_base() {
+     return 2.0*_size*_size*_size;
+   }
+ 
+-  inline void initialize( void ){
+-
++  void initialize() {
+     Interface::copy_matrix(A_ref,A,_size);
+     Interface::copy_matrix(X_ref,X,_size);
+-    
+   }
+ 
+-  inline void calculate( void ) {
+-
+-      Interface::aat_product(A,X,_size);
+-
++  void calculate( void ) {
++    Interface::aat_product(A,X,_size);
+   }
+ 
+-  void check_result( void ){
+-
+-    // calculation check
+-
+-    Interface::matrix_to_stl(X,resu_stl);
+-
+-    STL_interface<typename Interface::real_type>::aat_product(A_stl,X_stl,_size);
+-    
+-    typename Interface::real_type error=
+-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
+- 
+-    if (error>1.e-6){
+-      INFOS("WRONG CALCULATION...residual=" << error);      
+-      exit(0);
+-    }
+-
+-  }
+-
+-private : 
++  void check_result();
+ 
++private :
+   typename Interface::stl_matrix A_stl;
+   typename Interface::stl_matrix X_stl;
+   typename Interface::stl_matrix resu_stl;
+@@ -133,13 +69,61 @@
+   typename Interface::gene_matrix A;
+   typename Interface::gene_matrix X;
+ 
+-
+   int _size;
+-
+ };
+-  
+ 
+-#endif
+ 
++/*
++ * Implementation
++ */
++template<class Interface>
++Action_aat_product<Interface>::Action_aat_product(int size)
++  : _size(size)
++{
++  MESSAGE("Action_aat_product Ctor");
++
++  // STL matrix and vector initialization
++  init_matrix<pseudo_random>(A_stl,_size);
++  init_matrix<null_function>(X_stl,_size);
++  init_matrix<null_function>(resu_stl,_size);
++
++  // generic matrix and vector initialization
++  Interface::matrix_from_stl(A_ref,A_stl);
++  Interface::matrix_from_stl(X_ref,X_stl);
++
++  Interface::matrix_from_stl(A,A_stl);
++  Interface::matrix_from_stl(X,X_stl);
++}
++
++template<class Interface>
++Action_aat_product<Interface>::~Action_aat_product()
++{
++  MESSAGE("Action_aat_product Dtor");
++
++  // deallocation
++  Interface::free_matrix(A,_size);
++  Interface::free_matrix(X,_size);
++
++  Interface::free_matrix(A_ref,_size);
++  Interface::free_matrix(X_ref,_size);
++}
++
++template<class Interface>
++void Action_aat_product<Interface>::check_result()
++{
++  // calculation check
++
++  Interface::matrix_to_stl(X,resu_stl);
+ 
++  STL_interface<typename Interface::real_type>::aat_product(A_stl,X_stl,_size);
+ 
++  typename Interface::real_type error=
++    STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
++
++  if (error>1.e-6){
++    INFOS("WRONG CALCULATION...residual=" << error);
++    exit(0);
++  }
++}
++
++#endif
+diff -Nur BTL-20030124/actions/action_ata_product.hh BTL/actions/action_ata_product.hh
+--- BTL-20030124/actions/action_ata_product.hh	2002-12-02 14:58:14.000000000 +0100
++++ BTL/actions/action_ata_product.hh	2003-11-12 19:13:07.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  action_ata_product.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef ACTION_ATA_PRODUCT
+ #define ACTION_ATA_PRODUCT
+ #include "utilities.h"
+@@ -26,103 +26,39 @@
+ #include "init/init_vector.hh"
+ #include "init/init_matrix.hh"
+ 
+-using namespace std;
+-
+ template<class Interface>
+-class Action_ata_product {
++class Action_ata_product
++{
++  Action_ata_product(const  Action_ata_product &);
+ 
+ public :
+-
+   // Ctor
+-
+-  Action_ata_product( int size ):_size(size)
+-  {
+-    MESSAGE("Action_ata_product Ctor");
+-
+-    // STL matrix and vector initialization
+-
+-    init_matrix<pseudo_random>(A_stl,_size);
+-    init_matrix<null_function>(X_stl,_size);
+-    init_matrix<null_function>(resu_stl,_size);
+-
+-    // generic matrix and vector initialization
+-
+-    Interface::matrix_from_stl(A_ref,A_stl);
+-    Interface::matrix_from_stl(X_ref,X_stl);
+-
+-    Interface::matrix_from_stl(A,A_stl);
+-    Interface::matrix_from_stl(X,X_stl);
+-
+-  }
+-
+-  // invalidate copy ctor
+-
+-  Action_ata_product( const  Action_ata_product & )
+-  {
+-    INFOS("illegal call to Action_ata_product Copy Ctor");
+-    exit(0);
+-  }
++  Action_ata_product(int size);
+ 
+   // Dtor
++  ~Action_ata_product();
+ 
+-  ~Action_ata_product( void ){
+-
+-    MESSAGE("Action_ata_product Dtor");
+-
+-    // deallocation
+-
+-    Interface::free_matrix(A,_size);
+-    Interface::free_matrix(X,_size);
+-
+-    Interface::free_matrix(A_ref,_size);
+-    Interface::free_matrix(X_ref,_size);
+-
+-  }
+-  
+   // action name
+-
+-  static inline std::string name( void )
+-  {
+-    return "ata_"+Interface::name();
++  static inline std::string name() {
++    return "ata_" + Interface::name();
+   }
+ 
+-  double nb_op_base( void ){
++  double nb_op_base() {
+     return 2.0*_size*_size*_size;
+   }
+ 
+-  inline void initialize( void ){
+-
++  void initialize() {
+     Interface::copy_matrix(A_ref,A,_size);
+     Interface::copy_matrix(X_ref,X,_size);
+-    
+   }
+ 
+   inline void calculate( void ) {
+-
+-      Interface::ata_product(A,X,_size);
+-
++    Interface::ata_product(A,X,_size);
+   }
+ 
+-  void check_result( void ){
+-
+-    // calculation check
+-
+-    Interface::matrix_to_stl(X,resu_stl);
+-
+-    STL_interface<typename Interface::real_type>::ata_product(A_stl,X_stl,_size);
+-    
+-    typename Interface::real_type error=
+-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
+- 
+-    if (error>1.e-6){
+-      INFOS("WRONG CALCULATION...residual=" << error);      
+-      exit(0);
+-    }
+-
+-  }
+-
+-private : 
++  void check_result();
+ 
++private :
+   typename Interface::stl_matrix A_stl;
+   typename Interface::stl_matrix X_stl;
+   typename Interface::stl_matrix resu_stl;
+@@ -133,13 +69,60 @@
+   typename Interface::gene_matrix A;
+   typename Interface::gene_matrix X;
+ 
+-
+   int _size;
+-
+ };
+-  
+ 
+-#endif
+ 
++/*
++ * Implementation
++ */
++template<class Interface>
++Action_ata_product<Interface>::Action_ata_product(int size)
++  : _size(size)
++{
++  MESSAGE("Action_ata_product Ctor");
++
++  // STL matrix and vector initialization
++  init_matrix<pseudo_random>(A_stl,_size);
++  init_matrix<null_function>(X_stl,_size);
++  init_matrix<null_function>(resu_stl,_size);
++
++  // generic matrix and vector initialization
++  Interface::matrix_from_stl(A_ref,A_stl);
++  Interface::matrix_from_stl(X_ref,X_stl);
++
++  Interface::matrix_from_stl(A,A_stl);
++  Interface::matrix_from_stl(X,X_stl);
++}
++
++template<class Interface>
++Action_ata_product<Interface>::~Action_ata_product()
++{
++  MESSAGE("Action_ata_product Dtor");
++
++  // deallocation
++  Interface::free_matrix(A,_size);
++  Interface::free_matrix(X,_size);
++
++  Interface::free_matrix(A_ref,_size);
++  Interface::free_matrix(X_ref,_size);
++}
++
++template<class Interface>
++void Action_ata_product<Interface>::check_result()
++{
++  // calculation check
++  Interface::matrix_to_stl(X,resu_stl);
+ 
++  STL_interface<typename Interface::real_type>::ata_product(A_stl,X_stl,_size);
+ 
++  typename Interface::real_type error=
++    STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
++
++  if (error>1.e-6){
++    INFOS("WRONG CALCULATION...residual=" << error);
++    exit(0);
++  }
++}
++
++#endif
+diff -Nur BTL-20030124/actions/action_axpy.hh BTL/actions/action_axpy.hh
+--- BTL-20030124/actions/action_axpy.hh	2003-01-08 11:11:35.000000000 +0100
++++ BTL/actions/action_axpy.hh	2003-11-12 19:07:44.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  action_axpy.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef ACTION_AXPY
+ #define ACTION_AXPY
+ #include "utilities.h"
+@@ -26,106 +26,39 @@
+ #include "init/init_vector.hh"
+ #include "init/init_matrix.hh"
+ 
+-using namespace std;
+-
+ template<class Interface>
+-class Action_axpy {
+-
+-public :
++class Action_axpy
++{
++  Action_axpy(const Action_axpy &);
+ 
++public:
+   // Ctor
+-
+-  Action_axpy( int size ):_size(size),_coef(1.0)
+-  {
+-    MESSAGE("Action_axpy Ctor");
+-
+-    // STL vector initialization
+-
+-    init_vector<pseudo_random>(X_stl,_size);
+-    init_vector<pseudo_random>(Y_stl,_size);
+-    init_vector<null_function>(resu_stl,_size);
+-
+-    // generic matrix and vector initialization
+-
+-    Interface::vector_from_stl(X_ref,X_stl);
+-    Interface::vector_from_stl(Y_ref,Y_stl);
+-
+-    Interface::vector_from_stl(X,X_stl);
+-    Interface::vector_from_stl(Y,Y_stl);
+-    
+-
+-  }
+-
+-  // invalidate copy ctor
+-
+-  Action_axpy( const  Action_axpy & )
+-  {
+-    INFOS("illegal call to Action_axpy Copy Ctor");
+-    exit(0);
+-  }
++  Action_axpy(int size);
+ 
+   // Dtor
++  ~Action_axpy();
+ 
+-  ~Action_axpy( void ){
+-
+-    MESSAGE("Action_axpy Dtor");
+-
+-    // deallocation
+-
+-    Interface::free_vector(X_ref);
+-    Interface::free_vector(Y_ref);
+-
+-    Interface::free_vector(X);
+-    Interface::free_vector(Y);
+-
+-
+-  }
+-  
+   // action name
+-
+-  static inline std::string name( void )
+-  {
+-    return "axpy_"+Interface::name();
++  static inline std::string name() {
++    return "axpy_" + Interface::name();
+   }
+ 
+-  double nb_op_base( void ){
++  double nb_op_base() {
+     return 2.0*_size;
+   }
+ 
+-  inline void initialize( void ){
+-
++  void initialize() {
+     Interface::copy_vector(X_ref,X,_size);
+     Interface::copy_vector(Y_ref,Y,_size);
+-    
+   }
+ 
+-  inline void calculate( void ) {
+-
+-      Interface::axpy(_coef,X,Y,_size);
+-
++  void calculate() {
++    Interface::axpy(_coef,X,Y,_size);
+   }
+ 
++  void check_result();
+ 
+-  void check_result( void ){
+-
+-    // calculation check
+-
+-    Interface::vector_to_stl(Y,resu_stl);
+-
+-    STL_interface<typename Interface::real_type>::axpy(_coef,X_stl,Y_stl,_size);
+-    
+-    typename Interface::real_type error=
+-      STL_interface<typename Interface::real_type>::norm_diff(Y_stl,resu_stl);
+- 
+-    if (error>1.e-6){
+-      INFOS("WRONG CALCULATION...residual=" << error);      
+-      exit(0);
+-    }
+-
+-  }
+-
+-private : 
+-
++private :
+   typename Interface::stl_vector X_stl;
+   typename Interface::stl_vector Y_stl;
+   typename Interface::stl_vector resu_stl;
+@@ -139,13 +72,59 @@
+   typename Interface::real_type _coef;
+ 
+   int _size;
++};
+ 
+-  
+ 
+-};
+-  
++/*
++ * Implementation
++ */
++template<class Interface>
++Action_axpy<Interface>::Action_axpy(int size)
++  : _coef(1.0), _size(size)
++{
++  MESSAGE("Action_axpy Ctor");
++
++  // STL vector initialization
++  init_vector<pseudo_random>(X_stl,_size);
++  init_vector<pseudo_random>(Y_stl,_size);
++  init_vector<null_function>(resu_stl,_size);
++
++  // generic matrix and vector initialization
++  Interface::vector_from_stl(X_ref,X_stl);
++  Interface::vector_from_stl(Y_ref,Y_stl);
++
++  Interface::vector_from_stl(X,X_stl);
++  Interface::vector_from_stl(Y,Y_stl);
++}
+ 
+-#endif
++template<class Interface>
++Action_axpy<Interface>::~Action_axpy()
++{
++  MESSAGE("Action_axpy Dtor");
++
++  // deallocation
++  Interface::free_vector(X_ref);
++  Interface::free_vector(Y_ref);
++
++  Interface::free_vector(X);
++  Interface::free_vector(Y);
++}
++
++template<class Interface>
++void Action_axpy<Interface>::check_result()
++{
++  // calculation check
++  Interface::vector_to_stl(Y,resu_stl);
+ 
++  STL_interface<typename Interface::real_type>::axpy(_coef,X_stl,Y_stl,_size);
+ 
++  typename Interface::real_type error=
++    STL_interface<typename Interface::real_type>::norm_diff(Y_stl,resu_stl);
+ 
++  if (error>1.e-6){
++    INFOS("WRONG CALCULATION...residual=" << error);
++    exit(0);
++  }
++}
++
++#endif
+diff -Nur BTL-20030124/actions/action_matrix_matrix_product.hh BTL/actions/action_matrix_matrix_product.hh
+--- BTL-20030124/actions/action_matrix_matrix_product.hh	2002-12-02 14:57:27.000000000 +0100
++++ BTL/actions/action_matrix_matrix_product.hh	2003-11-12 19:49:11.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  action_matrix_matrix_product.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef ACTION_MATRIX_MATRIX_PRODUCT
+ #define ACTION_MATRIX_MATRIX_PRODUCT
+ #include "utilities.h"
+@@ -26,109 +26,40 @@
+ #include "init/init_vector.hh"
+ #include "init/init_matrix.hh"
+ 
+-using namespace std;
+-
+ template<class Interface>
+-class Action_matrix_matrix_product {
+-
+-public :
++class Action_matrix_matrix_product
++{
++  Action_matrix_matrix_product(const Action_matrix_matrix_product &);
+ 
++public:
+   // Ctor
+-
+-  Action_matrix_matrix_product( int size ):_size(size)
+-  {
+-    MESSAGE("Action_matrix_matrix_product Ctor");
+-
+-    // STL matrix and vector initialization
+-
+-    init_matrix<pseudo_random>(A_stl,_size);
+-    init_matrix<pseudo_random>(B_stl,_size);
+-    init_matrix<null_function>(X_stl,_size);
+-    init_matrix<null_function>(resu_stl,_size);
+-
+-    // generic matrix and vector initialization
+-
+-    Interface::matrix_from_stl(A_ref,A_stl);
+-    Interface::matrix_from_stl(B_ref,B_stl);
+-    Interface::matrix_from_stl(X_ref,X_stl);
+-
+-    Interface::matrix_from_stl(A,A_stl);
+-    Interface::matrix_from_stl(B,B_stl);
+-    Interface::matrix_from_stl(X,X_stl);
+-
+-  }
+-
+-  // invalidate copy ctor
+-
+-  Action_matrix_matrix_product( const  Action_matrix_matrix_product & )
+-  {
+-    INFOS("illegal call to Action_matrix_matrix_product Copy Ctor");
+-    exit(0);
+-  }
++  Action_matrix_matrix_product(int size);
+ 
+   // Dtor
++  ~Action_matrix_matrix_product();
+ 
+-  ~Action_matrix_matrix_product( void ){
+-
+-    MESSAGE("Action_matrix_matrix_product Dtor");
+-
+-    // deallocation
+-
+-    Interface::free_matrix(A,_size);
+-    Interface::free_matrix(B,_size);
+-    Interface::free_matrix(X,_size);
+-
+-    Interface::free_matrix(A_ref,_size);
+-    Interface::free_matrix(B_ref,_size);
+-    Interface::free_matrix(X_ref,_size);
+-
+-  }
+-  
+   // action name
+-
+-  static inline std::string name( void )
+-  {
+-    return "matrix_matrix_"+Interface::name();
++  static inline std::string name() {
++    return "matrix_matrix_" + Interface::name();
+   }
+ 
+-  double nb_op_base( void ){
++  double nb_op_base() {
+     return 2.0*_size*_size*_size;
+   }
+ 
+-  inline void initialize( void ){
+-
++  void initialize() {
+     Interface::copy_matrix(A_ref,A,_size);
+     Interface::copy_matrix(B_ref,B,_size);
+     Interface::copy_matrix(X_ref,X,_size);
+-    
+   }
+ 
+-  inline void calculate( void ) {
+-
+-      Interface::matrix_matrix_product(A,B,X,_size);
+-
++  inline void calculate() {
++    Interface::matrix_matrix_product(A,B,X,_size);
+   }
+ 
+-  void check_result( void ){
+-
+-    // calculation check
+-
+-    Interface::matrix_to_stl(X,resu_stl);
+-
+-    STL_interface<typename Interface::real_type>::matrix_matrix_product(A_stl,B_stl,X_stl,_size);
+-    
+-    typename Interface::real_type error=
+-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
+- 
+-    if (error>1.e-6){
+-      INFOS("WRONG CALCULATION...residual=" << error);      
+-      exit(0);
+-    }
+-
+-  }
+-
+-private : 
++  void check_result();
+ 
++private :
+   typename Interface::stl_matrix A_stl;
+   typename Interface::stl_matrix B_stl;
+   typename Interface::stl_matrix X_stl;
+@@ -142,13 +73,66 @@
+   typename Interface::gene_matrix B;
+   typename Interface::gene_matrix X;
+ 
+-
+   int _size;
+-
+ };
+-  
+ 
+-#endif
+ 
++/*
++ * Implementation
++ */
++template<class Interface>
++Action_matrix_matrix_product<Interface>::Action_matrix_matrix_product(int size)
++  : _size(size)
++{
++  MESSAGE("Action_matrix_matrix_product Ctor");
++
++  // STL matrix and vector initialization
++  init_matrix<pseudo_random>(A_stl,_size);
++  init_matrix<pseudo_random>(B_stl,_size);
++  init_matrix<null_function>(X_stl,_size);
++  init_matrix<null_function>(resu_stl,_size);
++
++  // generic matrix and vector initialization
++  Interface::matrix_from_stl(A_ref,A_stl);
++  Interface::matrix_from_stl(B_ref,B_stl);
++  Interface::matrix_from_stl(X_ref,X_stl);
++
++  Interface::matrix_from_stl(A,A_stl);
++  Interface::matrix_from_stl(B,B_stl);
++  Interface::matrix_from_stl(X,X_stl);
++}
+ 
++template<class Interface>
++Action_matrix_matrix_product<Interface>::~Action_matrix_matrix_product()
++{
++  MESSAGE("Action_matrix_matrix_product Dtor");
++
++  // deallocation
++  Interface::free_matrix(A,_size);
++  Interface::free_matrix(B,_size);
++  Interface::free_matrix(X,_size);
++
++  Interface::free_matrix(A_ref,_size);
++  Interface::free_matrix(B_ref,_size);
++  Interface::free_matrix(X_ref,_size);
+ 
++}
++
++template<class Interface>
++void Action_matrix_matrix_product<Interface>::check_result()
++{
++  // calculation check
++  Interface::matrix_to_stl(X,resu_stl);
++
++  STL_interface<typename Interface::real_type>::matrix_matrix_product(A_stl,B_stl,X_stl,_size);
++
++  typename Interface::real_type error=
++    STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
++
++  if (error>1.e-6){
++    INFOS("WRONG CALCULATION...residual=" << error);
++    exit(0);
++  }
++}
++
++#endif
+diff -Nur BTL-20030124/actions/action_matrix_vector_product.hh BTL/actions/action_matrix_vector_product.hh
+--- BTL-20030124/actions/action_matrix_vector_product.hh	2002-12-02 14:58:57.000000000 +0100
++++ BTL/actions/action_matrix_vector_product.hh	2003-11-12 19:08:45.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  action_matrix_vector_product.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef ACTION_MATRIX_VECTOR_PRODUCT
+ #define ACTION_MATRIX_VECTOR_PRODUCT
+ #include "utilities.h"
+@@ -26,109 +26,40 @@
+ #include "init/init_vector.hh"
+ #include "init/init_matrix.hh"
+ 
+-using namespace std;
+-
+ template<class Interface>
+-class Action_matrix_vector_product {
++class Action_matrix_vector_product
++{
++  Action_matrix_vector_product(const Action_matrix_vector_product &);
+ 
+ public :
+-
+   // Ctor
+-
+-  Action_matrix_vector_product( int size ):_size(size)
+-  {
+-    MESSAGE("Action_matrix_vector_product Ctor");
+-
+-    // STL matrix and vector initialization
+-
+-    init_matrix<pseudo_random>(A_stl,_size);
+-    init_vector<pseudo_random>(B_stl,_size);
+-    init_vector<null_function>(X_stl,_size);
+-    init_vector<null_function>(resu_stl,_size);
+-
+-    // generic matrix and vector initialization
+-
+-    Interface::matrix_from_stl(A_ref,A_stl);
+-    Interface::vector_from_stl(B_ref,B_stl);
+-    Interface::vector_from_stl(X_ref,X_stl);
+-
+-    Interface::matrix_from_stl(A,A_stl);
+-    Interface::vector_from_stl(B,B_stl);
+-    Interface::vector_from_stl(X,X_stl);
+-
+-  }
+-
+-  // invalidate copy ctor
+-
+-  Action_matrix_vector_product( const  Action_matrix_vector_product & )
+-  {
+-    INFOS("illegal call to Action_matrix_vector_product Copy Ctor");
+-    exit(0);
+-  }
++  Action_matrix_vector_product(int size);
+ 
+   // Dtor
++  ~Action_matrix_vector_product();
+ 
+-  ~Action_matrix_vector_product( void ){
+-
+-    MESSAGE("Action_matrix_vector_product Dtor");
+-
+-    // deallocation
+-
+-    Interface::free_matrix(A,_size);
+-    Interface::free_vector(B);
+-    Interface::free_vector(X);
+-
+-    Interface::free_matrix(A_ref,_size);
+-    Interface::free_vector(B_ref);
+-    Interface::free_vector(X_ref);
+-
+-  }
+-  
+   // action name
+-
+-  static inline std::string name( void )
+-  {
+-    return "matrix_vector_"+Interface::name();
++  static inline std::string name() {
++    return "matrix_vector_" + Interface::name();
+   }
+ 
+-  double nb_op_base( void ){
++  double nb_op_base(){
+     return 2.0*_size*_size;
+   }
+ 
+-  inline void initialize( void ){
+-
++  void initialize() {
+     Interface::copy_matrix(A_ref,A,_size);
+     Interface::copy_vector(B_ref,B,_size);
+     Interface::copy_vector(X_ref,X,_size);
+-    
+-  }
+-
+-  inline void calculate( void ) {
+-
+-      Interface::matrix_vector_product(A,B,X,_size);
+-
+   }
+ 
+-  void check_result( void ){
+-
+-    // calculation check
+-
+-    Interface::vector_to_stl(X,resu_stl);
+-
+-    STL_interface<typename Interface::real_type>::matrix_vector_product(A_stl,B_stl,X_stl,_size);
+-    
+-    typename Interface::real_type error=
+-      STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
+- 
+-    if (error>1.e-6){
+-      INFOS("WRONG CALCULATION...residual=" << error);      
+-      exit(0);
+-    }
+-
++  inline void calculate() {
++    Interface::matrix_vector_product(A,B,X,_size);
+   }
+ 
+-private : 
++  void check_result();
+ 
++private:
+   typename Interface::stl_matrix A_stl;
+   typename Interface::stl_vector B_stl;
+   typename Interface::stl_vector X_stl;
+@@ -142,13 +73,71 @@
+   typename Interface::gene_vector B;
+   typename Interface::gene_vector X;
+ 
+-
+   int _size;
+-
+ };
+-  
+ 
+-#endif
+ 
++/*
++ * Implementation
++ */
++template<class Interface>
++Action_matrix_vector_product<Interface>::Action_matrix_vector_product( int size )
++  : _size(size)
++{
++  MESSAGE("Action_matrix_vector_product Ctor");
++
++  // STL matrix and vector initialization
++
++  init_matrix<pseudo_random>(A_stl,_size);
++  init_vector<pseudo_random>(B_stl,_size);
++  init_vector<null_function>(X_stl,_size);
++  init_vector<null_function>(resu_stl,_size);
++
++  // generic matrix and vector initialization
++
++  Interface::matrix_from_stl(A_ref,A_stl);
++  Interface::vector_from_stl(B_ref,B_stl);
++  Interface::vector_from_stl(X_ref,X_stl);
++
++  Interface::matrix_from_stl(A,A_stl);
++  Interface::vector_from_stl(B,B_stl);
++  Interface::vector_from_stl(X,X_stl);
++
++}
++
++template<class Interface>
++Action_matrix_vector_product<Interface>::~Action_matrix_vector_product()
++{
++
++  MESSAGE("Action_matrix_vector_product Dtor");
++
++  // deallocation
++
++  Interface::free_matrix(A,_size);
++  Interface::free_vector(B);
++  Interface::free_vector(X);
++
++  Interface::free_matrix(A_ref,_size);
++  Interface::free_vector(B_ref);
++  Interface::free_vector(X_ref);
++
++}
++
++template<class Interface>
++void Action_matrix_vector_product<Interface>::check_result()
++{
++  // calculation check
++  Interface::vector_to_stl(X,resu_stl);
++
++  STL_interface<typename Interface::real_type>::matrix_vector_product(A_stl,B_stl,X_stl,_size);
++
++  typename Interface::real_type error=
++    STL_interface<typename Interface::real_type>::norm_diff(X_stl,resu_stl);
+ 
++  if (error>1.e-6){
++    INFOS("WRONG CALCULATION...residual=" << error);
++    exit(0);
++  }
++}
+ 
++#endif
+diff -Nur BTL-20030124/data/aat.hh BTL/data/aat.hh
+--- BTL-20030124/data/aat.hh	2002-12-04 15:06:08.000000000 +0100
++++ BTL/data/aat.hh	2003-12-07 19:31:27.000000000 +0100
+@@ -1,21 +1,21 @@
+ #!/usr/bin/gnuplot -persist
+ #
+-#    
++#
+ #    	G N U P L O T
+ #    	Linux version 3.7
+ #    	patchlevel 0
+ #    	last modified Thu Jan 14 19:34:53 BST 1999
+-#    
++#
+ #    	Copyright(C) 1986 - 1993, 1998, 1999
+ #    	Thomas Williams, Colin Kelley and many others
+-#    
++#
+ #    	Type `help` to access the on-line reference manual
+ #    	The gnuplot FAQ is available from
+ #    		<http://www.uni-karlsruhe.de/~ig25/gnuplot-faq/>
+-#    
++#
+ #    	Send comments and requests for help to <info-gnuplot@dartmouth.edu>
+ #    	Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>
+-#    
++#
+ # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14
+ # set output 'bench_gcc.ps'
+ set noclip points
+@@ -76,9 +76,9 @@
+ set mytics default
+ set mx2tics default
+ set my2tics default
+-set xtics border mirror norotate autofreq 
+-set ytics border mirror norotate autofreq 
+-set ztics border nomirror norotate autofreq 
++set xtics border mirror norotate autofreq
++set ytics border mirror norotate autofreq
++set ztics border nomirror norotate autofreq
+ set nox2tics
+ set noy2tics
+ set title "A x At product " 0.000000,0.000000  ""
+@@ -104,5 +104,5 @@
+ set rmargin -1
+ set tmargin -1
+ set locale "C"
+-set xrange [10:1000]
++set xrange [1:100]
+ ##set yrange [0:400]
+diff -Nur BTL-20030124/data/ata.hh BTL/data/ata.hh
+--- BTL-20030124/data/ata.hh	2002-12-04 15:06:08.000000000 +0100
++++ BTL/data/ata.hh	2003-12-07 19:31:36.000000000 +0100
+@@ -1,21 +1,21 @@
+ #!/usr/bin/gnuplot -persist
+ #
+-#    
++#
+ #    	G N U P L O T
+ #    	Linux version 3.7
+ #    	patchlevel 0
+ #    	last modified Thu Jan 14 19:34:53 BST 1999
+-#    
++#
+ #    	Copyright(C) 1986 - 1993, 1998, 1999
+ #    	Thomas Williams, Colin Kelley and many others
+-#    
++#
+ #    	Type `help` to access the on-line reference manual
+ #    	The gnuplot FAQ is available from
+ #    		<http://www.uni-karlsruhe.de/~ig25/gnuplot-faq/>
+-#    
++#
+ #    	Send comments and requests for help to <info-gnuplot@dartmouth.edu>
+ #    	Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>
+-#    
++#
+ # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14
+ # set output 'bench_gcc.ps'
+ set noclip points
+@@ -76,9 +76,9 @@
+ set mytics default
+ set mx2tics default
+ set my2tics default
+-set xtics border mirror norotate autofreq 
+-set ytics border mirror norotate autofreq 
+-set ztics border nomirror norotate autofreq 
++set xtics border mirror norotate autofreq
++set ytics border mirror norotate autofreq
++set ztics border nomirror norotate autofreq
+ set nox2tics
+ set noy2tics
+ set title "At x A product " 0.000000,0.000000  ""
+@@ -104,5 +104,5 @@
+ set rmargin -1
+ set tmargin -1
+ set locale "C"
+-set xrange [10:1000]
++set xrange [1:100]
+ ##set yrange [0:400]
+diff -Nur BTL-20030124/data/axpy.hh BTL/data/axpy.hh
+--- BTL-20030124/data/axpy.hh	2003-01-06 11:07:11.000000000 +0100
++++ BTL/data/axpy.hh	2003-11-15 07:06:46.000000000 +0100
+@@ -1,21 +1,21 @@
+ #!/usr/bin/gnuplot -persist
+ #
+-#    
++#
+ #    	G N U P L O T
+ #    	Linux version 3.7
+ #    	patchlevel 0
+ #    	last modified Thu Jan 14 19:34:53 BST 1999
+-#    
++#
+ #    	Copyright(C) 1986 - 1993, 1998, 1999
+ #    	Thomas Williams, Colin Kelley and many others
+-#    
++#
+ #    	Type `help` to access the on-line reference manual
+ #    	The gnuplot FAQ is available from
+ #    		<http://www.uni-karlsruhe.de/~ig25/gnuplot-faq/>
+-#    
++#
+ #    	Send comments and requests for help to <info-gnuplot@dartmouth.edu>
+ #    	Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>
+-#    
++#
+ # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14
+ # set output 'bench_gcc.ps'
+ set noclip points
+@@ -76,9 +76,9 @@
+ set mytics default
+ set mx2tics default
+ set my2tics default
+-set xtics border mirror norotate autofreq 
+-set ytics border mirror norotate autofreq 
+-set ztics border nomirror norotate autofreq 
++set xtics border mirror norotate autofreq
++set ytics border mirror norotate autofreq
++set ztics border nomirror norotate autofreq
+ set nox2tics
+ set noy2tics
+ set title "Y+=alpha*X " 0.000000,0.000000  ""
+@@ -104,5 +104,5 @@
+ set rmargin -1
+ set tmargin -1
+ set locale "C"
+-set xrange [1:1000000]
++set xrange [1:100]
+ ##set yrange [0:550]
+diff -Nur BTL-20030124/data/matrix_matrix.hh BTL/data/matrix_matrix.hh
+--- BTL-20030124/data/matrix_matrix.hh	2003-01-06 11:08:38.000000000 +0100
++++ BTL/data/matrix_matrix.hh	2003-11-15 07:06:16.000000000 +0100
+@@ -1,21 +1,21 @@
+ #!/usr/bin/gnuplot -persist
+ #
+-#    
++#
+ #    	G N U P L O T
+ #    	Linux version 3.7
+ #    	patchlevel 0
+ #    	last modified Thu Jan 14 19:34:53 BST 1999
+-#    
++#
+ #    	Copyright(C) 1986 - 1993, 1998, 1999
+ #    	Thomas Williams, Colin Kelley and many others
+-#    
++#
+ #    	Type `help` to access the on-line reference manual
+ #    	The gnuplot FAQ is available from
+ #    		<http://www.uni-karlsruhe.de/~ig25/gnuplot-faq/>
+-#    
++#
+ #    	Send comments and requests for help to <info-gnuplot@dartmouth.edu>
+ #    	Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>
+-#    
++#
+ # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14
+ # set output 'bench_gcc.ps'
+ set noclip points
+@@ -76,9 +76,9 @@
+ set mytics default
+ set mx2tics default
+ set my2tics default
+-set xtics border mirror norotate autofreq 
+-set ytics border mirror norotate autofreq 
+-set ztics border nomirror norotate autofreq 
++set xtics border mirror norotate autofreq
++set ytics border mirror norotate autofreq
++set ztics border nomirror norotate autofreq
+ set nox2tics
+ set noy2tics
+ set title "matrix matrix product " 0.000000,0.000000  ""
+@@ -104,5 +104,5 @@
+ set rmargin -1
+ set tmargin -1
+ set locale "C"
+-set xrange [1:1000]
++set xrange [1:100]
+ ##set yrange [0:400]
+diff -Nur BTL-20030124/data/matrix_vector.hh BTL/data/matrix_vector.hh
+--- BTL-20030124/data/matrix_vector.hh	2003-01-06 11:08:29.000000000 +0100
++++ BTL/data/matrix_vector.hh	2003-11-15 07:06:24.000000000 +0100
+@@ -1,21 +1,21 @@
+ #!/usr/bin/gnuplot -persist
+ #
+-#    
++#
+ #    	G N U P L O T
+ #    	Linux version 3.7
+ #    	patchlevel 0
+ #    	last modified Thu Jan 14 19:34:53 BST 1999
+-#    
++#
+ #    	Copyright(C) 1986 - 1993, 1998, 1999
+ #    	Thomas Williams, Colin Kelley and many others
+-#    
++#
+ #    	Type `help` to access the on-line reference manual
+ #    	The gnuplot FAQ is available from
+ #    		<http://www.uni-karlsruhe.de/~ig25/gnuplot-faq/>
+-#    
++#
+ #    	Send comments and requests for help to <info-gnuplot@dartmouth.edu>
+ #    	Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>
+-#    
++#
+ # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14
+ # set output 'bench_gcc.ps'
+ set noclip points
+@@ -76,9 +76,9 @@
+ set mytics default
+ set mx2tics default
+ set my2tics default
+-set xtics border mirror norotate autofreq 
+-set ytics border mirror norotate autofreq 
+-set ztics border nomirror norotate autofreq 
++set xtics border mirror norotate autofreq
++set ytics border mirror norotate autofreq
++set ztics border nomirror norotate autofreq
+ set nox2tics
+ set noy2tics
+ set title "matrix vector product " 0.000000,0.000000  ""
+@@ -104,5 +104,5 @@
+ set rmargin -1
+ set tmargin -1
+ set locale "C"
+-set xrange [1:1000]
++set xrange [1:100]
+ ##set yrange [0:400]
+diff -Nur BTL-20030124/data/mk_gnuplot_script.sh BTL/data/mk_gnuplot_script.sh
+--- BTL-20030124/data/mk_gnuplot_script.sh	2003-01-10 11:52:01.000000000 +0100
++++ BTL/data/mk_gnuplot_script.sh	2003-11-30 14:56:49.000000000 +0100
+@@ -26,8 +26,8 @@
+ BASE=${LAST##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat}
+ echo "'"$LAST"'" title "'"$TITLE"'" >>  $WHAT.gnuplot
+ 
+-#echo set term postscript color >> $WHAT.gnuplot
+-#echo set output "'"$WHAT.ps"'" >> $WHAT.gnuplot
++echo set term postscript color >> $WHAT.gnuplot
++echo set output "'"$WHAT.ps"'" >> $WHAT.gnuplot
+ echo set term pbm small color >> $WHAT.gnuplot
+ echo set output "'"$WHAT.ppm"'" >> $WHAT.gnuplot
+ echo plot \\ >> $WHAT.gnuplot
+@@ -62,7 +62,3 @@
+ gnuplot -persist < $WHAT.gnuplot
+ 
+ rm $WHAT.gnuplot
+-
+-
+-
+-
+diff -Nur BTL-20030124/data/mk_mean_script.sh BTL/data/mk_mean_script.sh
+--- BTL-20030124/data/mk_mean_script.sh	2003-01-21 16:57:53.000000000 +0100
++++ BTL/data/mk_mean_script.sh	2003-11-30 15:10:01.000000000 +0100
+@@ -10,7 +10,7 @@
+ mkdir $WORK_DIR
+ 
+ DATA_FILE=`find $DIR -name "*.dat" | grep _${WHAT}`
+-echo 
++echo
+ for FILE in $DATA_FILE
+ do
+         ##echo hello world
+@@ -19,7 +19,7 @@
+ 
+ 	##echo "mk_mean_script1" ${TITLE}
+ 	cp $FILE ${WORK_DIR}/${TITLE}
+-	
++
+ done
+ 
+ cd $WORK_DIR
+@@ -29,11 +29,3 @@
+ cd ..
+ 
+ rm -R $WORK_DIR
+-
+-
+-
+-
+-
+-
+-
+-
+diff -Nur BTL-20030124/data/mk_new_gnuplot.sh BTL/data/mk_new_gnuplot.sh
+--- BTL-20030124/data/mk_new_gnuplot.sh	2003-01-10 12:02:58.000000000 +0100
++++ BTL/data/mk_new_gnuplot.sh	2003-11-30 15:58:09.000000000 +0100
+@@ -5,6 +5,7 @@
+ 
+ DATA_FILE=`cat ../order_lib`
+ 
++echo set grid xtics ytics mxtics mytics >> $WHAT.gnuplot
+ echo plot \\ >> $WHAT.gnuplot
+ 
+ for FILE in $DATA_FILE
+@@ -12,7 +13,21 @@
+     LAST=$FILE
+ done
+ 
++# GUI plot
++for FILE in $DATA_FILE
++do
++     if [ $FILE != $LAST ]
++     then
++	echo "'"$FILE"'" ",\\" >>  $WHAT.gnuplot
++     fi
++done
++echo "'"$LAST"'" >>  $WHAT.gnuplot
+ 
++# postscript plot
++echo set size 2,1.412 >> $WHAT.gnuplot
++echo set terminal postscript eps color \"Arial\" 24 >> $WHAT.gnuplot
++echo set output "'"../${DIR}/$WHAT.eps"'" >> $WHAT.gnuplot
++echo plot \\ >> $WHAT.gnuplot
+ for FILE in $DATA_FILE
+ do
+      if [ $FILE != $LAST ]
+@@ -22,10 +37,9 @@
+ done
+ echo "'"$LAST"'" >>  $WHAT.gnuplot
+ 
+-echo set term postscript color >> $WHAT.gnuplot
+-echo set output "'"../${DIR}/$WHAT.ps"'" >> $WHAT.gnuplot
+-#echo set term pbm color >> $WHAT.gnuplot
+-#echo set output "'"../${DIR}/$WHAT.ppm"'" >> $WHAT.gnuplot
++# png plot
++echo set terminal png small color >> $WHAT.gnuplot
++echo set output "'"../${DIR}/$WHAT.png"'" >> $WHAT.gnuplot
+ echo plot \\ >> $WHAT.gnuplot
+ for FILE in $DATA_FILE
+ do
+@@ -39,7 +53,3 @@
+ gnuplot -persist < $WHAT.gnuplot
+ 
+ rm $WHAT.gnuplot
+-
+-
+-
+-
+diff -Nur BTL-20030124/data/order_lib BTL/data/order_lib
+--- BTL-20030124/data/order_lib	1970-01-01 01:00:00.000000000 +0100
++++ BTL/data/order_lib	2003-12-07 19:31:44.000000000 +0100
+@@ -0,0 +1,7 @@
++ATLAS
++C
++ublas
++f77
++tvmet
++STL
++blitz
+diff -Nur BTL-20030124/generic_bench/bench.hh BTL/generic_bench/bench.hh
+--- BTL-20030124/generic_bench/bench.hh	2003-03-08 22:40:23.000000000 +0100
++++ BTL/generic_bench/bench.hh	2003-11-12 19:57:27.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  bench.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:16 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef BENCH_HH
+ #define BENCH_HH
+ #include "bench_parameter.hh"
+@@ -31,58 +31,47 @@
+ //#include "timers/x86_perf_analyzer.hh"
+ //#include "timers/STL_perf_analyzer.hh"
+ 
+-using namespace std;
+-
+-template <template<class> class Perf_Analyzer, class Action>
+-void bench( int size_min, int size_max, int nb_point ){
+-
+-  // bench name 
+-  
+-  string filename="bench_"+Action::name()+".dat";
++template <
++  template<class> class Perf_Analyzer,
++  class Action
++>
++void bench(int size_min, int size_max, int nb_point) {
++  // bench name
++  std::string filename="bench_" + Action::name() + ".dat";
+ 
+   INFOS("starting " <<filename);
+ 
+-  // utilities 
+-  
++  // utilities
+   std::vector<double> tab_mflops(nb_point);
+   std::vector<int> tab_sizes(nb_point);
+ 
+   // matrices and vector size calculations
+-
+-  size_lin_log(nb_point,size_min,size_max,tab_sizes);
++  size_lin_log(nb_point, size_min, size_max, tab_sizes);
+ 
+   // loop on matrix size
+-
+   Perf_Analyzer<Action> perf_action;
+ 
+-  for (int i=nb_point-1;i>=0;i--){
+-
++  for (int i = nb_point-1; i >= 0; i--) {
+     INFOS("size=" <<tab_sizes[i]<<"   ("<<nb_point-i<<"/"<<nb_point<<")");
+     tab_mflops[i]= perf_action.eval_mflops(tab_sizes[i]);
+-
+   }
+ 
+   // dump the result in a file  :
+-
+   dump_file_x_y(tab_sizes,tab_mflops,filename);
+-
+ }
+ 
+ // default Perf Analyzer
+-
+ template <class Action>
+-void bench( int size_min, int size_max, int nb_point ){
++void bench(int size_min, int size_max, int nb_point) {
+ 
+   // if the rdtsc is not available :
+-  bench<Portable_Perf_Analyzer,Action>(size_min,size_max,nb_point);
++  bench<Portable_Perf_Analyzer,Action>(size_min, size_max, nb_point);
+   // if the rdtsc is available :
+-  //  bench<Mixed_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-
++  // bench<Mixed_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+ 
+   // Only for small problem size. Otherwize it will be too long
+-  //bench<X86_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-  //bench<STL_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-
++  // bench<X86_Perf_Analyzer,Action>(size_min,size_max,nb_point);
++  // bench<STL_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+ }
+ 
+ #endif
+diff -Nur BTL-20030124/generic_bench/bench.hh~ BTL/generic_bench/bench.hh~
+--- BTL-20030124/generic_bench/bench.hh~	2003-03-13 15:36:19.000000000 +0100
++++ BTL/generic_bench/bench.hh~	1970-01-01 01:00:00.000000000 +0100
+@@ -1,88 +0,0 @@
+-//=====================================================
+-// File   :  bench.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
+-// Copyright (C) EDF R&D,  lun sep 30 14:23:16 CEST 2002
+-//=====================================================
+-// 
+-// 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
+-// 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, write to the Free Software
+-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
+-#ifndef BENCH_HH
+-#define BENCH_HH
+-#include "bench_parameter.hh"
+-#include <iostream>
+-#include "utilities.h"
+-#include "size_lin_log.hh"
+-#include "dump_file_x_y.hh"
+-#include <vector>
+-#include <string>
+-#include "timers/portable_perf_analyzer.hh"
+-#include "timers/mixed_perf_analyzer.hh"
+-#include "timers/x86_perf_analyzer.hh"
+-#include "timers/STL_perf_analyzer.hh"
+-
+-using namespace std;
+-
+-template <template<class> class Perf_Analyzer, class Action>
+-void bench( int size_min, int size_max, int nb_point ){
+-
+-  // bench name 
+-  
+-  string filename="bench_"+Action::name()+".dat";
+-
+-  INFOS("starting " <<filename);
+-
+-  // utilities 
+-  
+-  std::vector<double> tab_mflops(nb_point);
+-  std::vector<int> tab_sizes(nb_point);
+-
+-  // matrices and vector size calculations
+-
+-  size_lin_log(nb_point,size_min,size_max,tab_sizes);
+-
+-  // loop on matrix size
+-
+-  Perf_Analyzer<Action> perf_action;
+-
+-  for (int i=nb_point-1;i>=0;i--){
+-
+-    INFOS("size=" <<tab_sizes[i]<<"   ("<<nb_point-i<<"/"<<nb_point<<")");
+-    tab_mflops[i]= perf_action.eval_mflops(tab_sizes[i]);
+-
+-  }
+-
+-  // dump the result in a file  :
+-
+-  dump_file_x_y(tab_sizes,tab_mflops,filename);
+-
+-}
+-
+-// default Perf Analyzer
+-
+-template <class Action>
+-void bench( int size_min, int size_max, int nb_point ){
+-
+-  // if the rdtsc is not available :
+-  //bench<Portable_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-  // if the rdtsc is available :
+-  bench<Mixed_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-
+-
+-  // Only for small problem size. Otherwize it will be too long
+-  //bench<X86_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-  //bench<STL_Perf_Analyzer,Action>(size_min,size_max,nb_point);
+-
+-}
+-
+-#endif
+diff -Nur BTL-20030124/generic_bench/bench_parameter.hh BTL/generic_bench/bench_parameter.hh
+--- BTL-20030124/generic_bench/bench_parameter.hh	2003-03-17 14:42:37.000000000 +0100
++++ BTL/generic_bench/bench_parameter.hh	2003-11-13 21:37:12.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  bench_parameter.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:16 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,34 +16,34 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef BENCH_PARAMETER_HH
+ #define BENCH_PARAMETER_HH
+ 
+ // minimal time for each measurement
+ #define REAL_TYPE double
+ // minimal time for each measurement
+-#define MIN_TIME 2.0 
++#define MIN_TIME 2.0
+ // nb of point on bench curves
+-#define NB_POINT 100
++#define NB_POINT 20
+ // min vector size for axpy bench
+ #define MIN_AXPY 20
+ // max vector size for axpy bench
+-#define MAX_AXPY 1000000
++#define MAX_AXPY 100
+ // min matrix size for matrix vector product bench
+-#define MIN_MV 10
++#define MIN_MV 1
+ // max matrix size for matrix vector product bench
+-#define MAX_MV 1000
++#define MAX_MV 100
+ // min matrix size for matrix matrix product bench
+-#define MIN_MM 10
++#define MIN_MM 1
+ // max matrix size for matrix matrix product bench
+-#define MAX_MM 1000
++#define MAX_MM 100
+ // min matrix size for LU bench
+-#define MIN_LU 10
++#define MIN_LU 1
+ // max matrix size for LU bench
+-#define MAX_LU 1000
++#define MAX_LU 100
+ // max size for tiny vector and matrix
+-#define TINY_MV_MAX_SIZE 5
++#define TINY_MV_MAX_SIZE 10
+ // default nb_sample for x86 timer
+ #define DEFAULT_NB_SAMPLE 1000
+ 
+diff -Nur BTL-20030124/generic_bench/bench_parameter.hh~ BTL/generic_bench/bench_parameter.hh~
+--- BTL-20030124/generic_bench/bench_parameter.hh~	2003-03-08 22:39:52.000000000 +0100
++++ BTL/generic_bench/bench_parameter.hh~	1970-01-01 01:00:00.000000000 +0100
+@@ -1,52 +0,0 @@
+-//=====================================================
+-// File   :  bench_parameter.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
+-// Copyright (C) EDF R&D,  lun sep 30 14:23:16 CEST 2002
+-//=====================================================
+-// 
+-// 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
+-// 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, write to the Free Software
+-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
+-#ifndef BENCH_PARAMETER_HH
+-#define BENCH_PARAMETER_HH
+-
+-// minimal time for each measurement
+-#define REAL_TYPE double
+-// minimal time for each measurement
+-#define MIN_TIME 2.0 
+-// nb of point on bench curves
+-#define NB_POINT 100
+-// min vector size for axpy bench
+-#define MIN_AXPY 20
+-// max vector size for axpy bench
+-#define MAX_AXPY 1000000
+-// min matrix size for matrix vector product bench
+-#define MIN_MV 10
+-// max matrix size for matrix vector product bench
+-#define MAX_MV 1000
+-// min matrix size for matrix matrix product bench
+-#define MIN_MM 10
+-// max matrix size for matrix matrix product bench
+-#define MAX_MM 1000
+-// min matrix size for LU bench
+-#define MIN_LU 10
+-// max matrix size for LU bench
+-#define MAX_LU 1000
+-// max size for tiny vector and matrix
+-#define TINY_MV_MAX_SIZE 10
+-// default nb_sample for x86 timer
+-#define DEFAULT_NB_SAMPLE 1000
+-
+-
+-
+-#endif
+diff -Nur BTL-20030124/generic_bench/init/init_function.hh BTL/generic_bench/init/init_function.hh
+--- BTL-20030124/generic_bench/init/init_function.hh	2002-11-21 16:04:06.000000000 +0100
++++ BTL/generic_bench/init/init_function.hh	2003-10-31 21:41:10.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  init_function.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:18 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef INIT_FUNCTION_HH
+ #define INIT_FUNCTION_HH
+ 
+@@ -30,24 +30,24 @@
+   return index_i+index_j;
+ }
+ 
+-double pseudo_random(int index)
++double pseudo_random(int /* index */)
+ {
+   //  INFOS("random="<<(std::rand()/double(RAND_MAX)));
+   return std::rand()/double(RAND_MAX);
+ }
+ 
+-double pseudo_random(int index_i, int index_j)
++double pseudo_random(int /* index_i */, int /* index_j */)
+ {
+   return std::rand()/double(RAND_MAX);
+ }
+ 
+ 
+-double null_function(int index)
++double null_function(int /* index */)
+ {
+   return 0.0;
+ }
+ 
+-double null_function(int index_i, int index_j)
++double null_function(int /* index_i */, int /* index_j */)
+ {
+   return 0.0;
+ }
+diff -Nur BTL-20030124/generic_bench/init/init_matrix.hh BTL/generic_bench/init/init_matrix.hh
+--- BTL-20030124/generic_bench/init/init_matrix.hh	2002-11-21 16:04:06.000000000 +0100
++++ BTL/generic_bench/init/init_matrix.hh	2003-11-02 11:44:15.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  init_matrix.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:19 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef INIT_MATRIX_HH
+ #define INIT_MATRIX_HH
+ 
+@@ -29,7 +29,7 @@
+ 
+   X.resize(size);
+ 
+-  for (int j=0;j<X.size();j++){
++  for (unsigned j=0;j<X.size();j++){
+     X[j]=typename Vector::value_type(init_function(row,j));
+   }
+ }
+@@ -43,11 +43,11 @@
+ void init_matrix(Vector &  A, int size){
+ 
+   A.resize(size);
+-  for (int row=0; row<A.size() ; row++){
++  for (unsigned row=0; row<A.size() ; row++){
+     init_row<init_function>(A[row],size,row);
+   }
+-  
+-  
++
++
+ }
+ 
+ #endif
+diff -Nur BTL-20030124/generic_bench/init/init_vector.hh BTL/generic_bench/init/init_vector.hh
+--- BTL-20030124/generic_bench/init/init_vector.hh	2002-11-21 16:04:06.000000000 +0100
++++ BTL/generic_bench/init/init_vector.hh	2003-11-11 19:30:52.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  init_vector.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:18 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef INIT_VECTOR_HH
+ #define INIT_VECTOR_HH
+ 
+@@ -29,7 +29,7 @@
+ 
+   X.resize(size);
+ 
+-  for (int i=0;i<X.size();i++){
++  for (unsigned i=0;i<X.size();i++){
+     X[i]=typename Vector::value_type(init_function(i));
+   }
+ }
+diff -Nur BTL-20030124/generic_bench/static/bench_static.hh BTL/generic_bench/static/bench_static.hh
+--- BTL-20030124/generic_bench/static/bench_static.hh	2003-01-24 16:22:02.000000000 +0100
++++ BTL/generic_bench/static/bench_static.hh	2003-11-13 21:10:29.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  bench_static.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:16 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef BENCH_STATIC_HH
+ #define BENCH_STATIC_HH
+ #include "bench_parameter.hh"
+@@ -28,51 +28,41 @@
+ #include "timers/mixed_perf_analyzer.hh"
+ #include "timers/x86_perf_analyzer.hh"
+ 
+-using namespace std;
+-
+-
+-template <template<class> class Perf_Analyzer, template<class> class Action, template<class,int> class Interface> 
+-void bench_static( void ){
+-
+-  string filename="bench_"+Action<Interface<REAL_TYPE,10> >::name()+".dat";
++template <
++  template<class> class Perf_Analyzer,
++  template<class> class Action,
++  template<class, int> class Interface,
++  unsigned Sz
++>
++void bench_static()
++{
++  std::string filename="bench_" + Action<Interface<REAL_TYPE,10> >::name() + ".dat";
+ 
+   INFOS("starting " <<filename);
+ 
+-  const int max_size=TINY_MV_MAX_SIZE;
+-
+   std::vector<double> tab_mflops;
+   std::vector<double> tab_sizes;
+ 
+-  static_size_generator<max_size,Perf_Analyzer,Action,Interface>::go(tab_sizes,tab_mflops);
+-
+-  dump_file_x_y(tab_sizes,tab_mflops,filename);
++  static_size_generator<Sz, Perf_Analyzer, Action, Interface>::go(tab_sizes, tab_mflops);
+ 
++  dump_file_x_y(tab_sizes, tab_mflops, filename);
+ }
+ 
+ // default Perf Analyzer
++template <
++  template<class> class Action,
++  template<class, int> class Interface,
++  unsigned Sz
++>
++void bench_static()
++{
++  // if the rdtsc is not available :
++  bench_static<Portable_Perf_Analyzer, Action, Interface, Sz>();
++  // if the rdtsc is available :
++  // bench_static<Mixed_Perf_Analyzer,Action,Interface, Sz>();
+ 
+-template <template<class> class Action, template<class,int> class Interface> 
+-void bench_static( void ){
+-
+-  bench_static<Portable_Perf_Analyzer,Action,Interface>();
+-  //bench_static<Mixed_Perf_Analyzer,Action,Interface>();
+-  //bench_static<X86_Perf_Analyzer,Action,Interface>();
+-
++  // Only for small problem size. Otherwize it will be too long
++  // bench_static<X86_Perf_Analyzer,Action,Interface, Sz>();
+ }
+ 
+ #endif
+-
+-
+-
+-
+-
+-
+-
+-
+- 
+-
+-    
+-
+-
+-    
+-    
+diff -Nur BTL-20030124/generic_bench/static/static_size_generator.hh BTL/generic_bench/static/static_size_generator.hh
+--- BTL-20030124/generic_bench/static/static_size_generator.hh	2003-01-09 14:33:50.000000000 +0100
++++ BTL/generic_bench/static/static_size_generator.hh	2003-11-12 18:26:52.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  static_size_generator.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  mar déc 3 18:59:36 CET 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,41 +16,47 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef _STATIC_SIZE_GENERATOR_HH
+ #define _STATIC_SIZE_GENERATOR_HH
+-#include <vector>
+ 
+-using namespace std;
++#include <vector>
+ 
+ //recursive generation of statically defined matrix and vector sizes
+-
+-template <int SIZE,template<class> class Perf_Analyzer, template<class> class Action, template<class,int> class Interface> 
+-struct static_size_generator{
+-  static  void go(vector<double> & tab_sizes, vector<double> & tab_mflops)
++template <
++  int SIZE,
++  template<class> class Perf_Analyzer,
++  template<class> class Action,
++  template<class, int> class Interface
++>
++struct static_size_generator
++{
++  static void go(std::vector<double>& tab_sizes, std::vector<double>& tab_mflops)
+   {
+     tab_sizes.push_back(SIZE);
+ 
+     Perf_Analyzer<Action<Interface<REAL_TYPE,SIZE> > > perf_action;
+     tab_mflops.push_back(perf_action.eval_mflops(SIZE));
+-    static_size_generator<SIZE-1,Perf_Analyzer,Action,Interface>::go(tab_sizes,tab_mflops);
++
++    static_size_generator<SIZE-1, Perf_Analyzer, Action, Interface>::go(tab_sizes,tab_mflops);
+   };
+ };
+ 
+ //recursion end
+-
+-template <template<class> class Perf_Analyzer, template<class> class Action, template<class,int> class Interface> 
+-struct static_size_generator<1,Perf_Analyzer,Action,Interface>{  
+-  static  void go(vector<double> & tab_sizes, vector<double> & tab_mflops)
++template <
++  template<class> class Perf_Analyzer,
++  template<class> class Action,
++  template<class, int> class Interface
++>
++struct static_size_generator<1, Perf_Analyzer, Action, Interface>
++{
++  static void go(std::vector<double>& tab_sizes, std::vector<double>& tab_mflops)
+   {
+     tab_sizes.push_back(1);
++
+     Perf_Analyzer<Action<Interface<REAL_TYPE,1> > > perf_action;
+     tab_mflops.push_back(perf_action.eval_mflops(1));
+   };
+ };
+ 
+ #endif
+-  
+-  
+-  
+-  
+diff -Nur BTL-20030124/generic_bench/timers/portable_perf_analyzer.hh BTL/generic_bench/timers/portable_perf_analyzer.hh
+--- BTL-20030124/generic_bench/timers/portable_perf_analyzer.hh	2003-01-15 11:06:09.000000000 +0100
++++ BTL/generic_bench/timers/portable_perf_analyzer.hh	2003-11-12 20:09:14.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  portable_perf_analyzer.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  mar déc 3 18:59:35 CET 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef _PORTABLE_PERF_ANALYZER_HH
+ #define _PORTABLE_PERF_ANALYZER_HH
+ 
+@@ -24,111 +24,118 @@
+ #include "timers/portable_timer.hh"
+ 
+ template <class Action>
+-class Portable_Perf_Analyzer{
+-public:  
+-  Portable_Perf_Analyzer( void ):_nb_calc(1),_nb_init(1),_chronos(){
+-    MESSAGE("Portable_Perf_Analyzer Ctor");
+-  };
+-  Portable_Perf_Analyzer( const Portable_Perf_Analyzer & ){
+-    INFOS("Copy Ctor not implemented");
+-    exit(0);
+-  };
+-  ~Portable_Perf_Analyzer( void ){
+-    MESSAGE("Portable_Perf_Analyzer Dtor");
+-  };
+-  
+-
+-
+-  inline double eval_mflops(int size)
+-  {
+-  
+-    Action action(size);
+-    
+-    double time_baseline=time_init(action);
+-    
+-    while (time_baseline < MIN_TIME) {
+-      
+-      _nb_init*=2;
+-      time_baseline=time_init(action);
+-    }
+-    
+-    time_baseline=time_baseline/(double(_nb_init));
+-    
+-    double time_action=time_calculate(action);
+-    
+-    while (time_action < MIN_TIME) {
+-      
+-      _nb_calc*=2;
+-      time_action=time_calculate(action);
+-    }
+-    
+-  //   INFOS("size="<<size);
+-//     INFOS("_nb_init="<<_nb_init);
+-//     INFOS("_nb_calc="<<_nb_calc);
+-    
+-    
+-    time_action=time_action/(double(_nb_calc));
+-    
+-    action.check_result();
+-    
+-//     INFOS("time_baseline="<<time_baseline);  
+-//     INFOS("time_action="<<time_action);  
+-    
+-    
+-    time_action=time_action-time_baseline;
+-    
+-//     INFOS("time_corrected="<<time_action);  
+-    
+-    return action.nb_op_base()/(time_action*1000000.0);
+-  }
++class Portable_Perf_Analyzer
++{
++  Portable_Perf_Analyzer(const Portable_Perf_Analyzer&);
+ 
+-  inline double time_init(Action & action)
+-  {
+-    
+-    // time measurement
+-
+-    _chronos.start();
+-    
+-    for (int ii=0;ii<_nb_init;ii++){
+-
+-      action.initialize();
+-
+-    }
+-  
+-    _chronos.stop();
++public:
++  Portable_Perf_Analyzer();
+ 
+-    return _chronos.user_time();
+-  }
++  ~Portable_Perf_Analyzer();
+ 
++  double eval_mflops(int size);
+ 
+-  inline double time_calculate(Action & action){
+-  
+-    // time measurement
+-
+-    _chronos.start();
+-
+-    for (int ii=0;ii<_nb_calc;ii++){
+-
+-      action.initialize();
+-      action.calculate();
+-      
+-    }
+-  
+-    _chronos.stop();
+-  
+-    return _chronos.user_time();
+-  }
++  double time_init(Action& action);
+ 
+-  unsigned long long get_nb_calc( void ){
++  double time_calculate(Action& action);
++
++  unsigned long long get_nb_calc() {
+     return _nb_calc;
+   }
+ 
+-
+ private:
+   unsigned long long _nb_calc;
+   unsigned long long _nb_init;
+   Portable_Timer _chronos;
+-  
+ };
+ 
++
++/*
++ * Implementation
++ */
++template <class Action>
++Portable_Perf_Analyzer<Action>::Portable_Perf_Analyzer()
++  : _nb_calc(1), _nb_init(1), _chronos()
++{
++  MESSAGE("Portable_Perf_Analyzer Ctor");
++};
++
++template <class Action>
++Portable_Perf_Analyzer<Action>::~Portable_Perf_Analyzer()
++{
++  MESSAGE("Portable_Perf_Analyzer Dtor");
++};
++
++template <class Action>
++double Portable_Perf_Analyzer<Action>::time_init(Action& action)
++{
++  // time measurement
++  _chronos.start();
++
++  for (unsigned ii = 0; ii < _nb_init; ii++){
++    action.initialize();
++  }
++
++  _chronos.stop();
++
++  return _chronos.user_time();
++}
++
++template <class Action>
++double Portable_Perf_Analyzer<Action>::time_calculate(Action& action)
++{
++  // time measurement
++  _chronos.start();
++
++  for (unsigned ii = 0; ii <_nb_calc; ii++) {
++    // the measured bench self
++    action.initialize();
++    action.calculate();
++  }
++
++  _chronos.stop();
++
++  return _chronos.user_time();
++}
++
++template <class Action>
++double Portable_Perf_Analyzer<Action>::eval_mflops(int size)
++{
++  Action action(size);
++
++  double time_baseline = time_init(action);
++
++  while (time_baseline < MIN_TIME) {
++    _nb_init*=2;
++    time_baseline=time_init(action);
++  }
++
++  time_baseline=time_baseline/(double(_nb_init));
++
++  // perform the benchmark timing
++  double time_action=time_calculate(action);
++
++  while (time_action < MIN_TIME) {
++    _nb_calc*=2;
++    time_action=time_calculate(action);
++  }
++
++  // INFOS("size="<<size);
++  // INFOS("_nb_init="<<_nb_init);
++  // INFOS("_nb_calc="<<_nb_calc);
++
++  time_action=time_action/(double(_nb_calc));
++
++  action.check_result();
++
++  // INFOS("time_baseline="<<time_baseline);
++  // INFOS("time_action="<<time_action);
++
++  time_action=time_action-time_baseline;
++
++  // INFOS("time_corrected="<<time_action);
++
++  return action.nb_op_base()/(time_action*1000000.0);
++}
++
+ #endif //_PORTABLE_PERF_ANALYZER_HH
+diff -Nur BTL-20030124/generic_bench/timers/portable_timer.hh~ BTL/generic_bench/timers/portable_timer.hh~
+--- BTL-20030124/generic_bench/timers/portable_timer.hh~	2002-12-03 19:01:18.000000000 +0100
++++ BTL/generic_bench/timers/portable_timer.hh~	1970-01-01 01:00:00.000000000 +0100
+@@ -1,103 +0,0 @@
+-//=====================================================
+-// File   :  portable_timer.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)> from boost lib
+-// Copyright (C) EDF R&D,  lun sep 30 14:23:17 CEST 2002
+-//=====================================================
+-// 
+-// 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
+-// 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, write to the Free Software
+-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
+-//  simple_time extracted from the boost library
+-//  
+-#ifndef _PORTABLE_TIMER_HH
+-#define _PORTABLE_TIMER_HH
+-
+-#include <time.h>
+-#include <sys/time.h>
+-#include <sys/resource.h>
+-#include <unistd.h>
+-#include <sys/times.h>
+-
+-#define USEC_IN_SEC 1000000
+-
+-
+-//  timer  -------------------------------------------------------------------//
+-
+-//  A timer object measures CPU time.
+-
+-class Portable_Timer
+-{
+- public:
+-
+-  Portable_Timer( void ):_utime_sec_start(-1),
+-		_utime_usec_start(-1),
+-		_utime_sec_stop(-1),
+-		_utime_usec_stop(-1)
+-  {
+-  }
+-    
+-
+-  void   start() 
+-  { 
+-    
+-    int status=getrusage(RUSAGE_SELF, &resourcesUsage) ;
+-    
+-    _start_time = std::clock(); 
+-
+-    _utime_sec_start  =  resourcesUsage.ru_utime.tv_sec ;
+-    _utime_usec_start =  resourcesUsage.ru_utime.tv_usec ;
+-
+-  }
+-  
+-  void stop() 
+-  { 
+-    
+-    int status=getrusage(RUSAGE_SELF, &resourcesUsage) ;
+-    
+-    _stop_time = std::clock(); 
+-    
+-    _utime_sec_stop  =  resourcesUsage.ru_utime.tv_sec ;
+-    _utime_usec_stop =  resourcesUsage.ru_utime.tv_usec ;
+-    
+-  }
+-
+-  double elapsed()
+-  {
+-    return  double(_stop_time - _start_time) / CLOCKS_PER_SEC; 
+-  }
+-  
+-  double user_time()
+-  {
+-    long tot_utime_sec=_utime_sec_stop-_utime_sec_start;
+-    long tot_utime_usec=_utime_usec_stop-_utime_usec_start;
+-    return double(tot_utime_sec)+ double(tot_utime_usec)/double(USEC_IN_SEC) ;
+-  }
+-
+-  
+-private:
+-
+-  struct rusage resourcesUsage ;
+-  
+-  long _utime_sec_start ;
+-  long _utime_usec_start ;
+-  
+-  long _utime_sec_stop ;
+-  long _utime_usec_stop ;
+-  
+-  std::clock_t _start_time;
+-  std::clock_t _stop_time;
+-
+-}; // Portable_Timer
+-
+-
+-#endif  // PORTABLE_TIMER_HPP
+diff -Nur BTL-20030124/generic_bench/timers/x86_timer.hh BTL/generic_bench/timers/x86_timer.hh
+--- BTL-20030124/generic_bench/timers/x86_timer.hh	2003-01-21 12:51:35.000000000 +0100
++++ BTL/generic_bench/timers/x86_timer.hh	2003-10-30 19:10:04.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  x86_timer.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  mar déc 3 18:59:35 CET 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef _X86_TIMER_HH
+ #define _X86_TIMER_HH
+ 
+@@ -46,7 +46,7 @@
+ 
+   X86_Timer( void ):_frequency(FREQUENCY),_nb_sample(0)
+   {
+-    MESSAGE("X86_Timer Default Ctor");    
++    MESSAGE("X86_Timer Default Ctor");
+   }
+ 
+   inline void start( void ){
+@@ -61,7 +61,7 @@
+     rdtsc(_click_stop.n32[0],_click_stop.n32[1]);
+ 
+   }
+-  
++
+ 
+   inline double frequency( void ){
+     return _frequency;
+@@ -72,13 +72,13 @@
+     return (_click_stop.n64-_click_start.n64)/double(FREQUENCY);
+ 
+ 
+-  }    
++  }
+ 
+   unsigned long long  get_click( void ){
+-    
++
+     return (_click_stop.n64-_click_start.n64);
+ 
+-  }    
++  }
+ 
+   inline void find_frequency( void ){
+ 
+@@ -103,70 +103,70 @@
+     //    INFOS("fine grained time : "<<  get_elapsed_time_in_second());
+     //  INFOS("coarse grained time : "<<  final-initial);
+     _frequency=_frequency*get_elapsed_time_in_second()/double(final-initial);
+-    ///  INFOS("CPU frequency : "<<  _frequency);        
++    ///  INFOS("CPU frequency : "<<  _frequency);
+ 
+   }
+ 
+   void  add_get_click( void ){
+-       
++
+     _nb_sample++;
+     _counted_clicks[get_click()]++;
+     fill_history_clicks();
+ 
+-  }    
++  }
+ 
+   void dump_statistics(string filemane){
+-    
++
+     ofstream outfile (filemane.c_str(),ios::out) ;
+ 
+     std::map<unsigned long long , unsigned long long>::iterator itr;
+     for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
+-      {      
+-      outfile  << (*itr).first << "  " << (*itr).second << endl ;       
+-      }      
+-    
++      {
++      outfile  << (*itr).first << "  " << (*itr).second << endl ;
++      }
++
+     outfile.close();
+ 
+   }
+ 
+   void dump_history(string filemane){
+-    
++
+     ofstream outfile (filemane.c_str(),ios::out) ;
+ 
+ 
+ 
+-    for(int i=0 ; i<_history_mean_clicks.size() ; i++)
+-      {      
+-	outfile  << i << " " 
+-		 << _history_mean_clicks[i] << " " 
+-		 << _history_shortest_clicks[i] << " " 
++    for(unsigned i=0 ; i<_history_mean_clicks.size() ; i++)
++      {
++	outfile  << i << " "
++		 << _history_mean_clicks[i] << " "
++		 << _history_shortest_clicks[i] << " "
+ 		 << _history_most_occured_clicks[i] << endl ;
+-      }      
+-    
++      }
++
+     outfile.close();
+ 
+   }
+-     
++
+ 
+ 
+   double get_mean_clicks( void ){
+-    
++
+     std::map<unsigned long long,unsigned long long>::iterator itr;
+-    
++
+     unsigned long long mean_clicks=0;
+ 
+     for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
+-      {      
+-	
++      {
++
+ 	mean_clicks+=(*itr).second*(*itr).first;
+-      }      
++      }
+ 
+     return mean_clicks/double(_nb_sample);
+ 
+   }
+ 
+   double get_shortest_clicks( void ){
+-    
++
+     return double((*_counted_clicks.begin()).first);
+ 
+   }
+@@ -188,18 +188,18 @@
+     std::map<unsigned long long,unsigned long long>::iterator itr;
+ 
+     for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
+-      {      
+-	
++      {
++
+ 	if (max_occurence<=(*itr).second){
+ 	  max_occurence=(*itr).second;
+ 	  moc=(*itr).first;
+ 	}
+-      }      
+-    
+-    return double(moc);    
++      }
++
++    return double(moc);
+ 
+   }
+-  
++
+   void clear( void )
+   {
+     _counted_clicks.clear();
+@@ -212,9 +212,9 @@
+   }
+ 
+ 
+-    
++
+ private :
+-  
++
+   union
+   {
+     unsigned long int n32[2] ;
+@@ -237,7 +237,7 @@
+ 
+   unsigned long long _nb_sample;
+ 
+-  
++
+ 
+ };
+ 
+diff -Nur BTL-20030124/generic_bench/timers/x86_timer.hh~ BTL/generic_bench/timers/x86_timer.hh~
+--- BTL-20030124/generic_bench/timers/x86_timer.hh~	2003-01-07 17:31:58.000000000 +0100
++++ BTL/generic_bench/timers/x86_timer.hh~	1970-01-01 01:00:00.000000000 +0100
+@@ -1,245 +0,0 @@
+-//=====================================================
+-// File   :  x86_timer.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
+-// Copyright (C) EDF R&D,  mar déc 3 18:59:35 CET 2002
+-//=====================================================
+-// 
+-// 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
+-// 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, write to the Free Software
+-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
+-#ifndef _X86_TIMER_HH
+-#define _X86_TIMER_HH
+-
+-#include <sys/time.h>
+-#include <sys/resource.h>
+-#include <unistd.h>
+-#include <sys/times.h>
+-//#include "system_time.h"
+-#include <asm/msr.h>
+-#include "utilities.h"
+-#include <map>
+-#include <fstream>
+-#include <string>
+-#include <iostream>
+-
+-// frequence de la becanne en Hz
+-//#define FREQUENCY 648000000
+-//#define FREQUENCY 1400000000
+-#define FREQUENCY 1695000000
+-
+-using namespace std;
+-
+-
+-class X86_Timer {
+-
+-public :
+-
+-  X86_Timer( void ):_frequency(FREQUENCY),_nb_sample(0)
+-  {
+-    MESSAGE("X86_Timer Default Ctor");    
+-  }
+-
+-  inline void start( void ){
+-
+-    rdtsc(_click_start.n32[0],_click_start.n32[1]);
+-
+-  }
+-
+-
+-  inline void stop( void ){
+-
+-    rdtsc(_click_stop.n32[0],_click_stop.n32[1]);
+-
+-  }
+-  
+-
+-  inline double frequency( void ){
+-    return _frequency;
+-  }
+-
+-  double get_elapsed_time_in_second( void ){
+-
+-    return (_click_stop.n64-_click_start.n64)/double(FREQUENCY);
+-
+-
+-  }    
+-
+-  unsigned long long  get_click( void ){
+-    
+-    return (_click_stop.n64-_click_start.n64);
+-
+-  }    
+-
+-  inline void find_frequency( void ){
+-
+-    time_t initial, final;
+-    int dummy=2;
+-
+-    initial = time(0);
+-    start();
+-    do {
+-      dummy+=2;
+-    }
+-    while(time(0)==initial);
+-    // On est au debut d'un cycle d'une seconde !!!
+-    initial = time(0);
+-    start();
+-    do {
+-      dummy+=2;
+-    }
+-    while(time(0)==initial);
+-    final=time(0);
+-    stop();
+-    INFOS("fine grained time : "<<  get_elapsed_time_in_second());
+-    INFOS("coarse grained time : "<<  final-initial);
+-    _frequency=_frequency*get_elapsed_time_in_second()/double(final-initial);
+-    INFOS("CPU frequency : "<<  _frequency);        
+-
+-  }
+-
+-  void  add_get_click( void ){
+-       
+-    _nb_sample++;
+-    _counted_clicks[get_click()]++;
+-    fill_history_clicks();
+-
+-  }    
+-
+-  void dump_statistics(string filemane){
+-    
+-    ofstream outfile (filemane.c_str(),ios::out) ;
+-
+-    std::map<unsigned long long , unsigned long long>::iterator itr;
+-    for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
+-      {      
+-      outfile  << (*itr).first << "  " << (*itr).second << endl ;       
+-      }      
+-    
+-    outfile.close();
+-
+-  }
+-
+-  void dump_history(string filemane){
+-    
+-    ofstream outfile (filemane.c_str(),ios::out) ;
+-
+-
+-
+-    for(int i=0 ; i<_history_mean_clicks.size() ; i++)
+-      {      
+-	outfile  << i << " " 
+-		 << _history_mean_clicks[i] << " " 
+-		 << _history_shortest_clicks[i] << " " 
+-		 << _history_most_occured_clicks[i] << endl ;
+-      }      
+-    
+-    outfile.close();
+-
+-  }
+-     
+-
+-
+-  double get_mean_clicks( void ){
+-    
+-    std::map<unsigned long long,unsigned long long>::iterator itr;
+-    
+-    unsigned long long mean_clicks=0;
+-
+-    for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
+-      {      
+-	
+-	mean_clicks+=(*itr).second*(*itr).first;
+-      }      
+-
+-    return mean_clicks/double(_nb_sample);
+-
+-  }
+-
+-  double get_shortest_clicks( void ){
+-    
+-    return double((*_counted_clicks.begin()).first);
+-
+-  }
+-
+-  void fill_history_clicks( void ){
+-
+-    _history_mean_clicks.push_back(get_mean_clicks());
+-    _history_shortest_clicks.push_back(get_shortest_clicks());
+-    _history_most_occured_clicks.push_back(get_most_occured_clicks());
+-
+-  }
+-
+-
+-  double get_most_occured_clicks( void ){
+-
+-    unsigned long long moc=0;
+-    unsigned long long max_occurence=0;
+-
+-    std::map<unsigned long long,unsigned long long>::iterator itr;
+-
+-    for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end()  ; itr++)
+-      {      
+-	
+-	if (max_occurence<=(*itr).second){
+-	  max_occurence=(*itr).second;
+-	  moc=(*itr).first;
+-	}
+-      }      
+-    
+-    return double(moc);    
+-
+-  }
+-  
+-  void clear( void )
+-  {
+-    _counted_clicks.clear();
+-
+-    _history_mean_clicks.clear();
+-    _history_shortest_clicks.clear();
+-    _history_most_occured_clicks.clear();
+-
+-    _nb_sample=0;
+-  }
+-
+-
+-    
+-private :
+-  
+-  union
+-  {
+-    unsigned long int n32[2] ;
+-    unsigned long long n64 ;
+-  } _click_start;
+-
+-  union
+-  {
+-    unsigned long int n32[2] ;
+-    unsigned long long n64 ;
+-  } _click_stop;
+-
+-  double _frequency ;
+-
+-  map<unsigned long long,unsigned long long> _counted_clicks;
+-
+-  vector<double> _history_mean_clicks;
+-  vector<double> _history_shortest_clicks;
+-  vector<double> _history_most_occured_clicks;
+-
+-  unsigned long long _nb_sample;
+-
+-  
+-
+-};
+-
+-
+-#endif
+diff -Nur BTL-20030124/generic_bench/utils/dump_file_x_y.hh BTL/generic_bench/utils/dump_file_x_y.hh
+--- BTL-20030124/generic_bench/utils/dump_file_x_y.hh	2002-11-21 16:04:06.000000000 +0100
++++ BTL/generic_bench/utils/dump_file_x_y.hh	2003-11-12 19:53:23.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  dump_file_x_y.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:20 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,9 +16,10 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef DUMP_FILE_X_Y_HH
+ #define DUMP_FILE_X_Y_HH
++
+ #include <fstream>
+ #include <string>
+ 
+@@ -27,21 +28,17 @@
+ //            [] operator for seting element
+ // the vector element must have the << operator define
+ 
+-using namespace std;
+-
+ template<class Vector_A, class Vector_B>
+-void dump_file_x_y(const Vector_A & X, const Vector_B & Y, const std::string & filename){
+-  
+-  ofstream outfile (filename.c_str(),ios::out) ;
+-  int size=X.size();
+-  
+-  for (int i=0;i<size;i++){
++void dump_file_x_y(const Vector_A& X, const Vector_B& Y, const std::string& filename) {
+ 
+-      outfile << X[i] << " " << Y[i] << endl ;
++  std::ofstream outfile (filename.c_str(), std::ios::out) ;
++  unsigned size=X.size();
+ 
++  for (unsigned i = 0; i < size; i++) {
++    outfile << X[i] << " " << Y[i] << std::endl;
+   }
+ 
+   outfile.close();
+-} 
++}
+ 
+ #endif
+diff -Nur BTL-20030124/generic_bench/utils/size_lin_log.hh BTL/generic_bench/utils/size_lin_log.hh
+--- BTL-20030124/generic_bench/utils/size_lin_log.hh	2003-01-14 19:52:59.000000000 +0100
++++ BTL/generic_bench/utils/size_lin_log.hh	2003-11-12 19:55:23.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  size_lin_log.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  mar déc 3 18:59:37 CET 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef SIZE_LIN_LOG
+ #define SIZE_LIN_LOG
+ 
+@@ -30,41 +30,27 @@
+ 
+   X.resize(nb_point);
+ 
+-  if (nb_point>ten){
+-
+-    for (int i=0;i<nine;i++){
+-      
+-      X[i]=i+1;
+-
++  if(nb_point > ten) {
++    for (int i = 0; i < nine; i++) {
++      X[i] = i+1;
+     }
+ 
+     Vector log_size;
+-    size_log(nb_point-nine,ten,size_max,log_size);
+ 
+-    for (int i=0;i<nb_point-nine;i++){
+-      
+-      X[i+nine]=log_size[i];
++    size_log(nb_point-nine, ten, size_max, log_size);
+ 
++    for (int i = 0; i < nb_point-nine; i++) {
++      X[i+nine] = log_size[i];
+     }
+-  }
+-  else{
+-
+-    for (int i=0;i<nb_point;i++){
+-      
+-      X[i]=i+1;
+-
++  } else{
++    for (int i = 0; i < nb_point; i++) {
++      X[i] = i+1;
+     }
+   }
+ 
+- //  for (int i=0;i<nb_point;i++){
+-    
+-//        INFOS("computed sizes : X["<<i<<"]="<<X[i]);
+-    
+-//   }
+-
++  // for (int i=0;i<nb_point;i++){
++  //   INFOS("computed sizes : X["<<i<<"]="<<X[i]);
++  // }
+ }
+-  
+-#endif
+-    
+-
+ 
++#endif
+diff -Nur BTL-20030124/generic_bench/utils/size_log.hh BTL/generic_bench/utils/size_log.hh
+--- BTL-20030124/generic_bench/utils/size_log.hh	2002-12-02 19:54:46.000000000 +0100
++++ BTL/generic_bench/utils/size_log.hh	2003-10-30 19:56:14.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  size_log.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:17 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef SIZE_LOG
+ #define SIZE_LOG
+ 
+@@ -42,8 +42,8 @@
+   for (int i=0;i<nb_point;i++){
+ 
+     ls = ls_min + float(i)*delta_ls ;
+-    
+-    size=int(exp(ls)); 
++
++    size=int(exp(ls));
+ 
+     X[i]=size;
+   }
+diff -Nur BTL-20030124/libs/ATLAS/Makefile BTL/libs/ATLAS/Makefile
+--- BTL-20030124/libs/ATLAS/Makefile	2002-11-21 16:04:06.000000000 +0100
++++ BTL/libs/ATLAS/Makefile	2003-11-15 07:31:10.000000000 +0100
+@@ -1,10 +1,10 @@
+-include $(BENCH_BASE)/Makefile.in 
++include $(BENCH_BASE)/Makefile.in
+ 
+ INCLUDES=$(INCLUDES_BASE) -I$(FORTRAN_DIR) -I$(ATLAS_BLAS_INCLUDE) -I$(ATLAS_BLAS_INCLUDE2)
+ OPTIM=$(OPTIM_BASE)
+ DEBUG=$(DEBUG_BASE)
+ 
+-CXXFLAGS = $(OPTIM) $(INCLUDES)
++CXXFLAGS = $(OPTIM) $(INCLUDES) -DDREAL
+ 
+ LIBS=$(LIBS_BASE) -L$(ATLAS_BLAS_LIB) -llapack -lcblas -latlas
+ 
+@@ -12,12 +12,10 @@
+ 
+ all : $(DEPEND_BASE) main
+ 
+-main:	Makefile main.o  
+-	$(CXX) -o main main.o   $(LIBS) 
++main:	Makefile main.o
++	$(CXX) -o main main.o   $(LIBS)
+ 
+ 
+ ###########################################################################
+ 
+ main.o : $(DEPEND_BASE) main.cpp ATLAS_interface.hh
+-
+-
+diff -Nur BTL-20030124/libs/tiny_blitz/main.cpp BTL/libs/tiny_blitz/main.cpp
+--- BTL-20030124/libs/tiny_blitz/main.cpp	2003-01-21 13:03:40.000000000 +0100
++++ BTL/libs/tiny_blitz/main.cpp	2003-11-13 21:11:52.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  main.cpp
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:30 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #include "utilities.h"
+ #include "tiny_blitz_interface.hh"
+ #include "static/bench_static.hh"
+@@ -27,11 +27,9 @@
+ 
+ int main()
+ {
+-  bench_static<Action_axpy,tiny_blitz_interface>();
+-  bench_static<Action_matrix_matrix_product,tiny_blitz_interface>();
+-  bench_static<Action_matrix_vector_product,tiny_blitz_interface>();
++  bench_static<Action_axpy,tiny_blitz_interface, TINY_MV_MAX_SIZE>();
++  bench_static<Action_matrix_matrix_product,tiny_blitz_interface, TINY_MV_MAX_SIZE>();
++  bench_static<Action_matrix_vector_product,tiny_blitz_interface, TINY_MV_MAX_SIZE>();
+ 
+   return 0;
+ }
+-
+-
+diff -Nur BTL-20030124/libs/tvmet/main.cpp BTL/libs/tvmet/main.cpp
+--- BTL-20030124/libs/tvmet/main.cpp	2003-01-21 13:05:17.000000000 +0100
++++ BTL/libs/tvmet/main.cpp	2003-11-14 13:29:57.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  main.cpp
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:30 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,21 +16,24 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #include "utilities.h"
+ #include "tvmet_interface.hh"
+ #include "static/bench_static.hh"
+ #include "action_matrix_vector_product.hh"
+ #include "action_matrix_matrix_product.hh"
+ #include "action_axpy.hh"
++#include "action_ata_product.hh"
++#include "action_aat_product.hh"
++
+ 
+ int main()
+ {
+-  bench_static<Action_axpy,tvmet_interface>();
+-  bench_static<Action_matrix_matrix_product,tvmet_interface>();
+-  bench_static<Action_matrix_vector_product,tvmet_interface>();
++  bench_static<Action_axpy,tvmet_interface, TINY_MV_MAX_SIZE>();
++  bench_static<Action_matrix_vector_product,tvmet_interface, MAX_MV>();
++  bench_static<Action_matrix_matrix_product,tvmet_interface, MAX_MM>();
++  bench_static<Action_ata_product,tvmet_interface, MAX_MM>();
++  bench_static<Action_aat_product,tvmet_interface, MAX_MM>();
+ 
+   return 0;
+ }
+-
+-
+diff -Nur BTL-20030124/libs/tvmet/Makefile BTL/libs/tvmet/Makefile
+--- BTL-20030124/libs/tvmet/Makefile	2003-01-21 11:38:53.000000000 +0100
++++ BTL/libs/tvmet/Makefile	2003-10-30 19:02:08.000000000 +0100
+@@ -1,8 +1,8 @@
+-include $(BENCH_BASE)/Makefile.in 
++include $(BENCH_BASE)/Makefile.in
+ 
+-LIBS=$(LIBS_BASE) 
+-INCLUDES=-I. $(INCLUDES_BASE) -I$(TVMET_INCLUDES)
+-OPTIM=$(OPTIM_BASE) 
++LIBS=$(LIBS_BASE)
++INCLUDES=-I. $(INCLUDES_BASE) -I$(TVMET_ROOT)/include
++OPTIM=$(shell echo `$(TVMET_ROOT)/tvmet-config --cxxflags`)
+ DEBUG=$(DEBUG_BASE)
+ 
+ CXXFLAGS = $(OPTIM) $(INCLUDES)
+@@ -13,8 +13,8 @@
+ 
+ all : $(DEPEND_BASE) main
+ 
+-main:	Makefile main.o  
+-	$(CXX) -o main main.o $(LIBS) 
++main:	Makefile main.o
++	$(CXX) -o main main.o $(LIBS)
+ 
+ 
+ ###########################################################################
+diff -Nur BTL-20030124/libs/tvmet/tvmet_interface.hh BTL/libs/tvmet/tvmet_interface.hh
+--- BTL-20030124/libs/tvmet/tvmet_interface.hh	2003-01-21 12:05:19.000000000 +0100
++++ BTL/libs/tvmet/tvmet_interface.hh	2003-11-13 18:20:13.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  tvmet_interface.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:30 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef TVMET_INTERFACE_HH
+ #define TVMET_INTERFACE_HH
+ 
+@@ -25,117 +25,98 @@
+ 
+ #include <vector>
+ 
+-using namespace tvmet;
+-
+ template<class real, int SIZE>
+-class tvmet_interface{
+-  
++class tvmet_interface
++{
+ public :
+-  
++
+   typedef real real_type ;
+ 
+   typedef std::vector<real>  stl_vector;
+   typedef std::vector<stl_vector > stl_matrix;
+-  
+-  typedef Vector<real,SIZE> gene_vector;
+-  typedef Matrix<real,SIZE,SIZE> gene_matrix;
+ 
+-  static inline std::string name( void )
+-  {
++  typedef tvmet::Vector<real, SIZE> gene_vector;
++  typedef tvmet::Matrix<real, SIZE, SIZE> gene_matrix;
++
++  static inline std::string name() {
+     return "tvmet";
+   }
+-  
+- 
+-  static void free_matrix(gene_matrix & A, int N){
+-    
+-    return ;
+-  }
+-  
+-  static void free_vector(gene_vector & B){
+-    
+-    return ;
+-    
+-  }
+-  
+-  static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
+-    
+-    for (int i=0; i<A_stl.size() ; i++){
+-      for (int j=0; j<A_stl[i].size() ; j++){
+-	A(i,j)=A_stl[i][j];
++
++  static void free_matrix(gene_matrix& A, int N) {
++    return;
++  }
++
++  static void free_vector(gene_vector& B) {
++    return;
++  }
++
++  static inline void matrix_from_stl(gene_matrix& A, stl_matrix& A_stl) {
++    for (unsigned i = 0; i < A_stl.size(); i++){
++      for (unsigned j = 0; j < A_stl[i].size(); j++) {
++	A(i,j) = A_stl[i][j];
+       }
+-      
+     }
+   }
+-  
+-  static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){
+-    
+-    for (int i=0; i<B_stl.size() ; i++){
+-      B[i]=B_stl[i];
++
++  static inline void vector_from_stl(gene_vector& B, stl_vector& B_stl) {
++    for (unsigned i = 0; i < B_stl.size(); i++) {
++      B[i] = B_stl[i];
+     }
+   }
+-  
+-  static inline void vector_to_stl(gene_vector & B, stl_vector & B_stl){
+-    
+-    for (int i=0; i<B_stl.size() ; i++){
+-      B_stl[i]=B[i];
++
++  static inline void vector_to_stl(gene_vector& B, stl_vector& B_stl) {
++    for (unsigned i = 0; i < B_stl.size(); i++) {
++      B_stl[i] = B[i];
+     }
+   }
+ 
+-  static inline void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){
+-    
+-    int N=A_stl.size();
+-    
+-    for (int i=0;i<N;i++){
++  static inline void matrix_to_stl(gene_matrix& A, stl_matrix& A_stl) {
++    unsigned N = A_stl.size();
++
++    for (unsigned i = 0;i < N;i++) {
+       A_stl[i].resize(N);
+-      for (int j=0;j<N;j++){
+-	A_stl[i][j]=A(i,j);
++      for (unsigned j = 0;j < N;j++) {
++	A_stl[i][j] = A(i,j);
+       }
+     }
+-    
+   }
+ 
+-
+-  static inline void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N)
+-  {
+-    
+-    for (int i=0;i<N;i++){
+-      for (int j=0;j<N;j++){
+-	cible(i,j)=source(i,j);
++  static inline void copy_matrix(const gene_matrix& source, gene_matrix& cible, unsigned N) {
++    for (unsigned i = 0;i < N;i++) {
++      for (unsigned j = 0;j < N;j++) {
++	cible(i,j) = source(i,j);
+       }
+     }
+-    
+   }
+ 
+-  static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N)
+-  {
+-    
+-    for (int i=0;i<N;i++){
+-      cible[i]=source[i];
++  static inline void copy_vector(const gene_vector& source, gene_vector& cible, unsigned N) {
++    for (unsigned i = 0;i < N;i++) {
++      cible[i] = source[i];
+     }
+-    
+-  }
+-  
+-  
+-  
+-  static inline void matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int N)
+-  {
+-    X=product(A,B);
+   }
+ 
++  static inline void matrix_matrix_product(const gene_matrix& A, const gene_matrix& B, gene_matrix& X, unsigned N) {
++    X = prod(A,B);
++  }
+ 
+-  static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
+-  {
+-    X=product(A,B);    
+-    
++  static inline void matrix_vector_product(gene_matrix& A, gene_vector& B, gene_vector& X, unsigned N) {
++    X = prod(A,B);
+   }
+ 
+-  static inline void axpy(const real coef, const gene_vector & X, gene_vector & Y, int N)
+-  {    
+-    Y+=coef*X;
++  static inline void axpy(const real coef, const gene_vector& X, gene_vector& Y, unsigned N) {
++    Y += coef*X;
+   }
+ 
++  static inline void ata_product(gene_matrix& A, gene_matrix& X, unsigned N) {
++    //X = prod(trans(A),A);
++    X  =  MtM_prod(A, A);
++  }
+ 
++  static inline void aat_product(gene_matrix& A, gene_matrix& X, unsigned N) {
++    //X = prod(A,trans(A));
++    X  =  MMt_prod(A, A);
++  }
+ };
+ 
+-  
++
+ #endif
+diff -Nur BTL-20030124/libs/ublas/main.cpp BTL/libs/ublas/main.cpp
+--- BTL-20030124/libs/ublas/main.cpp	2002-11-21 16:04:06.000000000 +0100
++++ BTL/libs/ublas/main.cpp	2003-11-13 21:57:42.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  main.cpp
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:27 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #include "utilities.h"
+ #include "ublas_interface.hh"
+ #include "bench.hh"
+@@ -26,14 +26,16 @@
+ #include "action_ata_product.hh"
+ #include "action_aat_product.hh"
+ 
++using namespace std;
++
+ int main()
+ {
+-  bench<Action_axpy<ublas_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);  
++  bench<Action_axpy<ublas_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
++
++  bench<Action_matrix_vector_product<ublas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
+ 
+-  bench<Action_matrix_vector_product<ublas_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);  
++  bench<Action_matrix_matrix_product<ublas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+ 
+-  bench<Action_matrix_matrix_product<ublas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);  
+- 
+   bench<Action_ata_product<ublas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+ 
+   bench<Action_aat_product<ublas_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+@@ -41,5 +43,3 @@
+ 
+   return 0;
+ }
+-
+-
+diff -Nur BTL-20030124/libs/ublas/ublas_interface.hh BTL/libs/ublas/ublas_interface.hh
+--- BTL-20030124/libs/ublas/ublas_interface.hh	2002-11-29 16:43:28.000000000 +0100
++++ BTL/libs/ublas/ublas_interface.hh	2003-11-13 21:58:08.000000000 +0100
+@@ -1,14 +1,14 @@
+ //=====================================================
+ // File   :  ublas_interface.hh
+-// Author :  L. Plagne <laurent.plagne@edf.fr)>        
++// Author :  L. Plagne <laurent.plagne@edf.fr)>
+ // Copyright (C) EDF R&D,  lun sep 30 14:23:27 CEST 2002
+ //=====================================================
+-// 
++//
+ // 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
+ // 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
+@@ -16,7 +16,7 @@
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-// 
++//
+ #ifndef UBLAS_INTERFACE_HH
+ #define UBLAS_INTERFACE_HH
+ 
+@@ -29,7 +29,6 @@
+ #include <boost/numeric/ublas/concepts.hpp>
+ #include <boost/numeric/ublas/storage.hpp>
+ 
+-
+ template <class real>
+ class ublas_interface{
+ 
+@@ -45,65 +44,65 @@
+   //typedef  numerics::vector<real,numerics::unbounded_array<real> > gene_vector;
+   typedef  typename boost::numeric::ublas::matrix<real>  gene_matrix;
+   typedef  typename boost::numeric::ublas::vector<real> gene_vector;
+-  
++
+   static inline std::string name( void )
+   {
+     return "ublas";
+   }
+ 
+ 
+-  
++
+ 
+   static void free_matrix(gene_matrix & A, int N){
+-    
++
+     return ;
+   }
+-  
++
+   static void free_vector(gene_vector & B){
+-    
++
+     return ;
+-    
++
+   }
+-  
++
+   static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
+-    
++
+     A.resize(A_stl.size(),A_stl[0].size());
+-    
++
+     for (int i=0; i<A_stl.size() ; i++){
+       for (int j=0; j<A_stl[i].size() ; j++){
+ 	A(i,j)=A_stl[i][j];
+       }
+-      
++
+     }
+   }
+-  
++
+   static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){
+-    
++
+     B.resize(B_stl.size());
+-    
++
+     for (int i=0; i<B_stl.size() ; i++){
+       B(i)=B_stl[i];
+     }
+   }
+-  
++
+   static inline void vector_to_stl(gene_vector & B, stl_vector & B_stl){
+-    
++
+     for (int i=0; i<B_stl.size() ; i++){
+       B_stl[i]=B(i);
+     }
+   }
+ 
+   static inline void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){
+-    
++
+     int N=A_stl.size();
+-    
++
+     for (int i=0;i<N;i++){
+       A_stl[i].resize(N);
+       for (int j=0;j<N;j++){
+ 	A_stl[i][j]=A(i,j);
+       }
+     }
+-  
++
+   }
+ 
+   static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){
+@@ -119,19 +118,19 @@
+       }
+     }
+   }
+- 
++
+    static inline void matrix_vector_product_slow(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
+   {
+-    X =  prod(A,B);    
++    X =  prod(A,B);
+   }
+ 
+   static inline void matrix_matrix_product_slow(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N)
+   {
+-    X =  prod(A,B);    
++    X =  prod(A,B);
+   }
+ 
+   static inline void axpy_slow(const real coef, const gene_vector & X, gene_vector & Y, int N)
+-  {    
++  {
+     Y+=coef*X;
+   }
+ 
+@@ -139,16 +138,16 @@
+ 
+   static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
+   {
+-    X.assign(prod(A,B));    
++    X.assign(prod(A,B));
+   }
+ 
+   static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N)
+   {
+-    X.assign(prod(A,B));    
++    X.assign(prod(A,B));
+   }
+ 
+   static inline void axpy(const real coef, const gene_vector & X, gene_vector & Y, int N)
+-  {    
++  {
+     Y.plus_assign(coef*X);
+   }
+ 
+@@ -166,7 +165,7 @@
+ 
+ 
+ 
+-  
++
+ };
+ 
+ #endif
+diff -Nur BTL-20030124/Makefile BTL/Makefile
+--- BTL-20030124/Makefile	2003-01-21 17:41:55.000000000 +0100
++++ BTL/Makefile	2003-11-15 07:09:13.000000000 +0100
+@@ -2,42 +2,43 @@
+ 
+ BENCH_LIB=$(BENCH_BASE)/libs
+ 
+-all : C STL f77 blitz ATLAS MTL ublas INTEL_BLAS STL_algo tiny_blitz tvmet##C_BLAS
++#all : C STL f77 blitz ATLAS MTL ublas INTEL_BLAS STL_algo tiny_blitz tvmet##C_BLAS
++all : C STL f77 blitz ATLAS ublas STL_algo tiny_blitz tvmet
+ 
+-blitz : test_conf  
++blitz : test_conf
+ 	( cd $(BENCH_LIB)/blitz ; make )
+ 
+-MTL : test_conf  
++MTL : test_conf
+ 	(cd $(BENCH_LIB)/MTL ; make )
+ 
+-f77 : test_conf  
++f77 : test_conf
+ 	(cd $(BENCH_LIB)/f77 ; make )
+ 
+-C : test_conf  
++C : test_conf
+ 	(cd $(BENCH_LIB)/C ; make )
+ 
+-STL : test_conf  
++STL : test_conf
+ 	(cd $(BENCH_LIB)/STL ; make )
+ 
+-ATLAS : test_conf  
++ATLAS : test_conf
+ 	(cd $(BENCH_LIB)/ATLAS ; make )
+ 
+-ublas : test_conf  
++ublas : test_conf
+ 	(cd $(BENCH_LIB)/ublas ; make )
+ 
+-C_BLAS : test_conf  
++C_BLAS : test_conf
+ 	(cd $(BENCH_LIB)/C_BLAS ; make )
+ 
+-INTEL_BLAS : test_conf  
++INTEL_BLAS : test_conf
+ 	(cd $(BENCH_LIB)/INTEL_BLAS ; make )
+ 
+-STL_algo : test_conf  
++STL_algo : test_conf
+ 	(cd $(BENCH_LIB)/STL_algo ; make )
+ 
+-tiny_blitz : test_conf  
++tiny_blitz : test_conf
+ 	(cd $(BENCH_LIB)/tiny_blitz ; make )
+ 
+-tvmet : test_conf  
++tvmet : test_conf
+ 	(cd $(BENCH_LIB)/tvmet ; make )
+ 
+ 
+@@ -62,5 +63,3 @@
+ 		echo done ;\
+ 	)\
+ 	done
+-
+-
+diff -Nur BTL-20030124/Makefile.in BTL/Makefile.in
+--- BTL-20030124/Makefile.in	2003-01-21 12:02:16.000000000 +0100
++++ BTL/Makefile.in	2003-11-13 21:15:23.000000000 +0100
+@@ -1,44 +1,37 @@
+-## TVMET
+-
+-TVMET_INCLUDES=/home01/lplagne/public/tvmet-0.7.0/include
++## TVMET >1.3.0
++TVMET_ROOT=/home/opetzold/work/tvmet
+ 
+ ##  UBLAS
+-
+-BOOST_ROOT=/home01/lplagne/public/boost/boost_1_28_0
++BOOST_ROOT=/usr/include/boost
+ 
+ ##  BLITZ
+-
+-##BLITZ_ROOT=/home01/lplagne/public/blitz/blitz-20001213
+-BLITZ_ROOT=/home01/lplagne/public/blitz/blitz-0.6
++BLITZ_ROOT=/home/opetzold/work/blitz++-0.7
+ 
+ ##  MTL
+-MTL_ROOT=/home01/lplagne/public/MTL/include
++##MTL_ROOT=/home01/lplagne/public/MTL/include
+ ##MTL_ROOT=/home01/lplagne/public/MTL/mtl-2.1.2-20
+ ##MTL_PATCH=/home01/lplagne/mtl_patch/mtl-spec-1.0
+ ##ITL_ROOT=/home01/lplagne/public/MTL/ITL/itl-4.0.0-1
+ 
+ ##  ATLAS
+-
+-ATLAS_BLAS_LIB=/home01/lplagne/public/atlas/ATLAS/lib/Linux_PIIISSE1
+-ATLAS_BLAS_INCLUDE2=/home01/lplagne/public/atlas/ATLAS/include/Linux_PIIISSE1
+-ATLAS_BLAS_INCLUDE=/home01/lplagne/public/atlas/ATLAS/include
++ATLAS_BLAS_LIB=/usr/local/lib
++ATLAS_BLAS_INCLUDE2=/usr/local/include/atlas/Linux_P4SSE2
++ATLAS_BLAS_INCLUDE=/usr/local/include/atlas
+ 
+ ## C_BLAS
+-
+-C_BLAS_INCLUDE=/home01/lplagne/public/blas_netlib/CBLAS/src
+-C_BLAS_LIB=/home01/lplagne/public/blas_netlib/CBLAS/lib/LINUX/cblas_LINUX.a
+-F77_BLAS_LIB=/home01/lplagne/public/blas_netlib/f77_blas/libblas.a 
++#C_BLAS_INCLUDE=/home01/lplagne/public/blas_netlib/CBLAS/src
++#C_BLAS_LIB=/home01/lplagne/public/blas_netlib/CBLAS/lib/LINUX/cblas_LINUX.a
++#F77_BLAS_LIB=/home01/lplagne/public/blas_netlib/f77_blas/libblas.a
+ 
+ ## INTEL_BLAS
+-
+-INTEL_BLAS_INCLUDE=/opt/intel/mkl/include
+-IBLIB=/opt/intel/mkl/lib/32
+-INTEL_BLAS_LIB=$(IBLIB)/libmkl_lapack.a $(IBLIB)/libmkl_p3.a $(IBLIB)/libmkl_p4.a $(IBLIB)/libguide.a $(IBLIB)/libmkl_def.a -lg2c -lpthread
+-##INTEL_BLAS_LIB=-L/opt/intel/mkl/lib/32 -lmkl_lapack64 -lmkl_lapack32 -lmkl_p4 -lmkl_p3 -lguide -lmkl_def -lg2c 
++#INTEL_BLAS_INCLUDE=/opt/intel/mkl/include
++#IBLIB=/opt/intel/mkl/lib/32
++#INTEL_BLAS_LIB=$(IBLIB)/libmkl_lapack.a $(IBLIB)/libmkl_p3.a $(IBLIB)/libmkl_p4.a $(IBLIB)/libguide.a $(IBLIB)/libmkl_def.a -lg2c -lpthread
++##INTEL_BLAS_LIB=-L/opt/intel/mkl/lib/32 -lmkl_lapack64 -lmkl_lapack32 -lmkl_p4 -lmkl_p3 -lguide -lmkl_def -lg2c
+ 
+ 
+ 
+-## INCLUDES 
++## INCLUDES
+ 
+ ACTIONS=$(BENCH_BASE)/actions
+ 
+@@ -52,13 +45,13 @@
+ INCLUDES_BASE=  -I$(BENCH_BASE)/includes -I$(STL) -I$(GENERIC) -I$(ACTIONS) -I$(BENCH_UTILS)
+ 
+ 
+-## LIBS 
++## LIBS
+ 
+-LIBS_BASE = -lm 	
++LIBS_BASE = -lm
+ 
+ ##CXX = KCC
+ 
+-DEFINED_VAR= 
++DEFINED_VAR=
+ CXX=g++ $(DEFINED_VAR)
+ MAKE_LIB= ar cr
+ 
+@@ -78,7 +71,7 @@
+ 
+ ###########################################################################
+ 
+-.SUFFIXES: .o .cpp 
++.SUFFIXES: .o .cpp
+ 
+ .cpp.o:
+ 	$(CXX) $(CXXFLAGS) -c $<
+@@ -86,14 +79,14 @@
+ ###########################################################################
+ ###########################################################################
+ 
+-.SUFFIXES: .o .cxx 
++.SUFFIXES: .o .cxx
+ 
+ .cxx.o:
+ 	$(CXX) $(CXXFLAGS) -c $<
+ 
+ ###########################################################################
+ 
+-default: 
++default:
+ 	make all
+ 
+ test_conf :
+@@ -105,5 +98,3 @@
+ clean:
+ 	rm -f *.o *.ii *.int.c *.s *~ \#* main core rm *.dat *.a
+ 	rm -rf ti_files
+-
+-
diff --git a/tvmet-1.7.1/benchmark/Makefile.am b/tvmet-1.7.1/benchmark/Makefile.am
new file mode 100644
index 0000000..45e405a
--- /dev/null
+++ b/tvmet-1.7.1/benchmark/Makefile.am
@@ -0,0 +1,3 @@
+# $Id: Makefile.am,v 1.4 2003/12/04 19:18:09 opetzold Exp $
+
+EXTRA_DIST = BTL-20030124.patch
diff --git a/tvmet-1.7.1/benchmark/Makefile.in b/tvmet-1.7.1/benchmark/Makefile.in
new file mode 100644
index 0000000..4e3ec26
--- /dev/null
+++ b/tvmet-1.7.1/benchmark/Makefile.in
@@ -0,0 +1,338 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.4 2003/12/04 19:18:09 opetzold Exp $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = benchmark
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = BTL-20030124.patch
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  benchmark/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  benchmark/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man 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 \
+	uninstall-info-am
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/config/ac_c_long_long.m4 b/tvmet-1.7.1/config/ac_c_long_long.m4
new file mode 100644
index 0000000..7cf8517
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_c_long_long.m4
@@ -0,0 +1,18 @@
+dnl $Id: ac_c_long_long.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Provides a test for the existance of the long long int type and
+dnl defines HAVE_LONG_LONG if it is found.
+dnl
+
+AC_DEFUN([AC_C_LONG_LONG],
+[AC_CACHE_CHECK(for long long int, ac_cv_c_long_long,
+[AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+   long long int i;
+]], [[]])],[ac_cv_c_long_long=yes],[ac_cv_c_long_long=no])
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_c_long_long" = yes; then
+  AC_DEFINE(HAVE_LONG_LONG,,[Define if the compiler supports the long_long type])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_create_prefix_config_h.m4 b/tvmet-1.7.1/config/ac_create_prefix_config_h.m4
new file mode 100644
index 0000000..987b3b9
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_create_prefix_config_h.m4
@@ -0,0 +1,107 @@
+dnl @synopsis AC_CREATE_PREFIX_CONFIG_H [(OUTPUT-HEADER [,PREFIX [,ORIG-HEADER]])]
+dnl
+dnl this is a new variant from ac_prefix_config_
+dnl   this one will use a lowercase-prefix if
+dnl   the config-define was starting with a lowercase-char, e.g. 
+dnl   #define const or #define restrict or #define off_t
+dnl   (and this one can live in another directory, e.g. testpkg/config.h
+dnl    therefore I decided to move the output-header to be the first arg)
+dnl
+dnl takes the usual config.h generated header file; looks for each of
+dnl the generated "#define SOMEDEF" lines, and prefixes the defined name
+dnl (ie. makes it "#define PREFIX_SOMEDEF". The result is written to
+dnl the output config.header file. The PREFIX is converted to uppercase 
+dnl for the conversions. 
+dnl
+dnl default OUTPUT-HEADER = $PACKAGE-config.h
+dnl default PREFIX = $PACKAGE
+dnl default ORIG-HEADER, derived from OUTPUT-HEADER
+dnl         if OUTPUT-HEADER has a "/", use the basename
+dnl         if OUTPUT-HEADER has a "-", use the section after it.
+dnl         otherwise, just config.h
+dnl
+dnl In most cases, the configure.in will contain a line saying
+dnl         AC_CONFIG_HEADER(config.h) 
+dnl somewhere *before* AC_OUTPUT and a simple line saying
+dnl        AC_PREFIX_CONFIG_HEADER
+dnl somewhere *after* AC_OUTPUT.
+dnl
+dnl example:
+dnl   AC_INIT(config.h.in)        # config.h.in as created by "autoheader"
+dnl   AM_INIT_AUTOMAKE(testpkg, 0.1.1)   # "#undef VERSION" and "PACKAGE"
+dnl   AM_CONFIG_HEADER(config.h)         #                in config.h.in
+dnl   AC_MEMORY_H                        # "#undef NEED_MEMORY_H"
+dnl   AC_C_CONST_H                       # "#undef const"
+dnl   AC_OUTPUT(Makefile)                # creates the "config.h" now
+dnl   AC_CREATE_PREFIX_CONFIG_H          # creates "testpkg-config.h"
+dnl         and the resulting "testpkg-config.h" contains lines like
+dnl   #ifndef TESTPKG_VERSION 
+dnl   #define TESTPKG_VERSION "0.1.1"
+dnl   #endif
+dnl   #ifndef TESTPKG_NEED_MEMORY_H 
+dnl   #define TESTPKG_NEED_MEMORY_H 1
+dnl   #endif
+dnl   #ifndef _testpkg_const 
+dnl   #define _testpkg_const const
+dnl   #endif
+dnl
+dnl   and this "testpkg-config.h" can be installed along with other
+dnl   header-files, which is most convenient when creating a shared
+dnl   library (that has some headers) where some functionality is
+dnl   dependent on the OS-features detected at compile-time. No
+dnl   need to invent some "testpkg-confdefs.h.in" manually. :-)
+dnl
+dnl @version $Id: ac_create_prefix_config_h.m4,v 1.1.1.1 2003/02/08 19:32:50 opetzold Exp $
+dnl @author Guido Draheim <guidod@gmx.de>
+
+AC_DEFUN([AC_CREATE_PREFIX_CONFIG_H],
+[changequote({, })dnl 
+ac_prefix_conf_OUT=`echo ifelse($1, , ${PACKAGE_TARNAME}-config.h, $1)`
+ac_prefix_conf_DEF=`echo _$ac_prefix_conf_OUT | sed -e 'y:abcdefghijklmnopqrstuvwxyz./,-:ABCDEFGHIJKLMNOPQRSTUVWXYZ____:'`
+ac_prefix_conf_PKG=`echo ifelse($2, , ${PACKAGE_TARNAME}, $2)`
+ac_prefix_conf_LOW=`echo _$ac_prefix_conf_PKG | sed -e 'y:ABCDEFGHIJKLMNOPQRSTUVWXYZ-:abcdefghijklmnopqrstuvwxyz_:'`
+ac_prefix_conf_UPP=`echo $ac_prefix_conf_PKG | sed -e 'y:abcdefghijklmnopqrstuvwxyz-:ABCDEFGHIJKLMNOPQRSTUVWXYZ_:'  -e '/^[0-9]/s/^/_/'`
+ac_prefix_conf_INP=`echo ifelse($3, , _, $3)`
+if test "$ac_prefix_conf_INP" = "_"; then
+   case $ac_prefix_conf_OUT in
+      */*) ac_prefix_conf_INP=`basename $ac_prefix_conf_OUT` 
+      ;;
+      *-*) ac_prefix_conf_INP=`echo $ac_prefix_conf_OUT | sed -e 's/[a-zA-Z0-9_]*-//'`
+      ;;
+      *) ac_prefix_conf_INP=config.h
+      ;;
+   esac
+fi
+changequote([, ])dnl
+if test -z "$ac_prefix_conf_PKG" ; then
+   AC_MSG_ERROR([no prefix for _PREFIX_PKG_CONFIG_H])
+else
+  AC_MSG_RESULT(creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines)
+  if test -f $ac_prefix_conf_INP ; then
+    AS_DIRNAME([/* automatically generated */], $ac_prefix_conf_OUT)
+changequote({, })dnl 
+    echo '#ifndef '$ac_prefix_conf_DEF >$ac_prefix_conf_OUT
+    echo '#define '$ac_prefix_conf_DEF' 1' >>$ac_prefix_conf_OUT
+    echo ' ' >>$ac_prefix_conf_OUT
+    echo /'*' $ac_prefix_conf_OUT. Generated automatically at end of configure. '*'/ >>$ac_prefix_conf_OUT
+
+    echo 's/#undef  *\([A-Z_]\)/#undef '$ac_prefix_conf_UPP'_\1/' >conftest.sed
+    echo 's/#undef  *\([a-z]\)/#undef '$ac_prefix_conf_LOW'_\1/' >>conftest.sed
+    echo 's/#define  *\([A-Z_][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_UPP"_\\1 \\" >>conftest.sed
+    echo '#define '$ac_prefix_conf_UPP"_\\1 \\2 \\" >>conftest.sed
+    echo '#endif/' >>conftest.sed
+    echo 's/#define  *\([a-z][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_LOW"_\\1 \\" >>conftest.sed
+    echo '#define '$ac_prefix_conf_LOW"_\\1 \\2 \\" >>conftest.sed
+    echo '#endif/' >>conftest.sed
+    sed -f conftest.sed $ac_prefix_conf_INP >>$ac_prefix_conf_OUT
+    echo ' ' >>$ac_prefix_conf_OUT
+    echo '/*' $ac_prefix_conf_DEF '*/' >>$ac_prefix_conf_OUT
+    echo '#endif' >>$ac_prefix_conf_OUT
+changequote([, ])dnl
+  else
+    AC_MSG_ERROR([input file $ac_prefix_conf_IN does not exist, dnl
+    skip generating $ac_prefix_conf_OUT])
+  fi
+  rm -f conftest.* 
+fi])
+           
diff --git a/tvmet-1.7.1/config/ac_cxx_have_complex.m4 b/tvmet-1.7.1/config/ac_cxx_have_complex.m4
new file mode 100644
index 0000000..efd4a46
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_complex.m4
@@ -0,0 +1,21 @@
+dnl $Id: ac_cxx_have_complex.m4,v 1.3 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Available from the GNU Autoconf Macro Archive at:
+dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_complex.html
+dnl
+
+AC_DEFUN([AC_CXX_HAVE_COMPLEX],
+[AC_CACHE_CHECK(whether the compiler has complex<T>,
+ac_cv_cxx_have_complex,
+[AC_REQUIRE([AC_CXX_NAMESPACES])
+ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <complex>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif]], [[complex<float> a; complex<double> b; return 0;]])],[ac_cv_cxx_have_complex=yes],[ac_cv_cxx_have_complex=no])
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_have_complex" = yes; then
+  AC_DEFINE(HAVE_COMPLEX,,[define if the compiler has complex<T>])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_have_complex_math1.m4 b/tvmet-1.7.1/config/ac_cxx_have_complex_math1.m4
new file mode 100644
index 0000000..2b093f5
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_complex_math1.m4
@@ -0,0 +1,27 @@
+dnl $Id: ac_cxx_have_complex_math1.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Available from the GNU Autoconf Macro Archive at:
+dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_complex_math1.html
+dnl
+
+AC_DEFUN([AC_CXX_HAVE_COMPLEX_MATH1],
+[AC_CACHE_CHECK(whether the compiler has complex math functions,
+ac_cv_cxx_have_complex_math1,
+[AC_REQUIRE([AC_CXX_NAMESPACES])
+ AC_LANG_PUSH([C++])
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <complex>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif]], [[complex<double> x(1.0, 1.0), y(1.0, 1.0);
+cos(x); cosh(x); exp(x); log(x); pow(x,1); pow(x,double(2.0));
+pow(x, y); pow(double(2.0), x); sin(x); sinh(x); sqrt(x); tan(x); tanh(x);
+return 0;]])],[ac_cv_cxx_have_complex_math1=yes],[ac_cv_cxx_have_complex_math1=no])
+ LIBS="$ac_save_LIBS"
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_have_complex_math1" = yes; then
+  AC_DEFINE(HAVE_COMPLEX_MATH1,,[define if the compiler has complex math functions])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_have_complex_math2.m4 b/tvmet-1.7.1/config/ac_cxx_have_complex_math2.m4
new file mode 100644
index 0000000..ce088d6
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_complex_math2.m4
@@ -0,0 +1,26 @@
+dnl $Id: ac_cxx_have_complex_math2.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Available from the GNU Autoconf Macro Archive at:
+dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_complex_math2.html
+dnl
+
+AC_DEFUN([AC_CXX_HAVE_COMPLEX_MATH2],
+[AC_CACHE_CHECK(whether the compiler has more complex math functions,
+ac_cv_cxx_have_complex_math2,
+[AC_REQUIRE([AC_CXX_NAMESPACES])
+  AC_LANG_PUSH([C++])
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <complex>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif]], [[complex<double> x(1.0, 1.0), y(1.0, 1.0);
+acos(x); asin(x); atan(x); atan2(x,y); atan2(x, double(3.0));
+atan2(double(3.0), x); log10(x); return 0;]])],[ac_cv_cxx_have_complex_math2=yes],[ac_cv_cxx_have_complex_math2=no])
+ LIBS="$ac_save_LIBS"
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_have_complex_math2" = yes; then
+  AC_DEFINE(HAVE_COMPLEX_MATH2,,[define if the compiler has more complex math functions])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_have_ieee_math.m4 b/tvmet-1.7.1/config/ac_cxx_have_ieee_math.m4
new file mode 100644
index 0000000..fa40e79
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_ieee_math.m4
@@ -0,0 +1,42 @@
+dnl $Id: ac_cxx_have_ieee_math.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Check for compiler support for double IEEE math, if there define
+dnl HAVE_IEEE_MATH.
+dnl
+
+AC_DEFUN([AC_CXX_HAVE_IEEE_MATH],
+[AC_CACHE_CHECK(for IEEE math library,
+ac_cv_cxx_have_ieee_math,
+[AC_LANG_PUSH([C++])
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#ifndef _ALL_SOURCE
+ #define _ALL_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE
+ #define _XOPEN_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE_EXTENDED
+ #define _XOPEN_SOURCE_EXTENDED 1
+#endif
+#include <cmath>]], [[double x = 1.0; double y = 1.0;
+acosh(x); asinh(x); atanh(x);
+expm1(x);
+erf(x); erfc(x);
+// finite(x);
+isnan(x);
+j0(x); j1(x);
+lgamma(x);
+logb(x); log1p(x);
+rint(x);
+// trunc(x);
+y0(x); y1(x);
+return 0;]])],[ac_cv_cxx_have_ieee_math=yes],[ac_cv_cxx_have_ieee_math=no])
+ LIBS="$ac_save_LIBS"
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_have_ieee_math" = yes; then
+  AC_DEFINE(HAVE_IEEE_MATH,,[Define if the compiler supports IEEE math library])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_have_mutable.m4 b/tvmet-1.7.1/config/ac_cxx_have_mutable.m4
new file mode 100644
index 0000000..47d5d8a
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_mutable.m4
@@ -0,0 +1,23 @@
+dnl $Id: ac_cxx_have_mutable.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl If the compiler allows modifying data members of classes flagged with
+dnl the mutable keyword even in const objects, define HAVE_MUTABLE.
+dnl
+
+AC_DEFUN([AC_CXX_HAVE_MUTABLE],
+[AC_CACHE_CHECK(for mutable,
+ac_cv_cxx_mutable,
+[AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+class Foo {
+  mutable int i;
+public:
+  int bar (int n) const { i = n; return i; }
+};
+]], [[Foo foo; return foo.bar(1);]])],[ac_cv_cxx_mutable=yes],[ac_cv_cxx_mutable=no])
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_mutable" = yes; then
+  AC_DEFINE(HAVE_MUTABLE,,[Define if the compiler supports the mutable keyword])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_have_namespaces.m4 b/tvmet-1.7.1/config/ac_cxx_have_namespaces.m4
new file mode 100644
index 0000000..f868cbb
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_namespaces.m4
@@ -0,0 +1,17 @@
+dnl $Id: ac_cxx_have_namespaces.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl If the compiler can prevent names clashes using namespaces, define
+dnl HAVE_NAMESPACES.
+dnl
+
+AC_DEFUN([AC_CXX_NAMESPACES],
+[AC_CACHE_CHECK(for namespaces support,
+ac_cv_cxx_namespaces,
+[AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[namespace Outer { namespace Inner { int i = 0; }}]], [[using namespace Outer::Inner; return i;]])],[ac_cv_cxx_namespaces=yes],[ac_cv_cxx_namespaces=no])
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_namespaces" = yes; then
+  AC_DEFINE(HAVE_NAMESPACES,,[Define if the compiler implements namespaces])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_have_sysv_math.m4 b/tvmet-1.7.1/config/ac_cxx_have_sysv_math.m4
new file mode 100644
index 0000000..0d9364c
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_have_sysv_math.m4
@@ -0,0 +1,46 @@
+dnl $Id: ac_cxx_have_sysv_math.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Check for compiler support for double SYSV math, if there define
+dnl HAVE_SYSV_MATH.
+dnl
+
+AC_DEFUN([AC_CXX_HAVE_SYSV_MATH],
+[AC_CACHE_CHECK(for SYSV math library,
+ac_cv_cxx_have_sysv_math,
+[AC_LANG_PUSH([C++])
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#ifndef _ALL_SOURCE
+ #define _ALL_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE
+ #define _XOPEN_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE_EXTENDED
+ #define _XOPEN_SOURCE_EXTENDED 1
+#endif
+#include <cmath>]], [[double x = 1.0; double y = 1.0;
+_class(x);
+ilogb(x);
+itrunc(x);
+nearest(x);
+rsqrt(x);
+uitrunc(x);
+
+copysign(x,y);
+drem(x,y);
+fmod(x,y);
+hypot(x,y);
+nextafter(x,y);
+remainder(x,y);
+scalb(x,y);
+unordered(x,y);
+return 0;]])],[ac_cv_cxx_have_sysv_math=yes],[ac_cv_cxx_have_sysv_math=no])
+ LIBS="$ac_save_LIBS"
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_have_sysv_math" = yes; then
+  AC_DEFINE(HAVE_SYSV_MATH,,[Define if the compiler supports SYSV math library])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_partial_specialization.m4 b/tvmet-1.7.1/config/ac_cxx_partial_specialization.m4
new file mode 100644
index 0000000..d9a632d
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_partial_specialization.m4
@@ -0,0 +1,21 @@
+dnl $Id: ac_cxx_partial_specialization.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Check if the compiler supports partial template specialization,
+dnl on support define HAVE_PARTIAL_SPECIALIZATION.
+dnl
+
+AC_DEFUN([AC_CXX_PARTIAL_SPECIALIZATION],
+[AC_CACHE_CHECK(whether the compiler supports partial specialization,
+ac_cv_cxx_partial_specialization,
+[AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+template<class T, int N> class X            { public : enum { e = 0 }; };
+template<int N>          class X<double, N> { public : enum { e = 1 }; };
+template<class T>        class X<T, 2>      { public : enum { e = 2 }; };
+]], [[return (X<int,3>::e == 0) && (X<double,3>::e == 1) && (X<float,2>::e == 2);]])],[ac_cv_cxx_partial_specialization=yes],[ac_cv_cxx_partial_specialization=no])
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_partial_specialization" = yes; then
+  AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION,,[Define if the compiler supports partial specialization])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_cxx_typename.m4 b/tvmet-1.7.1/config/ac_cxx_typename.m4
new file mode 100644
index 0000000..fbb90f3
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_cxx_typename.m4
@@ -0,0 +1,16 @@
+dnl $Id: ac_cxx_typename.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Check compiler support for "typename" keyword, define HAVE_TYPENAME if there.
+dnl
+
+AC_DEFUN([AC_CXX_TYPENAME],
+[AC_CACHE_CHECK(for typename,
+ac_cv_cxx_typename,
+[ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[template<typename T>class X {public:X(){}};]], [[X<float> x; return 0;]])],[ac_cv_cxx_typename=yes],[ac_cv_cxx_typename=no])
+ AC_LANG_POP([C++])
+])
+if test "$ac_cv_cxx_typename" = yes; then
+  AC_DEFINE(HAVE_TYPENAME,,[Define if the compiler recognizes typename])
+fi
+])
diff --git a/tvmet-1.7.1/config/ac_prog_cxx_intel.m4 b/tvmet-1.7.1/config/ac_prog_cxx_intel.m4
new file mode 100644
index 0000000..a13ea26
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_prog_cxx_intel.m4
@@ -0,0 +1,18 @@
+dnl $Id: ac_prog_cxx_intel.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Check for Intel C++ compiler
+dnl
+
+AC_DEFUN([AC_PROG_CXX_INTEL],
+[AC_CACHE_CHECK(whether we are using INTEL C++, INTEL_CXX,
+ [cat > conftest.c <<EOF
+# if defined(__ICL) || defined(__ICC)
+  yes;
+#endif
+EOF
+if AC_TRY_COMMAND(${CXX} -E conftest.c) | egrep yes >/dev/null 2>&1; then
+  INTEL_CXX=yes
+  compiler=intelcc
+else
+  INTEL_CXX=no
+fi])])
diff --git a/tvmet-1.7.1/config/ac_prog_cxx_kai.m4 b/tvmet-1.7.1/config/ac_prog_cxx_kai.m4
new file mode 100644
index 0000000..aba6a24
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_prog_cxx_kai.m4
@@ -0,0 +1,19 @@
+dnl $Id: ac_prog_cxx_kai.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Check for KAI C++ compiler
+dnl
+
+AC_DEFUN([AC_PROG_CXX_KAI],
+[AC_CACHE_CHECK(whether we are using KAI C++,
+ KAI_CXX,
+ [cat > conftest.c <<EOF
+# if defined(__KCC)
+  yes;
+#endif
+EOF
+ if AC_TRY_COMMAND(${CXX} -E conftest.c) | egrep yes >/dev/null 2>&1; then
+  KAI_CXX=yes
+  compiler=kaicc
+ else
+  KAI_CXX=no
+fi])])
diff --git a/tvmet-1.7.1/config/ac_prog_cxx_pgi.m4 b/tvmet-1.7.1/config/ac_prog_cxx_pgi.m4
new file mode 100644
index 0000000..900dad7
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_prog_cxx_pgi.m4
@@ -0,0 +1,18 @@
+dnl $Id: ac_prog_cxx_pgi.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl Portland Group Incorporated C++ compiler
+dnl
+
+AC_DEFUN([AC_PROG_CXX_PGI],
+[AC_CACHE_CHECK(whether we are using PGI C++, PGI_CXX,
+ [cat > conftest.c <<EOF
+# if defined(__PGI)
+  yes;
+#endif
+EOF
+if AC_TRY_COMMAND(${CXX} -E conftest.c) | egrep yes >/dev/null 2>&1; then
+ PGI_CXX=yes
+ compiler=pgicc
+else
+  PGI_CXX=no
+fi])])
diff --git a/tvmet-1.7.1/config/ac_set_compiler.m4 b/tvmet-1.7.1/config/ac_set_compiler.m4
new file mode 100644
index 0000000..df16e58
--- /dev/null
+++ b/tvmet-1.7.1/config/ac_set_compiler.m4
@@ -0,0 +1,21 @@
+dnl $Id: ac_set_compiler.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl AC_SET_COMPILER: borrowed from blitz++
+dnl
+
+AC_DEFUN([AC_SET_COMPILER],
+  [cxxwith=`echo $1 | sed -e 's/ /@/'`
+   case "$cxxwith" in
+     *:*@*)                 # Full initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)@.*/\1/p'`
+       CXXFLAGS=`echo "$cxxwith" | sed  -n -e 's/.*:.*@\(.*\)/\1/p'`
+     ;;
+     *:*)                   # Simple initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)/\1/p'`
+       CXXFLAGS=$3
+     ;;
+     *)                     # Default values
+       CXX=$2
+       CXXFLAGS=$3
+     ;;
+   esac])
diff --git a/tvmet-1.7.1/config/config.guess b/tvmet-1.7.1/config/config.guess
new file mode 100755
index 0000000..0773d0f
--- /dev/null
+++ b/tvmet-1.7.1/config/config.guess
@@ -0,0 +1,1456 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-03'
+
+# 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
+# (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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# 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 <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# 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.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+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
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pegasos:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *: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
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    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 ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	case `uname -p` in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+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_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/tvmet-1.7.1/config/config.h.in b/tvmet-1.7.1/config/config.h.in
new file mode 100644
index 0000000..aff6d0e
--- /dev/null
+++ b/tvmet-1.7.1/config/config.h.in
@@ -0,0 +1,126 @@
+/* config/config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* define if the compiler has complex<T> */
+#undef HAVE_COMPLEX
+
+/* define if the compiler has complex math functions */
+#undef HAVE_COMPLEX_MATH1
+
+/* define if the compiler has more complex math functions */
+#undef HAVE_COMPLEX_MATH2
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `floor' function. */
+#undef HAVE_FLOOR
+
+/* Define if the compiler supports IEEE math library */
+#undef HAVE_IEEE_MATH
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+#undef HAVE_LIBDL
+
+/* Define to 1 if long double works and has more range or precision than
+   double. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define if the compiler supports the long_long type */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if the compiler supports the mutable keyword */
+#undef HAVE_MUTABLE
+
+/* Define if the compiler implements namespaces */
+#undef HAVE_NAMESPACES
+
+/* Define if the compiler supports partial specialization */
+#undef HAVE_PARTIAL_SPECIALIZATION
+
+/* Define to 1 if you have the `pow' function. */
+#undef HAVE_POW
+
+/* Define to 1 if you have the `rint' function. */
+#undef HAVE_RINT
+
+/* Define to 1 if you have the `sqrt' function. */
+#undef HAVE_SQRT
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define if the compiler supports SYSV math library */
+#undef HAVE_SYSV_MATH
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define if the compiler recognizes typename */
+#undef HAVE_TYPENAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
+   supported. Do not define if restrict is supported directly. */
+#undef restrict
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/tvmet-1.7.1/config/config.sub b/tvmet-1.7.1/config/config.sub
new file mode 100755
index 0000000..264f820
--- /dev/null
+++ b/tvmet-1.7.1/config/config.sub
@@ -0,0 +1,1549 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-02-23'
+
+# 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
+# (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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# 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.
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-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)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| 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 \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| msp430-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -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* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/tvmet-1.7.1/config/depcomp b/tvmet-1.7.1/config/depcomp
new file mode 100755
index 0000000..9e5522d
--- /dev/null
+++ b/tvmet-1.7.1/config/depcomp
@@ -0,0 +1,520 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2003-11-08.23
+
+# Copyright (C) 1999, 2000, 2003 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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 Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit 0
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit 0
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# 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
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## 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).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    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.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## 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 ' ' '
+' < "$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.
+## 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"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  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
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | 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"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # 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.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # 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,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$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"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -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
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    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 \'.
+  # Do two passes, one to just change these to
+  # `$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"
+  ;;
+
+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
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # 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:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$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"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## 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"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# 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-end: "$"
+# End:
diff --git a/tvmet-1.7.1/config/install-sh b/tvmet-1.7.1/config/install-sh
new file mode 100755
index 0000000..77bc381
--- /dev/null
+++ b/tvmet-1.7.1/config/install-sh
@@ -0,0 +1,316 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2004-02-15.20
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=
+transform_arg=
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+
+usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 -d DIRECTORIES...
+
+In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
+In the second, create the directory path DIR.
+
+Options:
+-b=TRANSFORMBASENAME
+-c         copy source (using $cpprog) instead of moving (using $mvprog).
+-d         create directories instead of installing files.
+-g GROUP   $chgrp installed files to GROUP.
+-m MODE    $chmod installed files to MODE.
+-o USER    $chown installed files to USER.
+-s         strip installed files (using $stripprog).
+-t=TRANSFORM
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+        shift
+        continue;;
+
+    -c) instcmd=$cpprog
+        shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit 0;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+        shift
+        continue;;
+
+    --version) echo "$0 $scriptversion"; exit 0;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+	test -n "$dir_arg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+	for arg
+	do
+          if test -n "$dstarg"; then
+	    # $@ is not empty: it contains at least $arg.
+	    set fnord "$@" "$dstarg"
+	    shift # fnord
+	  fi
+	  shift # arg
+	  dstarg=$arg
+	done
+	break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      instcmd=:
+      chmodcmd=
+    else
+      instcmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      dst=$dst/`basename "$src"`
+    fi
+  fi
+
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+  # Make sure that the destination directory exists.
+
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+	 '
+    IFS="${IFS-$defaultIFS}"
+
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    IFS=$oIFS
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp" || lasterr=$?
+	# mkdir can fail with a `File exist' error in case several
+	# install-sh are creating the directory concurrently.  This
+	# is OK.
+	test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; }
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
+
+  if test -n "$dir_arg"; then
+    $doit $instcmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+  else
+    # If we're going to rename the final executable, determine the name now.
+    if test -z "$transformarg"; then
+      dstfile=`basename "$dst"`
+    else
+      dstfile=`basename "$dst" $transformbasename \
+               | sed $transformarg`$transformbasename
+    fi
+
+    # don't allow the sed command to completely eliminate the filename.
+    test -z "$dstfile" && dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+    trap '(exit $?); exit' 1 2 13 15
+
+    # Move or copy the file name to the temp name
+    $doit $instcmd "$src" "$dsttmp" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $instcmd $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now remove or move aside any old file at destination location.  We
+    # try this two ways since rm can't unlink itself on some systems and
+    # the destination file might be busy for other reasons.  In this case,
+    # the final cleanup might fail but the new file should still install
+    # successfully.
+    {
+      if test -f "$dstdir/$dstfile"; then
+        $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+        || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+        || {
+	  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+	  (exit 1); exit
+        }
+      else
+        :
+      fi
+    } &&
+
+    # Now rename the file to the real destination.
+    $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+  fi || { (exit 1); exit; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/tvmet-1.7.1/config/ltmain.sh b/tvmet-1.7.1/config/ltmain.sh
new file mode 100644
index 0000000..70f0b2d
--- /dev/null
+++ b/tvmet-1.7.1/config/ltmain.sh
@@ -0,0 +1,6422 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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
+# the Free Software Foundation; either version 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# 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.
+
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5.6
+TIMESTAMP=" (1.1220.2.94 2004/04/10 16:27:27)"
+
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell, and then maybe $echo will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+  SP2NL="tr '\100' '\n'"
+  NL2SP="tr '\r\n' '\100\100'"
+  ;;
+ *) # Assume ASCII based system
+  SP2NL="tr '\040' '\012'"
+  NL2SP="tr '\015\012' '\040\040'"
+  ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+  save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+: ${IFS=" 	
+"}
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+  $echo "$modename: not configured to build any kind of library" 1>&2
+  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit $EXIT_FAILURE
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid () {
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 | \
+	sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+      if test "X$win32_nmres" = "Ximport" ; then
+        win32_libid_type="x86 archive import"
+      else
+        win32_libid_type="x86 archive static"
+      fi
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag () {
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	case $arg in
+	  *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	CC_quoted="$CC_quoted $arg"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	    # Double-quote args containing other shell metacharacters.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    CC_quoted="$CC_quoted $arg"
+	  done
+	    case "$@ " in
+	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  $echo "$modename: unable to infer tagged configuration"
+	  $echo "$modename: specify a tag with \`--tag'" 1>&2
+	  exit $EXIT_FAILURE
+#        else
+#          $echo "$modename: using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+  arg="$1"
+  shift
+
+  case $arg in
+  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    case $prev in
+    execute_dlfiles)
+      execute_dlfiles="$execute_dlfiles $arg"
+      ;;
+    tag)
+      tagname="$arg"
+      preserve_args="${preserve_args}=$arg"
+
+      # Check whether tagname contains only valid characters
+      case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+	$echo "$progname: invalid tag name: $tagname" 1>&2
+	exit $EXIT_FAILURE
+	;;
+      esac
+
+      case $tagname in
+      CC)
+	# Don't test for the "default" C tag, as we know, it's there, but
+	# not specially marked.
+	;;
+      *)
+	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
+	  taglist="$taglist $tagname"
+	  # Evaluate the configuration.
+	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+	else
+	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
+	fi
+	;;
+      esac
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
+    prev=
+    prevopt=
+    continue
+  fi
+
+  # Have we seen a non-optional argument yet?
+  case $arg in
+  --help)
+    show_help=yes
+    ;;
+
+  --version)
+    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    $echo
+    $echo "Copyright (C) 2003  Free Software Foundation, Inc."
+    $echo "This is free software; see the source for copying conditions.  There is NO"
+    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+    exit $EXIT_SUCCESS
+    ;;
+
+  --config)
+    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+    done
+    exit $EXIT_SUCCESS
+    ;;
+
+  --debug)
+    $echo "$progname: enabling shell trace mode"
+    set -x
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --dry-run | -n)
+    run=:
+    ;;
+
+  --features)
+    $echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $echo "enable shared libraries"
+    else
+      $echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $echo "enable static libraries"
+    else
+      $echo "disable static libraries"
+    fi
+    exit $EXIT_SUCCESS
+    ;;
+
+  --finish) mode="finish" ;;
+
+  --mode) prevopt="--mode" prev=mode ;;
+  --mode=*) mode="$optarg" ;;
+
+  --preserve-dup-deps) duplicate_deps="yes" ;;
+
+  --quiet | --silent)
+    show=:
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --tag) prevopt="--tag" prev=tag ;;
+  --tag=*)
+    set tag "$optarg" ${1+"$@"}
+    shift
+    prev=tag
+    preserve_args="$preserve_args --tag"
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
+  -*)
+    $echo "$modename: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+
+  *)
+    nonopt="$arg"
+    break
+    ;;
+  esac
+done
+
+if test -n "$prevopt"; then
+  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+  # Infer the operation mode.
+  if test -z "$mode"; then
+    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+    $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+    case $nonopt in
+    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+      mode=link
+      for arg
+      do
+	case $arg in
+	-c)
+	   mode=compile
+	   break
+	   ;;
+	esac
+      done
+      ;;
+    *db | *dbx | *strace | *truss)
+      mode=execute
+      ;;
+    *install*|cp|mv)
+      mode=install
+      ;;
+    *rm)
+      mode=uninstall
+      ;;
+    *)
+      # If we have no mode, but dlfiles were specified, then do execute mode.
+      test -n "$execute_dlfiles" && mode=execute
+
+      # Just use the default operation mode.
+      if test -z "$mode"; then
+	if test -n "$nonopt"; then
+	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+	else
+	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+	fi
+      fi
+      ;;
+    esac
+  fi
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$modename --help --mode=$mode' for more information."
+
+  # These modes are in order of execution frequency so that they run quickly.
+  case $mode in
+  # libtool compile mode
+  compile)
+    modename="$modename: compile"
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+
+    for arg
+    do
+      case "$arg_mode" in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  if test -n "$libobj" ; then
+	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-static | -prefer-pic | -prefer-non-pic)
+	  later="$later $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+ 	  for arg in $args; do
+	    IFS="$save_ifs"
+
+	    # Double-quote args containing other shell metacharacters.
+	    # Many Bourne shells cannot handle close brackets correctly
+	    # in scan sets, so we specify it separately.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    lastarg="$lastarg $arg"
+	  done
+	  IFS="$save_ifs"
+	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+	  # Add the arguments to base_compile.
+	  base_compile="$base_compile $lastarg"
+	  continue
+	  ;;
+
+	* )
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+      case $lastarg in
+      # Double-quote args containing other shell metacharacters.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	lastarg="\"$lastarg\""
+	;;
+      esac
+
+      base_compile="$base_compile $lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      $echo "$modename: you must specify an argument for -Xcompile"
+      exit $EXIT_FAILURE
+      ;;
+    target)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *)
+      # Get the name of the library object.
+      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSifmso]'
+    case $libobj in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.ii) xform=ii ;;
+    *.class) xform=class ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.f90) xform=f90 ;;
+    *.for) xform=for ;;
+    *.java) xform=java ;;
+    esac
+
+    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+    case $libobj in
+    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+    *)
+      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -static)
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$xdir" = "X$obj"; then
+      xdir=
+    else
+      xdir=$xdir/
+    fi
+    lobj=${xdir}$objdir/$objname
+
+    if test -z "$base_compile"; then
+      $echo "$modename: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    $run $rm $removelist
+    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
+	$show "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+      $echo $srcfile > "$lockfile"
+    fi
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+
+    $run $rm "$libobj" "${libobj}T"
+
+    # Create a libtool object file (analogous to a ".la" file),
+    # but don't create it if we're doing a dry run.
+    test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $srcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      fi
+
+      if test ! -d "${xdir}$objdir"; then
+	$show "$mkdir ${xdir}$objdir"
+	$run $mkdir ${xdir}$objdir
+	status=$?
+	if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+	  exit $status
+	fi
+      fi
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	command="$command -o $lobj"
+      fi
+
+      $run $rm "$lobj" "$output_obj"
+
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	test -n "$output_obj" && $run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	$show "$mv $output_obj $lobj"
+	if $run $mv $output_obj $lobj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Append the name of the PIC object to the libtool object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+        suppress_output=' >/dev/null 2>&1'
+      fi
+    else
+      # No PIC object so indicate it doesn't exist in the libtool
+      # object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      else
+	command="$base_compile $srcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $run $rm "$obj" "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	$show "$mv $output_obj $obj"
+	if $run $mv $output_obj $obj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+    else
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+    fi
+
+    $run $mv "${libobj}T" "${libobj}"
+
+    # Unlock the critical section if it was locked
+    if test "$need_locks" != no; then
+      $run $rm "$lockfile"
+    fi
+
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool link mode
+  link | relink)
+    modename="$modename: link"
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args="$nonopt"
+    base_compile="$nonopt $@"
+    compile_command="$nonopt"
+    finalize_command="$nonopt"
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -all-static | -static)
+	if test "X$arg" = "X-all-static"; then
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	else
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	fi
+	build_libtool_libs=no
+	build_old_libs=yes
+	prefer_static_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+	;;
+      *) qarg=$arg ;;
+      esac
+      libtool_args="$libtool_args $qarg"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  compile_command="$compile_command @OUTPUT@"
+	  finalize_command="$finalize_command @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    compile_command="$compile_command @SYMFILE@"
+	    finalize_command="$finalize_command @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      dlfiles="$dlfiles $arg"
+	    else
+	      dlprefiles="$dlprefiles $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  if test ! -f "$arg"; then
+	    $echo "$modename: symbol file \`$arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat $save_arg`
+	    do
+#	      moreargs="$moreargs $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		# If there is no directory component, then add one.
+		case $arg in
+		*/* | *\\*) . $arg ;;
+		*) . ./$arg ;;
+		esac
+
+		if test -z "$pic_object" || \
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none && \
+		   test "$non_pic_object" = none; then
+		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+
+		# Extract subdirectory from the argument.
+		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		if test "X$xdir" = "X$arg"; then
+		  xdir=
+		else
+		  xdir="$xdir/"
+		fi
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      dlfiles="$dlfiles $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    dlprefiles="$dlprefiles $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  libobjs="$libobjs $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if test -z "$run"; then
+		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+		  exit $EXIT_FAILURE
+		else
+		  # Dry-run case.
+
+		  # Extract subdirectory from the argument.
+		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		  if test "X$xdir" = "X$arg"; then
+		    xdir=
+		  else
+		    xdir="$xdir/"
+		  fi
+
+		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+		  libobjs="$libobjs $pic_object"
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		fi
+	      fi
+	    done
+	  else
+	    $echo "$modename: link input file \`$save_arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    $echo "$modename: only absolute run-paths are allowed" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) rpath="$rpath $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) xrpath="$xrpath $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	xcompiler)
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $wl$qarg"
+	  prev=
+	  compile_command="$compile_command $wl$qarg"
+	  finalize_command="$finalize_command $wl$qarg"
+	  continue
+	  ;;
+	xcclinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	shrext)
+  	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  compile_command="$compile_command $link_static_flag"
+	  finalize_command="$finalize_command $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+	continue
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  $echo "$modename: more than one -exported-symbols argument is not allowed"
+	  exit $EXIT_FAILURE
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  compile_command="$compile_command $arg"
+	  finalize_command="$finalize_command $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  if test -z "$absdir"; then
+	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "*) ;;
+	*)
+	  deplibs="$deplibs -L$dir"
+	  lib_search_path="$lib_search_path $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-mingw* | *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    deplibs="$deplibs -framework System"
+	    continue
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # gcc -m* arguments should be passed to the linker via $compiler_flags
+      # in order to pass architecture information to the linker
+      # (e.g. 32 vs 64-bit).  This may also be accomplished via -Wl,-mfoo
+      # but this is not reliable with gcc because gcc may use -mfoo to
+      # select a different linker, different libraries, etc, while
+      # -Wl,-mfoo simply passes -mfoo to the linker.
+      -m*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+        compile_command="$compile_command $arg"
+        finalize_command="$finalize_command $arg"
+        if test "$with_gcc" = "yes" ; then
+          compiler_flags="$compiler_flags $arg"
+        fi
+        continue
+        ;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # in order for the loader to find any dlls it needs.
+	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  $echo "$modename: only absolute run-paths are allowed" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) xrpath="$xrpath $dir" ;;
+	esac
+	continue
+	;;
+
+      -static)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -Wc,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Wl,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $wl$flag"
+	  linker_flags="$linker_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # Some other compiler flag.
+      -* | +*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+
+      *.$objext)
+	# A standard object.
+	objs="$objs $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  # If there is no directory component, then add one.
+	  case $arg in
+	  */* | *\\*) . $arg ;;
+	  *) . ./$arg ;;
+	  esac
+
+	  if test -z "$pic_object" || \
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none && \
+	     test "$non_pic_object" = none; then
+	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	  if test "X$xdir" = "X$arg"; then
+	    xdir=
+ 	  else
+	    xdir="$xdir/"
+	  fi
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		dlfiles="$dlfiles $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      dlprefiles="$dlprefiles $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    libobjs="$libobjs $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if test -z "$run"; then
+	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+	    exit $EXIT_FAILURE
+	  else
+	    # Dry-run case.
+
+	    # Extract subdirectory from the argument.
+	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	    if test "X$xdir" = "X$arg"; then
+	      xdir=
+	    else
+	      xdir="$xdir/"
+	    fi
+
+	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+	    libobjs="$libobjs $pic_object"
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	deplibs="$deplibs $arg"
+	old_deplibs="$old_deplibs $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  dlfiles="$dlfiles $arg"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  dlprefiles="$dlprefiles $arg"
+	  prev=
+	else
+	  deplibs="$deplibs $arg"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+      fi
+    done # argument parsing loop
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$output_objdir" = "X$output"; then
+      output_objdir="$objdir"
+    else
+      output_objdir="$output_objdir/$objdir"
+    fi
+    # Create the object directory.
+    if test ! -d "$output_objdir"; then
+      $show "$mkdir $output_objdir"
+      $run $mkdir $output_objdir
+      status=$?
+      if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+	exit $status
+      fi
+    fi
+
+    # Determine the type of output
+    case $output in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      duplicate_compiler_generated_deps=yes
+      ;;
+    *)
+      duplicate_compiler_generated_deps=$duplicate_deps
+      ;;
+    esac
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if test "X$duplicate_deps" = "Xyes" ; then
+	case "$libs " in
+	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  esac
+	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+    case $linkmode in
+    lib)
+	passes="conv link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+    for pass in $passes; do
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+	    continue
+	  fi
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if (${SED} -e '2q' $lib |
+                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		  library_names=
+		  old_library=
+		  case $lib in
+		  */* | *\\*) . $lib ;;
+		  *) . ./$lib ;;
+		  esac
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+		    test "X$ladir" = "X$lib" && ladir="."
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+	        ;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  *)
+	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) xrpath="$xrpath $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la) lib="$deplib" ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    if test "$deplibs_check_method" != pass_all; then
+	      $echo
+	      $echo "*** Warning: Trying to link with static lib archive $deplib."
+	      $echo "*** I have the capability to make that library automatically link in when"
+	      $echo "*** you link to this library.  But I can only do this if you have a"
+	      $echo "*** shared version of the library, which you do not appear to have"
+	      $echo "*** because the file extensions .$libext of this argument makes me believe"
+	      $echo "*** that it is just a static archive that I should not used here."
+	    else
+	      $echo
+	      $echo "*** Warning: Linking the shared library $output against the"
+	      $echo "*** static library $deplib is not portable!"
+	      deplibs="$deplib $deplibs"
+	    fi
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      newdlprefiles="$newdlprefiles $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      newdlfiles="$newdlfiles $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  $echo "$modename: cannot find the library \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$ladir" = "X$lib" && ladir="."
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+
+	# Read the .la file
+	case $lib in
+	*/* | *\\*) . $lib ;;
+	*) . ./$lib ;;
+	esac
+
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	      exit $EXIT_FAILURE
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    convenience="$convenience $ladir/$objdir/$old_library"
+	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+              if test "X$duplicate_deps" = "Xyes" ; then
+	        case "$tmp_libs " in
+	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	        esac
+              fi
+	      tmp_libs="$tmp_libs $deplib"
+	    done
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	for l in $old_library $library_names; do
+	  linklib="$l"
+	done
+	if test -z "$linklib"; then
+	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	  else
+	    newdlfiles="$newdlfiles $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$libdir"
+	    absdir="$libdir"
+	  fi
+	else
+	  dir="$ladir/$objdir"
+	  absdir="$abs_ladir/$objdir"
+	  # Remove this search path later
+	  notinst_path="$notinst_path $abs_ladir"
+	fi # $installed = yes
+	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+	  # are required to link).
+	  if test -n "$old_library"; then
+	    newdlprefiles="$newdlprefiles $dir/$old_library"
+	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+	  elif test -n "$dlname"; then
+	    newdlprefiles="$newdlprefiles $dir/$dlname"
+	  else
+	    newdlprefiles="$newdlprefiles $dir/$linklib"
+	  fi
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  newlib_search_path="$newlib_search_path $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var"; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath " in
+	      *" $dir "*) ;;
+	      *" $absdir "*) ;;
+	      *) temp_rpath="$temp_rpath $dir" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	if test -n "$library_names" &&
+	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	  if test "$installed" = no; then
+	    notinst_deplibs="$notinst_deplibs $lib"
+	    need_relink=yes
+	  fi
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on
+	  # some systems (darwin)
+	  if test "$shouldnotlink" = yes && test "$pass" = link ; then
+	    $echo
+	    if test "$linkmode" = prog; then
+	      $echo "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $echo "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $echo "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    realname="$2"
+	    shift; shift
+	    libname=`eval \\$echo \"$libname_spec\"`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw*)
+		major=`expr $current - $age`
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      $show "extracting exported symbol list from \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$extract_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      $show "generating import library for \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$old_archive_from_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a module then we can not link against
+		    # it, someone is ignoring the new warnings I added
+		    if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
+		      $echo "** Warning, lib $linklib is a module, not a shared library"
+		      if test -z "$old_library" ; then
+		        $echo
+		        $echo "** And there doesn't seem to be a static archive available"
+		        $echo "** The link will probably fail, sorry"
+		      else
+		        add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case "$libdir" in
+		    [\\/]*)
+		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      $echo "$modename: configuration error: unsupported hardcode properties"
+	      exit $EXIT_FAILURE
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes && \
+		 test "$hardcode_minus_L" != yes && \
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+	        add="$inst_prefix_dir$libdir/$linklib"
+	      else
+	        add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case "$libdir" in
+		  [\\/]*)
+		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    $echo
+	    $echo "*** Warning: This system can not link to static lib archive $lib."
+	    $echo "*** I have the capability to make that library automatically link in when"
+	    $echo "*** you link to this library.  But I can only do this if you have a"
+	    $echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      $echo "*** But as you try to build a module library, libtool will still create "
+	      $echo "*** a static module, that should work as long as the dlopening application"
+	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		$echo
+		$echo "*** However, this would only work if libtool was able to extract symbol"
+		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		$echo "*** not find such a program.  So, this module is probably useless."
+		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    convenience="$convenience $dir/$old_library"
+	    old_convenience="$old_convenience $dir/$old_library"
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) xrpath="$xrpath $temp_xrpath";;
+		   esac;;
+	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  newlib_search_path="$newlib_search_path $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+		test "X$dir" = "X$deplib" && dir="."
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if grep "^installed=no" $deplib > /dev/null; then
+		  path="$absdir/$objdir"
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  if test -z "$libdir"; then
+		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		    exit $EXIT_FAILURE
+		  fi
+		  if test "$absdir" != "$libdir"; then
+		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+		  fi
+		  path="$absdir"
+		fi
+		depdepl=
+		case $host in
+		*-*-darwin*)
+		  # we do not want to link against static libs,
+		  # but need to link against shared
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$path/$depdepl" ; then
+		      depdepl="$path/$depdepl"
+		    fi
+		    # do not add paths which are already there
+		    case " $newlib_search_path " in
+		    *" $path "*) ;;
+		    *) newlib_search_path="$newlib_search_path $path";;
+		    esac
+		  fi
+		  path=""
+		  ;;
+		*)
+		  path="-L$path"
+		  ;;
+		esac
+		;;
+	      -l*)
+		case $host in
+		*-*-darwin*)
+		  # Again, we only want to link against shared libraries
+		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+		  for tmp in $newlib_search_path ; do
+		    if test -f "$tmp/lib$tmp_libs.dylib" ; then
+		      eval depdepl="$tmp/lib$tmp_libs.dylib"
+		      break
+		    fi
+		  done
+		  path=""
+		  ;;
+		*) continue ;;
+		esac
+		;;
+	      *) continue ;;
+	      esac
+	      case " $deplibs " in
+	      *" $depdepl "*) ;;
+	      *) deplibs="$depdepl $deplibs" ;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$deplibs $path" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) lib_search_path="$lib_search_path $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      esac
+	      ;;
+	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  tmp_libs="$tmp_libs $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+      fi
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	if test "$module" = no; then
+	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+	  exit $EXIT_FAILURE
+	else
+	  $echo
+	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
+	  $echo "*** objects $objs is not portable!"
+	  libobjs="$libobjs $objs"
+	fi
+      fi
+
+      if test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+      fi
+
+      set dummy $rpath
+      if test "$#" -gt 2; then
+	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+      fi
+      install_libdir="$2"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	if test -n "$vinfo"; then
+	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+	fi
+
+	if test -n "$release"; then
+	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+	fi
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	IFS="$save_ifs"
+
+	if test -n "$8"; then
+	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$2"
+	  number_minor="$3"
+	  number_revision="$4"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows)
+	    current=`expr $number_major + $number_minor`
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    current=`expr $number_major + $number_minor - 1`
+	    age="$number_minor"
+	    revision="$number_minor"
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$2"
+	  revision="$3"
+	  age="$4"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	case $revision in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	case $age in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  minor_current=`expr $current + 1`
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current";
+	  ;;
+
+	irix | nonstopux)
+	  major=`expr $current - $age + 1`
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    iface=`expr $revision - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  major=.`expr $current - $age`
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    iface=`expr $current - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  verstring="$verstring:${current}.0"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  major=`expr $current - $age`
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
+	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+      fi
+
+      if test "$mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$echo "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+	         then
+		   continue
+		 fi
+	       fi
+	       removelist="$removelist $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	if test -n "$removelist"; then
+	  $show "${rm}r $removelist"
+	  $run ${rm}r $removelist
+	fi
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      for path in $notinst_path; do
+	lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+	deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+	dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+      done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  temp_xrpath="$temp_xrpath -R$libdir"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) dlfiles="$dlfiles $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) dlprefiles="$dlprefiles $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    deplibs="$deplibs -framework System"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+ 	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      deplibs="$deplibs -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $rm conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $rm conftest
+	  $LTCC -o conftest conftest.c $deplibs
+	  if test "$?" -eq 0 ; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      name="`expr $i : '-l\(.*\)'`"
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" -ne "0"; then
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    newdeplibs="$newdeplibs $i"
+		    i=""
+		    ;;
+		  esac
+	        fi
+		if test -n "$i" ; then
+		  libname=`eval \\$echo \"$libname_spec\"`
+		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		  set dummy $deplib_matches
+		  deplib_match=$2
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    newdeplibs="$newdeplibs $i"
+		  else
+		    droppeddeps=yes
+		    $echo
+		    $echo "*** Warning: dynamic linker does not accept needed library $i."
+		    $echo "*** I have the capability to make that library automatically link in when"
+		    $echo "*** you link to this library.  But I can only do this if you have a"
+		    $echo "*** shared version of the library, which I believe you do not have"
+		    $echo "*** because a test_compile did reveal that the linker did not use it for"
+		    $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      name="`expr $i : '-l\(.*\)'`"
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" != "0"; then
+		$rm conftest
+		$LTCC -o conftest conftest.c $i
+		# Did it work?
+		if test "$?" -eq 0 ; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      newdeplibs="$newdeplibs $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval \\$echo \"$libname_spec\"`
+		    deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		    set dummy $deplib_matches
+		    deplib_match=$2
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      newdeplibs="$newdeplibs $i"
+		    else
+		      droppeddeps=yes
+		      $echo
+		      $echo "*** Warning: dynamic linker does not accept needed library $i."
+		      $echo "*** I have the capability to make that library automatically link in when"
+		      $echo "*** you link to this library.  But I can only do this if you have a"
+		      $echo "*** shared version of the library, which you do not appear to have"
+		      $echo "*** because a test_compile did reveal that the linker did not use this one"
+		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  $echo
+		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
+		  $echo "***  make it link in!  You will probably need to install it or some"
+		  $echo "*** library that it depends on before this library will be fully"
+		  $echo "*** functional.  Installing it before continuing would be even better."
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method
+	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+            if test "$name" != "" && test  "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null \
+			 | grep " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+			 | ${SED} 10q \
+			 | $EGREP "$file_magic_regex" > /dev/null; then
+			newdeplibs="$newdeplibs $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+	    if test -n "$name" && test "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval $echo \"$potent_lib\" 2>/dev/null \
+		        | ${SED} 10q \
+		        | $EGREP "$match_pattern_regex" > /dev/null; then
+		      newdeplibs="$newdeplibs $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+	    -e 's/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+	    done
+	  fi
+	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
+	    | grep . >/dev/null; then
+	    $echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      $echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    $echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	  fi
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library is the System framework
+	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    $echo
+	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
+	    $echo "*** a static module, that should work as long as the dlopening"
+	    $echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      $echo
+	      $echo "*** However, this would only work if libtool was able to extract symbol"
+	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      $echo "*** not find such a program.  So, this module is probably useless."
+	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    $echo "*** The inter-library dependencies that have been dropped here will be"
+	    $echo "*** automatically added whenever a program is linked with this library"
+	    $echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      $echo
+	      $echo "*** Since this library must not contain undefined symbols,"
+	      $echo "*** because either the platform does not support them or"
+	      $echo "*** it was explicitly requested with -no-undefined,"
+	      $echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		dep_rpath="$dep_rpath $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      rpath="$rpath$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	realname="$2"
+	shift; shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	for link
+	do
+	  linknames="$linknames $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $cmds; do
+	      IFS="$save_ifs"
+	      eval cmd=\"$cmd\"
+	      if len=`expr "X$cmd" : ".*"` &&
+	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	        $show "$cmd"
+	        $run eval "$cmd" || exit $?
+	        skipped_export=false
+	      else
+	        # The command line is too long to execute in one step.
+	        $show "using reloadable object file for export list..."
+	        skipped_export=:
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex"; then
+	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+		case " $convenience " in
+		*" $test_deplib "*) ;;
+		*)
+			tmp_deplibs="$tmp_deplibs $test_deplib"
+			;;
+		esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    $show "${rm}r $gentop"
+	    $run ${rm}r "$gentop"
+	    $show "$mkdir $gentop"
+	    $run $mkdir "$gentop"
+	    status=$?
+	    if test "$status" -ne 0 && test ! -d "$gentop"; then
+	      exit $status
+	    fi
+	    generated="$generated $gentop"
+
+	    for xlib in $convenience; do
+	      # Extract the objects.
+	      case $xlib in
+	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	      *) xabs=`pwd`"/$xlib" ;;
+	      esac
+	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	      xdir="$gentop/$xlib"
+
+	      $show "${rm}r $xdir"
+	      $run ${rm}r "$xdir"
+	      $show "$mkdir $xdir"
+	      $run $mkdir "$xdir"
+	      status=$?
+	      if test "$status" -ne 0 && test ! -d "$xdir"; then
+		exit $status
+	      fi
+	      # We will extract separately just the conflicting names and we will no
+	      # longer touch any unique names. It is faster to leave these extract
+	      # automatically by $AR in one run.
+	      $show "(cd $xdir && $AR x $xabs)"
+	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	      if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+		:
+	      else
+		$echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+		$echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+		$AR t "$xabs" | sort | uniq -cd | while read -r count name
+		do
+		  i=1
+		  while test "$i" -le "$count"
+		  do
+		   # Put our $i before any first dot (extension)
+		   # Never overwrite any file
+		   name_to="$name"
+		   while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+		   do
+		     name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+		   done
+		   $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+		   $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+		   i=`expr $i + 1`
+		  done
+		done
+	      fi
+
+	      libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+	    done
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  linker_flags="$linker_flags $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	  eval test_cmds=\"$archive_expsym_cmds\"
+	  cmds=$archive_expsym_cmds
+	else
+	  eval test_cmds=\"$archive_cmds\"
+	  cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
+	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise.
+	  $echo "creating reloadable object files..."
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  delfiles=
+	  last_robj=
+	  k=1
+	  output=$output_objdir/$save_output-${k}.$objext
+	  # Loop over the list of objects to be linked.
+	  for obj in $save_libobjs
+	  do
+	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+	    if test "X$objlist" = X ||
+	       { len=`expr "X$test_cmds" : ".*"` &&
+		 test "$len" -le "$max_cmd_len"; }; then
+	      objlist="$objlist $obj"
+	    else
+	      # The command $test_cmds is almost too long, add a
+	      # command to the queue.
+	      if test "$k" -eq 1 ; then
+		# The first file doesn't have a previous command to add.
+		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+	      else
+		# All subsequent reloadable object files will link in
+		# the last one created.
+		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+	      fi
+	      last_robj=$output_objdir/$save_output-${k}.$objext
+	      k=`expr $k + 1`
+	      output=$output_objdir/$save_output-${k}.$objext
+	      objlist=$obj
+	      len=1
+	    fi
+	  done
+	  # Handle the remaining objects by creating one last
+	  # reloadable object file.  All subsequent reloadable object
+	  # files will link in the last one created.
+	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+	  if ${skipped_export-false}; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    libobjs=$output
+	    # Append the command to create the export file.
+	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+          fi
+
+	  # Set up a command to remove the reloadale object files
+	  # after they are used.
+	  i=0
+	  while test "$i" -lt "$k"
+	  do
+	    i=`expr $i + 1`
+	    delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+	  done
+
+	  $echo "creating a temporary reloadable object file: $output"
+
+	  # Loop through the commands generated above and execute them.
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $concat_cmds; do
+	    IFS="$save_ifs"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    cmds=$archive_expsym_cmds
+	  else
+	    cmds=$archive_cmds
+	    fi
+	  fi
+
+	  # Append the command to remove the reloadable object files
+	  # to the just-reset $cmds.
+	  eval cmds=\"\$cmds~\$rm $delfiles\"
+	fi
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+      fi
+
+      case $output in
+      *.lo)
+	if test -n "$objs$old_deplibs"; then
+	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	libobj="$output"
+	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $run $rm $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+	else
+	  gentop="$output_objdir/${obj}x"
+	  $show "${rm}r $gentop"
+	  $run ${rm}r "$gentop"
+	  $show "$mkdir $gentop"
+	  $run $mkdir "$gentop"
+	  status=$?
+	  if test "$status" -ne 0 && test ! -d "$gentop"; then
+	    exit $status
+	  fi
+	  generated="$generated $gentop"
+
+	  for xlib in $convenience; do
+	    # Extract the objects.
+	    case $xlib in
+	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	    *) xabs=`pwd`"/$xlib" ;;
+	    esac
+	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	    xdir="$gentop/$xlib"
+
+	    $show "${rm}r $xdir"
+	    $run ${rm}r "$xdir"
+	    $show "$mkdir $xdir"
+	    $run $mkdir "$xdir"
+	    status=$?
+	    if test "$status" -ne 0 && test ! -d "$xdir"; then
+	      exit $status
+	    fi
+	    # We will extract separately just the conflicting names and we will no
+	    # longer touch any unique names. It is faster to leave these extract
+	    # automatically by $AR in one run.
+	    $show "(cd $xdir && $AR x $xabs)"
+	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	    if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+	      :
+	    else
+	      $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+	      $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+	      $AR t "$xabs" | sort | uniq -cd | while read -r count name
+	      do
+		i=1
+		while test "$i" -le "$count"
+		do
+		 # Put our $i before any first dot (extension)
+		 # Never overwrite any file
+		 name_to="$name"
+		 while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+		 do
+		   name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+		 done
+		 $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+		 $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+		 i=`expr $i + 1`
+		done
+	      done
+	    fi
+
+	    reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+	  done
+	fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      cmds=$reload_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $run eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	cmds=$reload_cmds
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+      fi
+
+      if test -n "$gentop"; then
+	$show "${rm}r $gentop"
+	$run ${rm}r $gentop
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+      esac
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+      fi
+
+      if test "$preload" = yes; then
+	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+	   test "$dlopen_self_static" = unknown; then
+	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+	fi
+      fi
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	;;
+      esac
+
+      case $host in
+      *darwin*)
+        # Don't allow lazy linking, it breaks C++ global constructors
+        if test "$tagname" = CXX ; then
+        compile_command="$compile_command ${wl}-bind_at_load"
+        finalize_command="$finalize_command ${wl}-bind_at_load"
+        fi
+        ;;
+      esac
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      dlsyms=
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	  dlsyms="${outputname}S.c"
+	else
+	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+	fi
+      fi
+
+      if test -n "$dlsyms"; then
+	case $dlsyms in
+	"") ;;
+	*.c)
+	  # Discover the nlist of each of the dlfiles.
+	  nlist="$output_objdir/${outputname}.nm"
+
+	  $show "$rm $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Parse the name list into a source file.
+	  $show "creating $output_objdir/$dlsyms"
+
+	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+	  if test "$dlself" = yes; then
+	    $show "generating symbol list for \`$output'"
+
+	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+	    # Add our own program objects to the symbol list.
+	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	    for arg in $progfiles; do
+	      $show "extracting global C symbols from \`$arg'"
+	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	    done
+
+	    if test -n "$exclude_expsyms"; then
+	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    if test -n "$export_symbols_regex"; then
+	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    # Prepare the list of exported symbols
+	    if test -z "$export_symbols"; then
+	      export_symbols="$output_objdir/$output.exp"
+	      $run $rm $export_symbols
+	      $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	    else
+	      $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+	      $run eval 'mv "$nlist"T "$nlist"'
+	    fi
+	  fi
+
+	  for arg in $dlprefiles; do
+	    $show "extracting global C symbols from \`$arg'"
+	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+	    $run eval '$echo ": $name " >> "$nlist"'
+	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -z "$run"; then
+	    # Make sure we have at least an empty file.
+	    test -f "$nlist" || : > "$nlist"
+
+	    if test -n "$exclude_expsyms"; then
+	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	      $mv "$nlist"T "$nlist"
+	    fi
+
+	    # Try sorting and uniquifying the output.
+	    if grep -v "^: " < "$nlist" |
+		if sort -k 3 </dev/null >/dev/null 2>&1; then
+		  sort -k 3
+		else
+		  sort +2
+		fi |
+		uniq > "$nlist"S; then
+	      :
+	    else
+	      grep -v "^: " < "$nlist" > "$nlist"S
+	    fi
+
+	    if test -f "$nlist"S; then
+	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+	    else
+	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+	    fi
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+  {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	  fi
+
+	  pic_flag_for_symtable=
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+	    esac;;
+	  *-*-hpux*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag";;
+	    esac
+	  esac
+
+	  # Now compile the dynamic symbol file.
+	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+	  # Clean up the generated files.
+	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Transform the symbol file into the correct name.
+	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+	  ;;
+	*)
+	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+      else
+	# We keep going just in case the user didn't refer to
+	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+	# really was required.
+
+	# Nullify the symbol file.
+	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      fi
+
+      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+	# Replace the output file specification.
+	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	$show "$link_command"
+	$run eval "$link_command"
+	status=$?
+
+	# Delete the generated files.
+	if test -n "$dlsyms"; then
+	  $show "$rm $output_objdir/${outputname}S.${objext}"
+	  $run $rm "$output_objdir/${outputname}S.${objext}"
+	fi
+
+	exit $status
+      fi
+
+      if test -n "$shlibpath_var"; then
+	# We should set the shlibpath_var
+	rpath=
+	for dir in $temp_rpath; do
+	  case $dir in
+	  [\\/]* | [A-Za-z]:[\\/]*)
+	    # Absolute path.
+	    rpath="$rpath$dir:"
+	    ;;
+	  *)
+	    # Relative path: add a thisdir entry.
+	    rpath="$rpath\$thisdir/$dir:"
+	    ;;
+	  esac
+	done
+	temp_rpath="$rpath"
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$run $rm $output
+	# Link the executable and exit
+	$show "$link_command"
+	$run eval "$link_command" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+	$echo "$modename: \`$output' will be relinked during installation" 1>&2
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      $show "$link_command"
+      $run eval "$link_command" || exit $?
+
+      # Now create the wrapper script.
+      $show "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $echo for shipping.
+      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
+	case $progpath in
+	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+	esac
+	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if our run command is non-null.
+      if test -z "$run"; then
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    cwrappersource=`$echo ${objdir}/lt-${output}.c`
+	    cwrapper=`$echo ${output}.exe`
+	    $rm $cwrappersource $cwrapper
+	    trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "/bin/sh $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+	    cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int i;
+
+  program_name = (char *) xstrdup ((char *) basename (argv[0]));
+  newargz = XMALLOC(char *, argc+2);
+EOF
+
+	    cat >> $cwrappersource <<EOF
+  newargz[0] = "$SHELL";
+EOF
+
+	    cat >> $cwrappersource <<"EOF"
+  newargz[1] = fnqualify(argv[0]);
+  /* we know the script has the same name, without the .exe */
+  /* so make sure newargz[1] doesn't end in .exe */
+  strendzap(newargz[1],".exe");
+  for (i = 1; i < argc; i++)
+    newargz[i+1] = xstrdup(argv[i]);
+  newargz[argc+1] = NULL;
+EOF
+
+	    cat >> $cwrappersource <<EOF
+  execv("$SHELL",newargz);
+EOF
+
+	    cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void * p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha (name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+  size_t size;
+  char *p;
+  char tmp[LT_PATHMAX + 1];
+
+  assert(path != NULL);
+
+  /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha (path[0]) && path[1] == ':')
+    return xstrdup (path);
+#endif
+  if (IS_DIR_SEPARATOR (path[0]))
+    return xstrdup (path);
+
+  /* prepend the current directory */
+  /* doesn't handle '~' */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+  p = XMALLOC(char, size);
+  sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+  return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert(str != NULL);
+  assert(pat != NULL);
+
+  len = strlen(str);
+  patlen = strlen(pat);
+
+  if (patlen <= len)
+  {
+    str += len - patlen;
+    if (strcmp(str, pat) == 0)
+      *str = '\0';
+  }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+          const char * message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+	  # we should really use a build-platform specific compiler
+	  # here, but OTOH, the wrappers (shell script and this C one)
+	  # are only useful if you want to execute the "real" binary.
+	  # Since the "real" binary is built for $host, then this
+	  # wrapper might as well be built for $host, too.
+	  $run $LTCC -s -o $cwrapper $cwrappersource
+	  ;;
+	esac
+	$rm $output
+	trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+
+	$echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variable:
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    echo=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$echo works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$echo will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+	$echo >> $output "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $echo >> $output "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" || \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $mkdir \"\$progdir\"
+    else
+      $rm \"\$progdir/\$file\"
+    fi"
+
+	  $echo >> $output "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$echo \"\$relink_command_output\" >&2
+	$rm \"\$progdir/\$file\"
+	exit $EXIT_FAILURE
+      fi
+    fi
+
+    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $rm \"\$progdir/\$program\";
+      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $rm \"\$progdir/\$file\"
+  fi"
+	else
+	  $echo >> $output "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$echo >> $output "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $echo >> $output "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	# fixup the dll searchpath if we need to.
+	if test -n "$dllsearchpath"; then
+	  $echo >> $output "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	$echo >> $output "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+	case $host in
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
+	  $echo >> $output "\
+      exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	*)
+	  $echo >> $output "\
+      exec \$progdir/\$program \${1+\"\$@\"}
+"
+	  ;;
+	esac
+	$echo >> $output "\
+      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+      exit $EXIT_FAILURE
+    fi
+  else
+    # The program doesn't exist.
+    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi\
+"
+	chmod +x $output
+      fi
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	$show "${rm}r $gentop"
+	$run ${rm}r "$gentop"
+	$show "$mkdir $gentop"
+	$run $mkdir "$gentop"
+	status=$?
+	if test "$status" -ne 0 && test ! -d "$gentop"; then
+	  exit $status
+	fi
+	generated="$generated $gentop"
+
+	# Add in members from convenience archives.
+	for xlib in $addlibs; do
+	  # Extract the objects.
+	  case $xlib in
+	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	  *) xabs=`pwd`"/$xlib" ;;
+	  esac
+	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	  xdir="$gentop/$xlib"
+
+	  $show "${rm}r $xdir"
+	  $run ${rm}r "$xdir"
+	  $show "$mkdir $xdir"
+	  $run $mkdir "$xdir"
+	  status=$?
+	  if test "$status" -ne 0 && test ! -d "$xdir"; then
+	    exit $status
+	  fi
+	  # We will extract separately just the conflicting names and we will no
+	  # longer touch any unique names. It is faster to leave these extract
+	  # automatically by $AR in one run.
+	  $show "(cd $xdir && $AR x $xabs)"
+	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	  if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+	    $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+	    $AR t "$xabs" | sort | uniq -cd | while read -r count name
+	    do
+	      i=1
+	      while test "$i" -le "$count"
+	      do
+	       # Put our $i before any first dot (extension)
+	       # Never overwrite any file
+	       name_to="$name"
+	       while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+	       do
+		 name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+	       done
+	       $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+	       $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+	       i=`expr $i + 1`
+	      done
+	    done
+	  fi
+
+	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+	done
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+	eval cmds=\"$old_archive_cmds\"
+
+	if len=`expr "X$cmds" : ".*"` &&
+	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  $echo "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+	  # encoded into archives.  This makes 'ar r' malfunction in
+	  # this piecewise linking case whenever conflicting object
+	  # names appear in distinct ar calls; check, warn and compensate.
+	    if (for obj in $save_oldobjs
+	    do
+	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+	    $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+	    AR_FLAGS=cq
+	  fi
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  for obj in $save_oldobjs
+	  do
+	    oldobjs="$objlist $obj"
+	    objlist="$objlist $obj"
+	    eval test_cmds=\"$old_archive_cmds\"
+	    if len=`expr "X$test_cmds" : ".*"` &&
+	       test "$len" -le "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+	        RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+        eval cmd=\"$cmd\"
+	IFS="$save_ifs"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$generated"; then
+      $show "${rm}r$generated"
+      $run ${rm}r$generated
+    fi
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      $show "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+
+      # Only create the output if not a dry run.
+      if test -z "$run"; then
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		if test -z "$libdir"; then
+		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+		newdependency_libs="$newdependency_libs $libdir/$name"
+		;;
+	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlfiles="$newdlfiles $libdir/$name"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlprefiles="$newdlprefiles $libdir/$name"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlfiles="$newdlfiles $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlprefiles="$newdlprefiles $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $rm $output
+	  # place dlname in correct position for cygwin
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	  esac
+	  $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $echo >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      fi
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool install mode
+  install)
+    modename="$modename: install"
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+      # Aesthetically quote it.
+      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$arg "
+      arg="$1"
+      shift
+    else
+      install_prog=
+      arg="$nonopt"
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+    case $arg in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$install_prog$arg"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+	files="$files $dest"
+	dest="$arg"
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f) prev="-f" ;;
+      -g) prev="-g" ;;
+      -m) prev="-m" ;;
+      -o) prev="-o" ;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*) ;;
+
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  prev=
+	else
+	  dest="$arg"
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$install_prog $arg"
+    done
+
+    if test -z "$install_prog"; then
+      $echo "$modename: you must specify an install program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	$echo "$modename: no file or destination specified" 1>&2
+      else
+	$echo "$modename: you must specify a destination" 1>&2
+      fi
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Strip any trailing slash from the destination.
+    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$destdir" = "X$dest" && destdir=.
+      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files
+      if test "$#" -gt 2; then
+	$echo "$modename: \`$dest' is not a directory" 1>&2
+	$echo "$help" 1>&2
+	exit $EXIT_FAILURE
+      fi
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	staticlibs="$staticlibs $file"
+	;;
+
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	library_names=
+	old_library=
+	relink_command=
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  esac
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+	test "X$dir" = "X$file/" && dir=
+	dir="$dir$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  if test "$inst_prefix_dir" = "$destdir"; then
+	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  $echo "$modename: warning: relinking \`$file'" 1>&2
+	  $show "$relink_command"
+	  if $run eval "$relink_command"; then :
+	  else
+	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names
+	if test -n "$2"; then
+	  realname="$2"
+	  shift
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  $show "$install_prog $dir/$srcname $destdir/$realname"
+	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+	  if test -n "$stripme" && test -n "$striplib"; then
+	    $show "$striplib $destdir/$realname"
+	    $run eval "$striplib $destdir/$realname" || exit $?
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    for linkname
+	    do
+	      if test "$linkname" != "$realname"; then
+		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+	      fi
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  cmds=$postinstall_cmds
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+	fi
+
+	# Install the pseudo-library for information purposes.
+	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	instname="$dir/$name"i
+	$show "$install_prog $instname $destdir/$name"
+	$run eval "$install_prog $instname $destdir/$name" || exit $?
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	if test -n "$destfile"; then
+	  $show "$install_prog $file $destfile"
+	  $run eval "$install_prog $file $destfile" || exit $?
+	fi
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+	  $show "$install_prog $staticobj $staticdest"
+	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      file=`$echo $file|${SED} 's,.exe$,,'`
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin*|*mingw*)
+	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  # To insure that "foo" is sourced, and not "foo.exe",
+	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
+	  # which disallows the automatic-append-.exe behavior.
+	  case $build in
+	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+	  *) wrapperdot=${wrapper} ;;
+	  esac
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . ${wrapperdot} ;;
+	  *) . ./${wrapperdot} ;;
+	  esac
+
+	  # Check the variables that should have been set.
+	  if test -z "$notinst_deplibs"; then
+	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      # If there is no directory component, then add one.
+	      case $lib in
+	      */* | *\\*) . $lib ;;
+	      *) . ./$lib ;;
+	      esac
+	    fi
+	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  # To insure that "foo" is sourced, and not "foo.exe",
+	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
+	  # which disallows the automatic-append-.exe behavior.
+	  case $build in
+	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+	  *) wrapperdot=${wrapper} ;;
+	  esac
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . ${wrapperdot} ;;
+	  *) . ./${wrapperdot} ;;
+	  esac
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    if test "$finalize" = yes && test -z "$run"; then
+	      tmpdir="/tmp"
+	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
+	      tmpdir="$tmpdir/libtool-$$"
+	      save_umask=`umask`
+	      umask 0077
+	      if $mkdir "$tmpdir"; then
+	        umask $save_umask
+	      else
+	        umask $save_umask
+		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+		continue
+	      fi
+	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+	      outputname="$tmpdir/$file"
+	      # Replace the output file specification.
+	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+	      $show "$relink_command"
+	      if $run eval "$relink_command"; then :
+	      else
+		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+		${rm}r "$tmpdir"
+		continue
+	      fi
+	      file="$outputname"
+	    else
+	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
+	    fi
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyways
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+	    ;;
+	  esac
+	  ;;
+	esac
+	$show "$install_prog$stripme $file $destfile"
+	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+	test -n "$outputname" && ${rm}r "$tmpdir"
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      $show "$install_prog $file $oldlib"
+      $run eval "$install_prog \$file \$oldlib" || exit $?
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	$show "$old_striplib $oldlib"
+	$run eval "$old_striplib $oldlib" || exit $?
+      fi
+
+      # Do each command in the postinstall commands.
+      cmds=$old_postinstall_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$future_libdirs"; then
+      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+    fi
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      test -n "$run" && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool finish mode
+  finish)
+    modename="$modename: finish"
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+	libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  cmds=$finish_cmds
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
+	    $show "$cmd"
+	    $run eval "$cmd" || admincmds="$admincmds
+       $cmd"
+	  done
+	  IFS="$save_ifs"
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $run eval "$cmds" || admincmds="$admincmds
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    test "$show" = : && exit $EXIT_SUCCESS
+
+    $echo "----------------------------------------------------------------------"
+    $echo "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $echo "   $libdir"
+    done
+    $echo
+    $echo "If you ever happen to want to link against installed libraries"
+    $echo "in a given directory, LIBDIR, you must either use libtool, and"
+    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $echo "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $echo "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $echo "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $echo "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $echo "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $echo
+    $echo "See any operating system documentation about shared libraries for"
+    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    $echo "----------------------------------------------------------------------"
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool execute mode
+  execute)
+    modename="$modename: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$modename: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit $EXIT_FAILURE
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test ! -f "$file"; then
+	$echo "$modename: \`$file' is not a file" 1>&2
+	$echo "$help" 1>&2
+	exit $EXIT_FAILURE
+      fi
+
+      dir=
+      case $file in
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  dir="$dir/$objdir"
+	else
+	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+	;;
+
+      *)
+	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . $file ;;
+	  *) . ./$file ;;
+	  esac
+
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+      args="$args \"$file\""
+    done
+
+    if test -z "$run"; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      if test "${save_LC_ALL+set}" = set; then
+	LC_ALL="$save_LC_ALL"; export LC_ALL
+      fi
+      if test "${save_LANG+set}" = set; then
+	LANG="$save_LANG"; export LANG
+      fi
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+	$echo "export $shlibpath_var"
+      fi
+      $echo "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool clean and uninstall mode
+  clean | uninstall)
+    modename="$modename: $mode"
+    rm="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) rm="$rm $arg"; rmforce=yes ;;
+      -*) rm="$rm $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    if test -z "$rm"; then
+      $echo "$modename: you must specify an RM program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+      if test "X$dir" = "X$file"; then
+	dir=.
+	objdir="$origobjdir"
+      else
+	objdir="$dir/$origobjdir"
+      fi
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+	case " $rmdirs " in
+	  *" $objdir "*) ;;
+	  *) rmdirs="$rmdirs $objdir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if (test -L "$file") >/dev/null 2>&1 \
+	|| (test -h "$file") >/dev/null 2>&1 \
+	|| test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  . $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    rmfiles="$rmfiles $objdir/$n"
+	  done
+	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+	  if test "$mode" = uninstall; then
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      cmds=$postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      cmds=$old_postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+	  # Read the .lo file
+	  . $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" \
+	     && test "$pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" \
+	     && test "$non_pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    file=`$echo $file|${SED} 's,.exe$,,'`
+	    noexename=`$echo $name|${SED} 's,.exe$,,'`
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    rmfiles="$rmfiles $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	    relink_command=
+	    . $dir/$noexename
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      rmfiles="$rmfiles $objdir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      $show "$rm $rmfiles"
+      $run $rm $rmfiles || exit_status=1
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	$show "rmdir $dir"
+	$run rmdir $dir >/dev/null 2>&1
+      fi
+    done
+
+    exit $exit_status
+    ;;
+
+  "")
+    $echo "$modename: you must specify a MODE" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+  esac
+
+  if test -z "$exec_cmd"; then
+    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+  eval exec $exec_cmd
+  exit $EXIT_FAILURE
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+    --config          show all configuration variables
+    --debug           enable verbose shell tracing
+-n, --dry-run         display commands without modifying any files
+    --features        display basic configuration information and exit
+    --finish          same as \`--mode=finish'
+    --help            display this help message and exit
+    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
+    --tag=TAG         use configuration variables from tag TAG
+    --version         print version information
+
+MODE must be one of the following:
+
+      clean           remove files from the build directory
+      compile         compile a source file into a libtool object
+      execute         automatically set library path, then run a program
+      finish          complete the installation of libtool libraries
+      install         install libraries or executables
+      link            create a library or an executable
+      uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool@gnu.org>."
+  exit $EXIT_SUCCESS
+  ;;
+
+clean)
+  $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+compile)
+  $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -static           always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+  ;;
+
+execute)
+  $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+  ;;
+
+finish)
+  $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+  ;;
+
+install)
+  $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+  ;;
+
+link)
+  $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+		    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+		    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -static           do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+		    specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+  ;;
+
+uninstall)
+  $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+*)
+  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+  ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit $EXIT_SUCCESS
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/tvmet-1.7.1/config/missing b/tvmet-1.7.1/config/missing
new file mode 100755
index 0000000..e7ef83a
--- /dev/null
+++ b/tvmet-1.7.1/config/missing
@@ -0,0 +1,360 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2003-09-02.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@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
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# 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
+
+msg="missing on your system"
+
+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
+  ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+  -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.
+
+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'
+  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
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    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)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    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)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    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*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    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)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    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 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    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 [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f y.tab.h ]; then
+	echo >y.tab.h
+    fi
+    if [ ! -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 [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    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 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+       # We have makeinfo, but it failed.
+       exit 1
+    fi
+
+    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."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  tar)
+    shift
+    if test -n "$run"; then
+      echo 1>&2 "ERROR: \`tar' requires --run"
+      exit 1
+    fi
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case "$firstarg" in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case "$firstarg" in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    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
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/tvmet-1.7.1/config/op_doxygen_doc.m4 b/tvmet-1.7.1/config/op_doxygen_doc.m4
new file mode 100644
index 0000000..95afbd5
--- /dev/null
+++ b/tvmet-1.7.1/config/op_doxygen_doc.m4
@@ -0,0 +1,48 @@
+dnl $Id: op_doxygen_doc.m4,v 1.2 2004/04/23 23:41:52 opetzold Exp $
+dnl
+dnl OP_DOXYGEN_DOC
+dnl
+
+AC_DEFUN([OP_DOXYGEN_DOC],
+[
+  AC_MSG_CHECKING(for documentation)
+  AC_ARG_ENABLE(docs,
+    [  --enable-docs           build documentation],
+    [case "$enableval" in
+      y | yes) CONFIG_DOC=yes ;;
+      *) unset CONFIG_DOC ;;
+    esac])
+  AC_MSG_RESULT([${CONFIG_DOC:-no}])
+
+  AC_MSG_CHECKING(whether using LaTeX non-stop mode)
+  AC_ARG_ENABLE(verbose-latex,
+    [  --enable-verbose-latex  Uses LaTeX non-stop mode],
+    [case "$enableval" in
+      y | yes) CONFIG_DOC_LATEX_NONSTOP=yes ;;
+      *) unset CONFIG_DOC_LATEX_NONSTOP ;;
+    esac])
+  AC_MSG_RESULT(${CONFIG_DOC_LATEX_NONSTOP:-no})
+
+  if test x${CONFIG_DOC_LATEX_NONSTOP} = xyes; then
+     LATEX_BATCHMODE=NO
+     LATEX_MODE=nonstopmode
+  else
+     LATEX_BATCHMODE=YES
+     LATEX_MODE=batchmode
+  fi
+
+  AC_CHECK_PROG(DOXYGEN, doxygen, doxygen)
+  if test x${CONFIG_DOC} = xyes -a x"$DOXYGEN" = x; then
+    AC_MSG_ERROR([missing the doxygen tools to generate the documentation.])
+  fi
+
+  AC_CHECK_PROG(DOXYGEN_HAVE_DOT, dot, yes, no)
+
+  AM_CONDITIONAL(CONFIG_DOC,[test x"$CONFIG_DOC" = xyes])
+  dnl force docs
+  dnl AM_CONDITIONAL(CONFIG_DOC, [test x=x])
+  AC_SUBST(DOXYGEN)
+  AC_SUBST(DOXYGEN_HAVE_DOT)
+  AC_SUBST(LATEX_BATCHMODE)
+  AC_SUBST(LATEX_MODE)
+])
diff --git a/tvmet-1.7.1/configure b/tvmet-1.7.1/configure
new file mode 100755
index 0000000..1c1532d
--- /dev/null
+++ b/tvmet-1.7.1/configure
@@ -0,0 +1,23174 @@
+#! /bin/sh
+# From configure.ac Revision: 1.47 .
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for tvmet 1.7.1.
+#
+# Report bugs to <opetzold@users.sourceforge.net>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=${tagnames+${tagnames},}CXX
+
+tagnames=${tagnames+${tagnames},}F77
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='tvmet'
+PACKAGE_TARNAME='tvmet'
+PACKAGE_VERSION='1.7.1'
+PACKAGE_STRING='tvmet 1.7.1'
+PACKAGE_BUGREPORT='opetzold@users.sourceforge.net'
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CXX_OPTIMIZE_FLAGS CXX_DEBUG_FLAGS CXX_WARN_FLAGS DOXYGEN DOXYGEN_HAVE_DOT CONFIG_DOC_TRUE CONFIG_DOC_FALSE LATEX_BATCHMODE LATEX_MODE CPPUNIT_CONFIG CPPUNIT_CFLAGS CPPUNIT_LIBS CONFIG_CPPUNIT_TRUE CONFIG_CPPUNIT_FALSE CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE LN_S CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
+
+#
+# Report the --help message.
+#
+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 tvmet 1.7.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of tvmet 1.7.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+
+Options of tvmet:
+  --enable-optimize       enable compiler optimization flags
+  --enable-debug          enable compiler debug flags
+  --enable-warnings       enable compiler warning flags
+  --enable-docs           build documentation
+  --enable-verbose-latex  Uses LaTeX non-stop mode
+  --disable-cppunit       disable unit tests using cppunit
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]
+                          build shared libraries [default=yes]
+  --enable-static[=PKGS]
+                          build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-cxx=compiler     set specific C++ compiler and options (e.g. g++ (default), KCC, icc, pgCC)
+  --with-cppunit-prefix=PFX   Prefix where CppUnit is installed (optional)
+  --with-cppunit-exec-prefix=PFX  Exec prefix where CppUnit is installed (optional)
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-tags[=TAGS]
+                          include additional configurations [automatic]
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+  CXXCPP      C++ preprocessor
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <opetzold@users.sourceforge.net>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+tvmet configure 1.7.1
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by tvmet $as_me 1.7.1, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: result: Configure Tiny Vector Matrix using Expression Templates library 1.7.1" >&5
+echo "${ECHO_T}Configure Tiny Vector Matrix using Expression Templates library 1.7.1" >&6
+
+
+ac_aux_dir=
+for ac_dir in config $srcdir/config; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config $srcdir/config" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in config $srcdir/config" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+          ac_config_headers="$ac_config_headers config/config.h"
+
+
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+
+
+am__api_version="1.8"
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
+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.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='tvmet'
+ VERSION='1.7.1'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+
+
+
+
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval="$enable_maintainer_mode"
+  USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi;
+  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+# Declare variables which we want substituted in the Makefile.in's
+
+
+
+
+
+# Check whether --enable-tvmet or --disable-tvmet was given.
+if test "${enable_tvmet+set}" = set; then
+  enableval="$enable_tvmet"
+
+fi;
+
+
+echo "$as_me:$LINENO: checking for compiler" >&5
+echo $ECHO_N "checking for compiler... $ECHO_C" >&6
+
+# Check whether --with-cxx or --without-cxx was given.
+if test "${with_cxx+set}" = set; then
+  withval="$with_cxx"
+  case "$withval" in
+     KCC*)               # KAI C++  http://www.kai.com/
+       echo "$as_me:$LINENO: result: KAI C++" >&5
+echo "${ECHO_T}KAI C++" >&6
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE +K3 -O3 -fast --inline_keyword_space_time=10000"
+       CXX_DEBUG_FLAGS="-g +K0 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS=""
+     ;;
+     g++*|gcc*)          # gcc  http://gcc.gnu.org/
+       echo "$as_me:$LINENO: result: GNU C++" >&5
+echo "${ECHO_T}GNU C++" >&6
+       cxxwith=`echo $withval | sed -e 's/ /@/'`
+   case "$cxxwith" in
+     *:*@*)                 # Full initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)@.*/\1/p'`
+       CXXFLAGS=`echo "$cxxwith" | sed  -n -e 's/.*:.*@\(.*\)/\1/p'`
+     ;;
+     *:*)                   # Simple initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)/\1/p'`
+       CXXFLAGS=""
+     ;;
+     *)                     # Default values
+       CXX="g++"
+       CXXFLAGS=""
+     ;;
+   esac
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -finline-limit=5000 -ftemplate-depth-200 -fomit-frame-pointer"
+       CXX_DEBUG_FLAGS="-g -O1 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS="-W -Wall -Winline"
+
+       # paranoia on older gcc versions
+       gxx_version=`$CXX -v 2>&1 | grep "^.*g.. version" | \
+       sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//'`
+
+       case "$gxx_version" in
+           1.* | 2.[0123456789].*)
+           { { echo "$as_me:$LINENO: error: g++ version $gxx_version will probably fail to compile tvmet" >&5
+echo "$as_me: error: g++ version $gxx_version will probably fail to compile tvmet" >&2;}
+   { (exit 1); exit 1; }; }
+         ;;
+       esac
+     ;;
+     icc)                # Intel C++ compiler   http://www.intel.com/
+       echo "$as_me:$LINENO: result: Intel C++" >&5
+echo "${ECHO_T}Intel C++" >&6
+       cxxwith=`echo $withval | sed -e 's/ /@/'`
+   case "$cxxwith" in
+     *:*@*)                 # Full initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)@.*/\1/p'`
+       CXXFLAGS=`echo "$cxxwith" | sed  -n -e 's/.*:.*@\(.*\)/\1/p'`
+     ;;
+     *:*)                   # Simple initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)/\1/p'`
+       CXXFLAGS=""
+     ;;
+     *)                     # Default values
+       CXX="icc"
+       CXXFLAGS=""
+     ;;
+   esac
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -fp_port -Qoption,c,-ip_ninl_max_total_stats=3000"
+       CXX_DEBUG_FLAGS="-g -O0 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS="-Wall"
+     ;;
+     pgCC*)              # Portland group   http://www.pgroup.com/
+       echo "$as_me:$LINENO: result: Portland Group C++" >&5
+echo "${ECHO_T}Portland Group C++" >&6
+       cxxwith=`echo $withval | sed -e 's/ /@/'`
+   case "$cxxwith" in
+     *:*@*)                 # Full initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)@.*/\1/p'`
+       CXXFLAGS=`echo "$cxxwith" | sed  -n -e 's/.*:.*@\(.*\)/\1/p'`
+     ;;
+     *:*)                   # Simple initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)/\1/p'`
+       CXXFLAGS=""
+     ;;
+     *)                     # Default values
+       CXX="pgCC"
+       CXXFLAGS=""
+     ;;
+   esac
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O4 -Mnoframe -Mnodepchk -Minline=levels:25"
+       CXX_DEBUG_FLAGS="-g -O0 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS=""
+     ;;
+     *)
+        { echo "$as_me:$LINENO: WARNING: --with-cxx: unknown c++ compiler $withval" >&5
+echo "$as_me: WARNING: --with-cxx: unknown c++ compiler $withval" >&2;}
+     ;;
+   esac
+else
+
+       echo "$as_me:$LINENO: result: GNU C++ (default)" >&5
+echo "${ECHO_T}GNU C++ (default)" >&6
+       cxxwith=`echo $withval | sed -e 's/ /@/'`
+   case "$cxxwith" in
+     *:*@*)                 # Full initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)@.*/\1/p'`
+       CXXFLAGS=`echo "$cxxwith" | sed  -n -e 's/.*:.*@\(.*\)/\1/p'`
+     ;;
+     *:*)                   # Simple initialization syntax
+       CXX=`echo "$cxxwith" | sed  -n -e 's/.*:\(.*\)/\1/p'`
+       CXXFLAGS=""
+     ;;
+     *)                     # Default values
+       CXX="g++"
+       CXXFLAGS=""
+     ;;
+   esac
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -finline-limit=5000 -ftemplate-depth-200 -fomit-frame-pointer"
+       CXX_DEBUG_FLAGS="-g -O1 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS="-W -Wall -Winline"
+
+fi;
+
+
+echo "$as_me:$LINENO: checking for compiler optimizations" >&5
+echo $ECHO_N "checking for compiler optimizations... $ECHO_C" >&6
+tvmet_optimize=0
+# Check whether --enable-optimize or --disable-optimize was given.
+if test "${enable_optimize+set}" = set; then
+  enableval="$enable_optimize"
+  if test "$enableval" = yes; then
+     echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+     CXXFLAGS="$CXXFLAGS $CXX_OPTIMIZE_FLAGS"
+     tvmet_optimize=1
+   else
+     echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+   fi
+else
+
+     echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+if test $tvmet_optimize -eq 1; then
+  echo "$as_me:$LINENO: checking for compiler platform-specific optimizations" >&5
+echo $ECHO_N "checking for compiler platform-specific optimizations... $ECHO_C" >&6
+  case "$build_os" in
+    *linux*)
+      case "$CXX" in
+        g++)
+	  echo "$as_me:$LINENO: result: GNU/Linux (CPU=$build_cpu) using GNU GCC" >&5
+echo "${ECHO_T}GNU/Linux (CPU=$build_cpu) using GNU GCC" >&6
+	  # specifying -march=cpu-type implies -mcpu=cpu-type.
+          case "$build_cpu" in
+            i386|i486)
+	  	CXXFLAGS="$CXXFLAGS -malign-double -march=i386"
+	    ;;
+	    i586)
+		CXXFLAGS="$CXXFLAGS -malign-double -march=i586 -msse"
+	    ;;
+	    i686)
+		CXXFLAGS="$CXXFLAGS -malign-double -march=i686 -msse2"
+	    ;;
+	    k6*)
+                CXXFLAGS="$CXXFLAGS -malign-double -march=k6 -m3dnow"
+	  esac
+        ;;
+        icc)
+  	  echo "$as_me:$LINENO: result: GNU/Linux (CPU=$build_cpu) using Intel CC" >&5
+echo "${ECHO_T}GNU/Linux (CPU=$build_cpu) using Intel CC" >&6
+          case "$build_cpu" in
+	    i586)
+		# Intel Pentium Pro, Intel Pentium II, and Intel Pentium III processors
+		CXXFLAGS="$CXXFLAGS -tpp6"
+	    ;;
+	    i686)
+		# Intel Pentium 4 processors
+		CXXFLAGS="$CXXFLAGS -tpp7"
+	    ;;
+	  esac
+        ;;
+      esac
+    ;;
+    *)
+      echo "$as_me:$LINENO: result: tvmet has not been tuned for this platform" >&5
+echo "${ECHO_T}tvmet has not been tuned for this platform" >&6
+    ;;
+  esac
+fi
+
+
+echo "$as_me:$LINENO: checking for compiler debug flags" >&5
+echo $ECHO_N "checking for compiler debug flags... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+  if test "$enableval" = yes; then
+     echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+     CXXFLAGS="$CXXFLAGS $CXX_DEBUG_FLAGS"
+   fi
+else
+
+     echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+echo "$as_me:$LINENO: checking for compiler warn flags" >&5
+echo $ECHO_N "checking for compiler warn flags... $ECHO_C" >&6
+# Check whether --enable-warnings or --disable-warnings was given.
+if test "${enable_warnings+set}" = set; then
+  enableval="$enable_warnings"
+  if test "$enableval" = yes; then
+     echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+     CXXFLAGS="$CXXFLAGS $CXX_WARN_FLAGS"
+   fi
+else
+
+     echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+
+  echo "$as_me:$LINENO: checking for documentation" >&5
+echo $ECHO_N "checking for documentation... $ECHO_C" >&6
+  # Check whether --enable-docs or --disable-docs was given.
+if test "${enable_docs+set}" = set; then
+  enableval="$enable_docs"
+  case "$enableval" in
+      y | yes) CONFIG_DOC=yes ;;
+      *) unset CONFIG_DOC ;;
+    esac
+fi;
+  echo "$as_me:$LINENO: result: ${CONFIG_DOC:-no}" >&5
+echo "${ECHO_T}${CONFIG_DOC:-no}" >&6
+
+  echo "$as_me:$LINENO: checking whether using LaTeX non-stop mode" >&5
+echo $ECHO_N "checking whether using LaTeX non-stop mode... $ECHO_C" >&6
+  # Check whether --enable-verbose-latex or --disable-verbose-latex was given.
+if test "${enable_verbose_latex+set}" = set; then
+  enableval="$enable_verbose_latex"
+  case "$enableval" in
+      y | yes) CONFIG_DOC_LATEX_NONSTOP=yes ;;
+      *) unset CONFIG_DOC_LATEX_NONSTOP ;;
+    esac
+fi;
+  echo "$as_me:$LINENO: result: ${CONFIG_DOC_LATEX_NONSTOP:-no}" >&5
+echo "${ECHO_T}${CONFIG_DOC_LATEX_NONSTOP:-no}" >&6
+
+  if test x${CONFIG_DOC_LATEX_NONSTOP} = xyes; then
+     LATEX_BATCHMODE=NO
+     LATEX_MODE=nonstopmode
+  else
+     LATEX_BATCHMODE=YES
+     LATEX_MODE=batchmode
+  fi
+
+  # Extract the first word of "doxygen", so it can be a program name with args.
+set dummy doxygen; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DOXYGEN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DOXYGEN"; then
+  ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DOXYGEN="doxygen"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+DOXYGEN=$ac_cv_prog_DOXYGEN
+if test -n "$DOXYGEN"; then
+  echo "$as_me:$LINENO: result: $DOXYGEN" >&5
+echo "${ECHO_T}$DOXYGEN" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  if test x${CONFIG_DOC} = xyes -a x"$DOXYGEN" = x; then
+    { { echo "$as_me:$LINENO: error: missing the doxygen tools to generate the documentation." >&5
+echo "$as_me: error: missing the doxygen tools to generate the documentation." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+  # Extract the first word of "dot", so it can be a program name with args.
+set dummy dot; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DOXYGEN_HAVE_DOT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DOXYGEN_HAVE_DOT"; then
+  ac_cv_prog_DOXYGEN_HAVE_DOT="$DOXYGEN_HAVE_DOT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DOXYGEN_HAVE_DOT="yes"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_DOXYGEN_HAVE_DOT" && ac_cv_prog_DOXYGEN_HAVE_DOT="no"
+fi
+fi
+DOXYGEN_HAVE_DOT=$ac_cv_prog_DOXYGEN_HAVE_DOT
+if test -n "$DOXYGEN_HAVE_DOT"; then
+  echo "$as_me:$LINENO: result: $DOXYGEN_HAVE_DOT" >&5
+echo "${ECHO_T}$DOXYGEN_HAVE_DOT" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+
+
+if test x"$CONFIG_DOC" = xyes; then
+  CONFIG_DOC_TRUE=
+  CONFIG_DOC_FALSE='#'
+else
+  CONFIG_DOC_TRUE='#'
+  CONFIG_DOC_FALSE=
+fi
+
+
+
+
+
+
+
+
+oopattern_config_cppunit=yes
+# Check whether --enable-cppunit or --disable-cppunit was given.
+if test "${enable_cppunit+set}" = set; then
+  enableval="$enable_cppunit"
+  oopattern_config_cppunit=$enableval
+fi;
+
+
+if test x"$oopattern_config_cppunit" = xyes; then
+
+
+
+
+# Check whether --with-cppunit-prefix or --without-cppunit-prefix was given.
+if test "${with_cppunit_prefix+set}" = set; then
+  withval="$with_cppunit_prefix"
+  cppunit_config_prefix="$withval"
+else
+  cppunit_config_prefix=""
+fi;
+
+# Check whether --with-cppunit-exec-prefix or --without-cppunit-exec-prefix was given.
+if test "${with_cppunit_exec_prefix+set}" = set; then
+  withval="$with_cppunit_exec_prefix"
+  cppunit_config_exec_prefix="$withval"
+else
+  cppunit_config_exec_prefix=""
+fi;
+
+  if test x$cppunit_config_exec_prefix != x ; then
+     cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix"
+     if test x${CPPUNIT_CONFIG+set} != xset ; then
+        CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config
+     fi
+  fi
+  if test x$cppunit_config_prefix != x ; then
+     cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix"
+     if test x${CPPUNIT_CONFIG+set} != xset ; then
+        CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config
+     fi
+  fi
+
+  # Extract the first word of "cppunit-config", so it can be a program name with args.
+set dummy cppunit-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_CPPUNIT_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $CPPUNIT_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_CPPUNIT_CONFIG="$CPPUNIT_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_CPPUNIT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_CPPUNIT_CONFIG" && ac_cv_path_CPPUNIT_CONFIG="no"
+  ;;
+esac
+fi
+CPPUNIT_CONFIG=$ac_cv_path_CPPUNIT_CONFIG
+
+if test -n "$CPPUNIT_CONFIG"; then
+  echo "$as_me:$LINENO: result: $CPPUNIT_CONFIG" >&5
+echo "${ECHO_T}$CPPUNIT_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  cppunit_version_min=1.8.0
+
+  echo "$as_me:$LINENO: checking for Cppunit - version >= $cppunit_version_min" >&5
+echo $ECHO_N "checking for Cppunit - version >= $cppunit_version_min... $ECHO_C" >&6
+  no_cppunit=""
+  if test "$CPPUNIT_CONFIG" = "no" ; then
+    no_cppunit=yes
+  else
+    CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags`
+    CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs`
+    cppunit_version=`$CPPUNIT_CONFIG --version`
+
+    cppunit_major_version=`echo $cppunit_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+    cppunit_minor_version=`echo $cppunit_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+    cppunit_micro_version=`echo $cppunit_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+
+    cppunit_major_min=`echo $cppunit_version_min | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+    cppunit_minor_min=`echo $cppunit_version_min | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+    cppunit_micro_min=`echo $cppunit_version_min | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+
+    cppunit_version_proper=`expr \
+        $cppunit_major_version \> $cppunit_major_min \| \
+        $cppunit_major_version \= $cppunit_major_min \& \
+        $cppunit_minor_version \> $cppunit_minor_min \| \
+        $cppunit_major_version \= $cppunit_major_min \& \
+        $cppunit_minor_version \= $cppunit_minor_min \& \
+        $cppunit_micro_version \>= $cppunit_micro_min `
+
+    if test "$cppunit_version_proper" = "1" ; then
+      echo "$as_me:$LINENO: result: $cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version" >&5
+echo "${ECHO_T}$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version" >&6
+    else
+      echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+      no_cppunit=yes
+    fi
+  fi
+
+  if test "x$no_cppunit" = x ; then
+     :
+  else
+     CPPUNIT_CFLAGS=""
+     CPPUNIT_LIBS=""
+     :
+  fi
+
+
+
+
+
+  if test "x$no_cppunit" = xyes; then
+    CONFIG_CPPUNIT=no
+  else
+    CONFIG_CPPUNIT=yes
+  fi
+
+fi
+echo "$as_me:$LINENO: checking for libcppunit support" >&5
+echo $ECHO_N "checking for libcppunit support... $ECHO_C" >&6
+if test "x${oopattern_config_cppunit}" = xyes -a "x$CONFIG_CPPUNIT" = xyes; then
+  CONFIG_CPPUNIT=yes
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  CONFIG_CPPUNIT=no
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+if test x"$CONFIG_CPPUNIT" = xyes; then
+  CONFIG_CPPUNIT_TRUE=
+  CONFIG_CPPUNIT_FALSE='#'
+else
+  CONFIG_CPPUNIT_TRUE='#'
+  CONFIG_CPPUNIT_FALSE=
+fi
+
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+  CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5
+echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+          ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CXX"  am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi;
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi;
+
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+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
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+
+fi
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+NM="$lt_cv_path_NM"
+
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  case $host_cpu in
+  alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*)
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 4788 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+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
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## --------------------------------------------- ##
+## Report this to opetzold@users.sourceforge.net ##
+## --------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$F77"; then
+  ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+  echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$F77" && break
+  done
+fi
+if test -z "$F77"; then
+  ac_ct_F77=$F77
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_F77"; then
+  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_F77="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+  echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_F77" && break
+done
+
+  F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:5896:" \
+     "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_f77_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+  FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-O2"
+  else
+    FFLAGS=
+  fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDRT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  AR=$ac_ct_AR
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+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
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    lt_prog_cc_shlib='-belf'
+    ;;
+  esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | grep "[ 	]$lt_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+    { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+     else
+       lt_prog_compiler_static_works=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6930: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:6934: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic='-Kpic'
+      lt_prog_compiler_static='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:7163: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:7167: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:7223: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:7227: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag=
+  enable_shared_with_static_runtimes=no
+  archive_cmds=
+  archive_expsym_cmds=
+  old_archive_From_new_cmds=
+  old_archive_from_expsyms_cmds=
+  export_dynamic_flag_spec=
+  whole_archive_flag_spec=
+  thread_safe_flag_spec=
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_direct=no
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  link_all_deplibs=unknown
+  hardcode_automatic=no
+  module_cmds=
+  module_expsym_cmds=
+  always_export_symbols=no
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds="$tmp_archive_cmds"
+      fi
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L=yes
+  	  hardcode_libdir_flag_spec='-L$libdir'
+  	  hardcode_libdir_separator=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec=' '
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct=no
+      hardcode_automatic=yes
+      hardcode_shlibpath_var=unsupported
+      whole_archive_flag_spec='-all_load $convenience'
+      link_all_deplibs=yes
+    else
+      ld_shlibs=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld='+b $libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    openbsd*)
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      hardcode_shlibpath_var=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec=
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var " || \
+   test "X$hardcode_automatic"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 9407 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 9505 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if test "$GCC" = yes; then
+    archive_cmds_need_lc=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    output_verbose_link_cmd='echo'
+    archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
+  else
+    ld_shlibs=no
+  fi
+    ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler \
+    CC \
+    LD \
+    lt_prog_compiler_wl \
+    lt_prog_compiler_pic \
+    lt_prog_compiler_static \
+    lt_prog_compiler_no_builtin_flag \
+    export_dynamic_flag_spec \
+    thread_safe_flag_spec \
+    whole_archive_flag_spec \
+    enable_shared_with_static_runtimes \
+    old_archive_cmds \
+    old_archive_from_new_cmds \
+    predep_objects \
+    postdep_objects \
+    predeps \
+    postdeps \
+    compiler_lib_search_path \
+    archive_cmds \
+    archive_expsym_cmds \
+    postinstall_cmds \
+    postuninstall_cmds \
+    old_archive_from_expsyms_cmds \
+    allow_undefined_flag \
+    no_undefined_flag \
+    export_symbols_cmds \
+    hardcode_libdir_flag_spec \
+    hardcode_libdir_flag_spec_ld \
+    hardcode_libdir_separator \
+    hardcode_automatic \
+    module_cmds \
+    module_expsym_cmds \
+    lt_cv_prog_compiler_c_o \
+    exclude_expsyms \
+    include_expsyms; do
+
+    case $var in
+    old_archive_cmds | \
+    old_archive_from_new_cmds | \
+    archive_cmds | \
+    archive_expsym_cmds | \
+    module_cmds | \
+    module_expsym_cmds | \
+    old_archive_from_expsyms_cmds | \
+    export_symbols_cmds | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+  cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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
+# the Free Software Foundation; either version 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# 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.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags or --without-tags was given.
+if test "${with_tags+set}" = set; then
+  withval="$with_tags"
+  tagnames="$withval"
+fi;
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+    else
+      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+    "") ;;
+    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+  lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec_CXX=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+ld_shlibs_CXX=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    archive_cmds_CXX=''
+    hardcode_direct_CXX=yes
+    hardcode_libdir_separator_CXX=':'
+    link_all_deplibs_CXX=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.012|aix4.012.*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct_CXX=yes
+	else
+	  # We have old collect2
+	  hardcode_direct_CXX=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_CXX=yes
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  hardcode_libdir_separator_CXX=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    always_export_symbols_CXX=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag_CXX='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag_CXX="-z nodefs"
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	no_undefined_flag_CXX=' ${wl}-bernotok'
+	allow_undefined_flag_CXX=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	always_export_symbols_CXX=yes
+	# Exported symbols can be pulled into shared objects from archives
+	whole_archive_flag_spec_CXX=' '
+	archive_cmds_need_lc_CXX=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+    # as there is no search path for DLLs.
+    hardcode_libdir_flag_spec_CXX='-L$libdir'
+    allow_undefined_flag_CXX=unsupported
+    always_export_symbols_CXX=no
+    enable_shared_with_static_runtimes_CXX=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      ld_shlibs_CXX=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+  if test "$GXX" = yes; then
+    archive_cmds_need_lc_CXX=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag_CXX='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_CXX='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    lt_int_apple_cc_single_mod=no
+    output_verbose_link_cmd='echo'
+    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+      lt_int_apple_cc_single_mod=yes
+    fi
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    else
+      archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    fi
+    module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct_CXX=no
+    hardcode_automatic_CXX=yes
+    hardcode_shlibpath_var_CXX=unsupported
+    whole_archive_flag_spec_CXX='-all_load $convenience'
+    link_all_deplibs_CXX=yes
+  else
+    ld_shlibs_CXX=no
+  fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  freebsd12*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    ld_shlibs_CXX=no
+    ;;
+  freebsd-elf*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  freebsd* | kfreebsd*-gnu)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    ld_shlibs_CXX=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    export_dynamic_flag_spec_CXX='${wl}-E'
+    hardcode_direct_CXX=yes
+    hardcode_minus_L_CXX=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      ld_shlibs_CXX=no
+      ;;
+    aCC)
+      archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+	hardcode_libdir_separator_CXX=:
+        ;;
+      ia64*)
+	hardcode_libdir_flag_spec_CXX='-L$libdir'
+        ;;
+      *)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+	export_dynamic_flag_spec_CXX='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      ;;
+    ia64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      hardcode_direct_CXX=yes
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	link_all_deplibs_CXX=yes
+	;;
+    esac
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	archive_cmds_need_lc_CXX=no
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      hardcode_libdir_flag_spec_CXX='-R$libdir'
+      hardcode_direct_CXX=yes
+      hardcode_shlibpath_var_CXX=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	  archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' -expect_unresolved \*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  sco*)
+    archive_cmds_need_lc_CXX=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	no_undefined_flag_CXX=' -zdefs'
+	archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-R$libdir'
+	hardcode_shlibpath_var_CXX=no
+	case $host_os in
+	  solaris2.0-5 | solaris2.0-5.*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	link_all_deplibs_CXX=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+esac
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+
+cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$rm -f confest.$objext
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_CXX=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:11684: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:11688: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:11744: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:11748: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+   test -n "$runpath_var CXX" || \
+   test "X$hardcode_automatic_CXX"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
+
+if test "$hardcode_action_CXX" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 13105 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 13203 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_CXX \
+    CC_CXX \
+    LD_CXX \
+    lt_prog_compiler_wl_CXX \
+    lt_prog_compiler_pic_CXX \
+    lt_prog_compiler_static_CXX \
+    lt_prog_compiler_no_builtin_flag_CXX \
+    export_dynamic_flag_spec_CXX \
+    thread_safe_flag_spec_CXX \
+    whole_archive_flag_spec_CXX \
+    enable_shared_with_static_runtimes_CXX \
+    old_archive_cmds_CXX \
+    old_archive_from_new_cmds_CXX \
+    predep_objects_CXX \
+    postdep_objects_CXX \
+    predeps_CXX \
+    postdeps_CXX \
+    compiler_lib_search_path_CXX \
+    archive_cmds_CXX \
+    archive_expsym_cmds_CXX \
+    postinstall_cmds_CXX \
+    postuninstall_cmds_CXX \
+    old_archive_from_expsyms_cmds_CXX \
+    allow_undefined_flag_CXX \
+    no_undefined_flag_CXX \
+    export_symbols_cmds_CXX \
+    hardcode_libdir_flag_spec_CXX \
+    hardcode_libdir_flag_spec_ld_CXX \
+    hardcode_libdir_separator_CXX \
+    hardcode_automatic_CXX \
+    module_cmds_CXX \
+    module_expsym_cmds_CXX \
+    lt_cv_prog_compiler_c_o_CXX \
+    exclude_expsyms_CXX \
+    include_expsyms_CXX; do
+
+    case $var in
+    old_archive_cmds_CXX | \
+    old_archive_from_new_cmds_CXX | \
+    archive_cmds_CXX | \
+    archive_expsym_cmds_CXX | \
+    module_cmds_CXX | \
+    module_expsym_cmds_CXX | \
+    old_archive_from_expsyms_cmds_CXX | \
+    export_symbols_cmds_CXX | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_F77='-Wl,'
+    lt_prog_compiler_static_F77='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_F77=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      else
+	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_F77='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_F77='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_F77='-Kpic'
+      lt_prog_compiler_static_F77='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_F77='-Qoption ld '
+      lt_prog_compiler_pic_F77='-PIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_F77='-Kconform_pic'
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_F77='-pic'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_F77=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_F77"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14030: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:14034: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_F77=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+    case $lt_prog_compiler_pic_F77 in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+     esac
+else
+    lt_prog_compiler_pic_F77=
+     lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_F77=
+    ;;
+  *)
+    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14090: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:14094: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_F77=
+  enable_shared_with_static_runtimes_F77=no
+  archive_cmds_F77=
+  archive_expsym_cmds_F77=
+  old_archive_From_new_cmds_F77=
+  old_archive_from_expsyms_cmds_F77=
+  export_dynamic_flag_spec_F77=
+  whole_archive_flag_spec_F77=
+  thread_safe_flag_spec_F77=
+  hardcode_libdir_flag_spec_F77=
+  hardcode_libdir_flag_spec_ld_F77=
+  hardcode_libdir_separator_F77=
+  hardcode_direct_F77=no
+  hardcode_minus_L_F77=no
+  hardcode_shlibpath_var_F77=unsupported
+  link_all_deplibs_F77=unknown
+  hardcode_automatic_F77=no
+  module_cmds_F77=
+  module_expsym_cmds_F77=
+  always_export_symbols_F77=no
+  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_F77=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_F77=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_F77=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_F77=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=no
+      enable_shared_with_static_runtimes_F77=yes
+      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds_F77="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds_F77="$tmp_archive_cmds"
+      fi
+    else
+      ld_shlibs_F77=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_F77" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_F77=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=yes
+      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_F77=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_F77=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_F77=''
+      hardcode_direct_F77=yes
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_F77=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_F77=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_F77=yes
+  	  hardcode_libdir_flag_spec_F77='-L$libdir'
+  	  hardcode_libdir_separator_F77=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_F77=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_F77='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_F77="-z nodefs"
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_F77=' ${wl}-bernotok'
+	  allow_undefined_flag_F77=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_F77=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_F77=' '
+	  archive_cmds_need_lc_F77=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_F77=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_F77=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_F77=' '
+      allow_undefined_flag_F77=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_F77='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc_F77=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_F77='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_F77='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_F77=no
+      hardcode_automatic_F77=yes
+      hardcode_shlibpath_var_F77=unsupported
+      whole_archive_flag_spec_F77='-all_load $convenience'
+      link_all_deplibs_F77=yes
+    else
+      ld_shlibs_F77=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_F77=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_direct_F77=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_F77=yes
+      export_dynamic_flag_spec_F77='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_F77='-L$libdir'
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=yes
+	  export_dynamic_flag_spec_F77='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      link_all_deplibs_F77=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    newsos6)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_F77='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_F77='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_F77=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_shlibpath_var_F77=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_F77=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_F77='$CC -r -o $output$reload_objs'
+	  hardcode_direct_F77=no
+        ;;
+	motorola)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_F77=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_F77=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_F77='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_F77=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec_F77=
+      hardcode_shlibpath_var_F77=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      ld_shlibs_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_F77=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_F77 in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_F77
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+        allow_undefined_flag_F77=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_F77=no
+        else
+	  archive_cmds_need_lc_F77=yes
+        fi
+        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+   test -n "$runpath_var F77" || \
+   test "X$hardcode_automatic_F77"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_F77" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+     test "$hardcode_minus_L_F77" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_F77=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_F77=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_F77=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
+
+if test "$hardcode_action_F77" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_F77 \
+    CC_F77 \
+    LD_F77 \
+    lt_prog_compiler_wl_F77 \
+    lt_prog_compiler_pic_F77 \
+    lt_prog_compiler_static_F77 \
+    lt_prog_compiler_no_builtin_flag_F77 \
+    export_dynamic_flag_spec_F77 \
+    thread_safe_flag_spec_F77 \
+    whole_archive_flag_spec_F77 \
+    enable_shared_with_static_runtimes_F77 \
+    old_archive_cmds_F77 \
+    old_archive_from_new_cmds_F77 \
+    predep_objects_F77 \
+    postdep_objects_F77 \
+    predeps_F77 \
+    postdeps_F77 \
+    compiler_lib_search_path_F77 \
+    archive_cmds_F77 \
+    archive_expsym_cmds_F77 \
+    postinstall_cmds_F77 \
+    postuninstall_cmds_F77 \
+    old_archive_from_expsyms_cmds_F77 \
+    allow_undefined_flag_F77 \
+    no_undefined_flag_F77 \
+    export_symbols_cmds_F77 \
+    hardcode_libdir_flag_spec_F77 \
+    hardcode_libdir_flag_spec_ld_F77 \
+    hardcode_libdir_separator_F77 \
+    hardcode_automatic_F77 \
+    module_cmds_F77 \
+    module_expsym_cmds_F77 \
+    lt_cv_prog_compiler_c_o_F77 \
+    exclude_expsyms_F77 \
+    include_expsyms_F77; do
+
+    case $var in
+    old_archive_cmds_F77 | \
+    old_archive_from_new_cmds_F77 | \
+    archive_cmds_F77 | \
+    archive_expsym_cmds_F77 | \
+    module_cmds_F77 | \
+    module_expsym_cmds_F77 | \
+    old_archive_from_expsyms_cmds_F77 | \
+    export_symbols_cmds_F77 | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
+
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:16124: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:16128: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_GCJ='-Wl,'
+    lt_prog_compiler_static_GCJ='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_GCJ='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_GCJ=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_GCJ=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_GCJ='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      else
+	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl_GCJ='-Wl,'
+	lt_prog_compiler_pic_GCJ='-KPIC'
+	lt_prog_compiler_static_GCJ='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_GCJ='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_GCJ='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_GCJ='-Kpic'
+      lt_prog_compiler_static_GCJ='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_GCJ='-Qoption ld '
+      lt_prog_compiler_pic_GCJ='-PIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_GCJ='-Kconform_pic'
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_GCJ='-pic'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_GCJ=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:16357: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:16361: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_GCJ=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+    case $lt_prog_compiler_pic_GCJ in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+     esac
+else
+    lt_prog_compiler_pic_GCJ=
+     lt_prog_compiler_can_build_shared_GCJ=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_GCJ=
+    ;;
+  *)
+    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_GCJ=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:16417: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:16421: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_GCJ=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_GCJ=
+  enable_shared_with_static_runtimes_GCJ=no
+  archive_cmds_GCJ=
+  archive_expsym_cmds_GCJ=
+  old_archive_From_new_cmds_GCJ=
+  old_archive_from_expsyms_cmds_GCJ=
+  export_dynamic_flag_spec_GCJ=
+  whole_archive_flag_spec_GCJ=
+  thread_safe_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_ld_GCJ=
+  hardcode_libdir_separator_GCJ=
+  hardcode_direct_GCJ=no
+  hardcode_minus_L_GCJ=no
+  hardcode_shlibpath_var_GCJ=unsupported
+  link_all_deplibs_GCJ=unknown
+  hardcode_automatic_GCJ=no
+  module_cmds_GCJ=
+  module_expsym_cmds_GCJ=
+  always_export_symbols_GCJ=no
+  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_GCJ=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_GCJ=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_GCJ=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_GCJ=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=no
+      enable_shared_with_static_runtimes_GCJ=yes
+      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds_GCJ="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds_GCJ="$tmp_archive_cmds"
+      fi
+    else
+      ld_shlibs_GCJ=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_GCJ" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_GCJ=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=yes
+      archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_GCJ=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_GCJ=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_GCJ=''
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_separator_GCJ=':'
+      link_all_deplibs_GCJ=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_GCJ=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_GCJ=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_GCJ=yes
+  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+  	  hardcode_libdir_separator_GCJ=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_GCJ=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_GCJ='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_GCJ="-z nodefs"
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_GCJ=' ${wl}-bernotok'
+	  allow_undefined_flag_GCJ=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_GCJ=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_GCJ=' '
+	  archive_cmds_need_lc_GCJ=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_GCJ=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_GCJ=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ=' '
+      allow_undefined_flag_GCJ=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_GCJ='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_GCJ=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc_GCJ=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_GCJ='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_GCJ='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_GCJ=no
+      hardcode_automatic_GCJ=yes
+      hardcode_shlibpath_var_GCJ=unsupported
+      whole_archive_flag_spec_GCJ='-all_load $convenience'
+      link_all_deplibs_GCJ=yes
+    else
+      ld_shlibs_GCJ=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_GCJ=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_direct_GCJ=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_GCJ=yes
+      export_dynamic_flag_spec_GCJ='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=yes
+	  export_dynamic_flag_spec_GCJ='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    newsos6)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_GCJ='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      allow_undefined_flag_GCJ=unsupported
+      archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_GCJ=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+	  hardcode_direct_GCJ=no
+        ;;
+	motorola)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_GCJ=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_GCJ=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_GCJ='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_GCJ=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec_GCJ=
+      hardcode_shlibpath_var_GCJ=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      ld_shlibs_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_GCJ=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_GCJ in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_GCJ
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+        allow_undefined_flag_GCJ=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_GCJ=no
+        else
+	  archive_cmds_need_lc_GCJ=yes
+        fi
+        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+   test -n "$runpath_var GCJ" || \
+   test "X$hardcode_automatic_GCJ"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_GCJ" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+     test "$hardcode_minus_L_GCJ" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_GCJ=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_GCJ=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_GCJ=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
+
+if test "$hardcode_action_GCJ" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 18601 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 18699 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_GCJ \
+    CC_GCJ \
+    LD_GCJ \
+    lt_prog_compiler_wl_GCJ \
+    lt_prog_compiler_pic_GCJ \
+    lt_prog_compiler_static_GCJ \
+    lt_prog_compiler_no_builtin_flag_GCJ \
+    export_dynamic_flag_spec_GCJ \
+    thread_safe_flag_spec_GCJ \
+    whole_archive_flag_spec_GCJ \
+    enable_shared_with_static_runtimes_GCJ \
+    old_archive_cmds_GCJ \
+    old_archive_from_new_cmds_GCJ \
+    predep_objects_GCJ \
+    postdep_objects_GCJ \
+    predeps_GCJ \
+    postdeps_GCJ \
+    compiler_lib_search_path_GCJ \
+    archive_cmds_GCJ \
+    archive_expsym_cmds_GCJ \
+    postinstall_cmds_GCJ \
+    postuninstall_cmds_GCJ \
+    old_archive_from_expsyms_cmds_GCJ \
+    allow_undefined_flag_GCJ \
+    no_undefined_flag_GCJ \
+    export_symbols_cmds_GCJ \
+    hardcode_libdir_flag_spec_GCJ \
+    hardcode_libdir_flag_spec_ld_GCJ \
+    hardcode_libdir_separator_GCJ \
+    hardcode_automatic_GCJ \
+    module_cmds_GCJ \
+    module_expsym_cmds_GCJ \
+    lt_cv_prog_compiler_c_o_GCJ \
+    exclude_expsyms_GCJ \
+    include_expsyms_GCJ; do
+
+    case $var in
+    old_archive_cmds_GCJ | \
+    old_archive_from_new_cmds_GCJ | \
+    archive_cmds_GCJ | \
+    archive_expsym_cmds_GCJ | \
+    module_cmds_GCJ | \
+    module_expsym_cmds_GCJ | \
+    old_archive_from_expsyms_cmds_GCJ | \
+    export_symbols_cmds_GCJ | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_RC \
+    CC_RC \
+    LD_RC \
+    lt_prog_compiler_wl_RC \
+    lt_prog_compiler_pic_RC \
+    lt_prog_compiler_static_RC \
+    lt_prog_compiler_no_builtin_flag_RC \
+    export_dynamic_flag_spec_RC \
+    thread_safe_flag_spec_RC \
+    whole_archive_flag_spec_RC \
+    enable_shared_with_static_runtimes_RC \
+    old_archive_cmds_RC \
+    old_archive_from_new_cmds_RC \
+    predep_objects_RC \
+    postdep_objects_RC \
+    predeps_RC \
+    postdeps_RC \
+    compiler_lib_search_path_RC \
+    archive_cmds_RC \
+    archive_expsym_cmds_RC \
+    postinstall_cmds_RC \
+    postuninstall_cmds_RC \
+    old_archive_from_expsyms_cmds_RC \
+    allow_undefined_flag_RC \
+    no_undefined_flag_RC \
+    export_symbols_cmds_RC \
+    hardcode_libdir_flag_spec_RC \
+    hardcode_libdir_flag_spec_ld_RC \
+    hardcode_libdir_separator_RC \
+    hardcode_automatic_RC \
+    module_cmds_RC \
+    module_expsym_cmds_RC \
+    lt_cv_prog_compiler_c_o_RC \
+    exclude_expsyms_RC \
+    include_expsyms_RC; do
+
+    case $var in
+    old_archive_cmds_RC | \
+    old_archive_from_new_cmds_RC | \
+    archive_cmds_RC | \
+    archive_expsym_cmds_RC | \
+    module_cmds_RC | \
+    module_expsym_cmds_RC | \
+    old_archive_from_expsyms_cmds_RC | \
+    export_symbols_cmds_RC | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CC="$lt_save_CC"
+
+	;;
+
+      *)
+	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for main in -ldl" >&5
+echo $ECHO_N "checking for main in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_main" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_main" >&6
+if test $ac_cv_lib_dl_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBDL 1
+_ACEOF
+
+  LIBS="-ldl $LIBS"
+
+fi
+
+
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
+echo $ECHO_N "checking for stdbool.h that conforms to C99... $ECHO_C" >&6
+if test "${ac_cv_header_stdbool_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdbool.h>
+#ifndef bool
+# error bool is not defined
+#endif
+#ifndef false
+# error false is not defined
+#endif
+#if false
+# error false is not 0
+#endif
+#ifndef true
+# error true is not defined
+#endif
+#if true != 1
+# error true is not 1
+#endif
+#ifndef __bool_true_false_are_defined
+# error __bool_true_false_are_defined is not defined
+#endif
+
+	struct s { _Bool s: 1; _Bool t; } s;
+
+	char a[true == 1 ? 1 : -1];
+	char b[false == 0 ? 1 : -1];
+	char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+	char d[(bool) -0.5 == true ? 1 : -1];
+	bool e = &s;
+	char f[(_Bool) -0.0 == false ? 1 : -1];
+	char g[true];
+	char h[sizeof (_Bool)];
+	char i[sizeof s.t];
+
+int
+main ()
+{
+ return !a + !b + !c + !d + !e + !f + !g + !h + !i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdbool_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdbool_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdbool_h" >&6
+echo "$as_me:$LINENO: checking for _Bool" >&5
+echo $ECHO_N "checking for _Bool... $ECHO_C" >&6
+if test "${ac_cv_type__Bool+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((_Bool *) 0)
+  return 0;
+if (sizeof (_Bool))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type__Bool=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type__Bool=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
+echo "${ECHO_T}$ac_cv_type__Bool" >&6
+if test $ac_cv_type__Bool = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STDBOOL_H 1
+_ACEOF
+
+fi
+
+
+for ac_header in sys/time.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## --------------------------------------------- ##
+## Report this to opetzold@users.sourceforge.net ##
+## --------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Checks for library functions.
+
+
+
+
+for ac_func in floor pow rint sqrt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+  return 0;
+if (sizeof (size_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
+if test "${ac_cv_struct_tm+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm *tp; tp->tm_sec;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_struct_tm=time.h
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_struct_tm=sys/time.h
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$ac_cv_struct_tm" >&6
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+echo "$as_me:$LINENO: checking for working long double with more range or precision than double" >&5
+echo $ECHO_N "checking for working long double with more range or precision than double... $ECHO_C" >&6
+if test "${ac_cv_c_long_double+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <float.h>
+	  long double foo = 0.0;
+int
+main ()
+{
+static int test_array [1 - 2 * !(/* Using '|' rather than '||' catches a GCC 2.95.2 x86 bug.  */
+	  (DBL_MAX < LDBL_MAX) | (LDBL_EPSILON < DBL_EPSILON)
+	  | (DBL_MAX_EXP < LDBL_MAX_EXP) | (DBL_MANT_DIG < LDBL_MANT_DIG))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_long_double=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_long_double=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_long_double" >&5
+echo "${ECHO_T}$ac_cv_c_long_double" >&6
+if test $ac_cv_c_long_double = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_DOUBLE 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for long long int" >&5
+echo $ECHO_N "checking for long long int... $ECHO_C" >&6
+if test "${ac_cv_c_long_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+   long long int i;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_long_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_long_long=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_long_long" >&5
+echo "${ECHO_T}$ac_cv_c_long_long" >&6
+if test "$ac_cv_c_long_long" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_LONG
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for C/C++ restrict keyword" >&5
+echo $ECHO_N "checking for C/C++ restrict keyword... $ECHO_C" >&6
+if test "${ac_cv_c_restrict+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_restrict=no
+   # Try the official restrict keyword, then gcc's __restrict, and
+   # the less common variants.
+   for ac_kw in restrict __restrict __restrict__ _Restrict; do
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+float * $ac_kw x;
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_restrict=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+   done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_restrict" >&5
+echo "${ECHO_T}$ac_cv_c_restrict" >&6
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no)
+cat >>confdefs.h <<\_ACEOF
+#define restrict
+_ACEOF
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+echo "$as_me:$LINENO: checking for mutable" >&5
+echo $ECHO_N "checking for mutable... $ECHO_C" >&6
+if test "${ac_cv_cxx_mutable+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+class Foo {
+  mutable int i;
+public:
+  int bar (int n) const { i = n; return i; }
+};
+
+int
+main ()
+{
+Foo foo; return foo.bar(1);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_mutable=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_mutable=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_mutable" >&5
+echo "${ECHO_T}$ac_cv_cxx_mutable" >&6
+if test "$ac_cv_cxx_mutable" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTABLE
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for typename" >&5
+echo $ECHO_N "checking for typename... $ECHO_C" >&6
+if test "${ac_cv_cxx_typename+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+   ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+template<typename T>class X {public:X(){}};
+int
+main ()
+{
+X<float> x; return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_typename=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_typename=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_typename" >&5
+echo "${ECHO_T}$ac_cv_cxx_typename" >&6
+if test "$ac_cv_cxx_typename" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TYPENAME
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether the compiler supports partial specialization" >&5
+echo $ECHO_N "checking whether the compiler supports partial specialization... $ECHO_C" >&6
+if test "${ac_cv_cxx_partial_specialization+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+template<class T, int N> class X            { public : enum { e = 0 }; };
+template<int N>          class X<double, N> { public : enum { e = 1 }; };
+template<class T>        class X<T, 2>      { public : enum { e = 2 }; };
+
+int
+main ()
+{
+return (X<int,3>::e == 0) && (X<double,3>::e == 1) && (X<float,2>::e == 2);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_partial_specialization=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_partial_specialization=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_partial_specialization" >&5
+echo "${ECHO_T}$ac_cv_cxx_partial_specialization" >&6
+if test "$ac_cv_cxx_partial_specialization" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PARTIAL_SPECIALIZATION
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for namespaces support" >&5
+echo $ECHO_N "checking for namespaces support... $ECHO_C" >&6
+if test "${ac_cv_cxx_namespaces+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+namespace Outer { namespace Inner { int i = 0; }}
+int
+main ()
+{
+using namespace Outer::Inner; return i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_namespaces=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_namespaces=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_namespaces" >&5
+echo "${ECHO_T}$ac_cv_cxx_namespaces" >&6
+if test "$ac_cv_cxx_namespaces" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_NAMESPACES
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for IEEE math library" >&5
+echo $ECHO_N "checking for IEEE math library... $ECHO_C" >&6
+if test "${ac_cv_cxx_have_ieee_math+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifndef _ALL_SOURCE
+ #define _ALL_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE
+ #define _XOPEN_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE_EXTENDED
+ #define _XOPEN_SOURCE_EXTENDED 1
+#endif
+#include <cmath>
+int
+main ()
+{
+double x = 1.0; double y = 1.0;
+acosh(x); asinh(x); atanh(x);
+expm1(x);
+erf(x); erfc(x);
+// finite(x);
+isnan(x);
+j0(x); j1(x);
+lgamma(x);
+logb(x); log1p(x);
+rint(x);
+// trunc(x);
+y0(x); y1(x);
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_have_ieee_math=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_have_ieee_math=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_save_LIBS"
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_have_ieee_math" >&5
+echo "${ECHO_T}$ac_cv_cxx_have_ieee_math" >&6
+if test "$ac_cv_cxx_have_ieee_math" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IEEE_MATH
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for SYSV math library" >&5
+echo $ECHO_N "checking for SYSV math library... $ECHO_C" >&6
+if test "${ac_cv_cxx_have_sysv_math+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifndef _ALL_SOURCE
+ #define _ALL_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE
+ #define _XOPEN_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE_EXTENDED
+ #define _XOPEN_SOURCE_EXTENDED 1
+#endif
+#include <cmath>
+int
+main ()
+{
+double x = 1.0; double y = 1.0;
+_class(x);
+ilogb(x);
+itrunc(x);
+nearest(x);
+rsqrt(x);
+uitrunc(x);
+
+copysign(x,y);
+drem(x,y);
+fmod(x,y);
+hypot(x,y);
+nextafter(x,y);
+remainder(x,y);
+scalb(x,y);
+unordered(x,y);
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_have_sysv_math=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_have_sysv_math=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_save_LIBS"
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_have_sysv_math" >&5
+echo "${ECHO_T}$ac_cv_cxx_have_sysv_math" >&6
+if test "$ac_cv_cxx_have_sysv_math" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYSV_MATH
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether the compiler has complex<T>" >&5
+echo $ECHO_N "checking whether the compiler has complex<T>... $ECHO_C" >&6
+if test "${ac_cv_cxx_have_complex+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <complex>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif
+int
+main ()
+{
+complex<float> a; complex<double> b; return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_have_complex=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_have_complex=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_have_complex" >&5
+echo "${ECHO_T}$ac_cv_cxx_have_complex" >&6
+if test "$ac_cv_cxx_have_complex" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_COMPLEX
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether the compiler has complex math functions" >&5
+echo $ECHO_N "checking whether the compiler has complex math functions... $ECHO_C" >&6
+if test "${ac_cv_cxx_have_complex_math1+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <complex>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif
+int
+main ()
+{
+complex<double> x(1.0, 1.0), y(1.0, 1.0);
+cos(x); cosh(x); exp(x); log(x); pow(x,1); pow(x,double(2.0));
+pow(x, y); pow(double(2.0), x); sin(x); sinh(x); sqrt(x); tan(x); tanh(x);
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_have_complex_math1=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_have_complex_math1=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_save_LIBS"
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_have_complex_math1" >&5
+echo "${ECHO_T}$ac_cv_cxx_have_complex_math1" >&6
+if test "$ac_cv_cxx_have_complex_math1" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_COMPLEX_MATH1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether the compiler has more complex math functions" >&5
+echo $ECHO_N "checking whether the compiler has more complex math functions... $ECHO_C" >&6
+if test "${ac_cv_cxx_have_complex_math2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lm"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <complex>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif
+int
+main ()
+{
+complex<double> x(1.0, 1.0), y(1.0, 1.0);
+acos(x); asin(x); atan(x); atan2(x,y); atan2(x, double(3.0));
+atan2(double(3.0), x); log10(x); return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_cxx_have_complex_math2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_cxx_have_complex_math2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_save_LIBS"
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_have_complex_math2" >&5
+echo "${ECHO_T}$ac_cv_cxx_have_complex_math2" >&6
+if test "$ac_cv_cxx_have_complex_math2" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_COMPLEX_MATH2
+_ACEOF
+
+fi
+
+
+
+                                                                                                                                                                                              ac_config_files="$ac_config_files Makefile tvmet-config tvmet.spec include/Makefile include/tvmet/Makefile include/tvmet/config/Makefile include/tvmet/meta/Makefile include/tvmet/loop/Makefile include/tvmet/util/Makefile include/tvmet/xpr/Makefile include/tvmet/config/config-vc71.h doc/Makefile doc/Doxyfile doc/footer.html doc/tvmet.sty testsuite/Makefile tests/Makefile examples/Makefile benchmark/Makefile"
+
+          ac_config_commands="$ac_config_commands default"
+
+
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${CONFIG_DOC_TRUE}" && test -z "${CONFIG_DOC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"CONFIG_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"CONFIG_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${CONFIG_CPPUNIT_TRUE}" && test -z "${CONFIG_CPPUNIT_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"CONFIG_CPPUNIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"CONFIG_CPPUNIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by tvmet $as_me 1.7.1, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+tvmet config.status 1.7.1
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "tvmet-config" ) CONFIG_FILES="$CONFIG_FILES tvmet-config" ;;
+  "tvmet.spec" ) CONFIG_FILES="$CONFIG_FILES tvmet.spec" ;;
+  "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+  "include/tvmet/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/Makefile" ;;
+  "include/tvmet/config/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/config/Makefile" ;;
+  "include/tvmet/meta/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/meta/Makefile" ;;
+  "include/tvmet/loop/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/loop/Makefile" ;;
+  "include/tvmet/util/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/util/Makefile" ;;
+  "include/tvmet/xpr/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/xpr/Makefile" ;;
+  "include/tvmet/config/config-vc71.h" ) CONFIG_FILES="$CONFIG_FILES include/tvmet/config/config-vc71.h" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  "doc/Doxyfile" ) CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;;
+  "doc/footer.html" ) CONFIG_FILES="$CONFIG_FILES doc/footer.html" ;;
+  "doc/tvmet.sty" ) CONFIG_FILES="$CONFIG_FILES doc/tvmet.sty" ;;
+  "testsuite/Makefile" ) CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
+  "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  "benchmark/Makefile" ) CONFIG_FILES="$CONFIG_FILES benchmark/Makefile" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+  "config/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
+s,@CXX_OPTIMIZE_FLAGS@,$CXX_OPTIMIZE_FLAGS,;t t
+s,@CXX_DEBUG_FLAGS@,$CXX_DEBUG_FLAGS,;t t
+s,@CXX_WARN_FLAGS@,$CXX_WARN_FLAGS,;t t
+s,@DOXYGEN@,$DOXYGEN,;t t
+s,@DOXYGEN_HAVE_DOT@,$DOXYGEN_HAVE_DOT,;t t
+s,@CONFIG_DOC_TRUE@,$CONFIG_DOC_TRUE,;t t
+s,@CONFIG_DOC_FALSE@,$CONFIG_DOC_FALSE,;t t
+s,@LATEX_BATCHMODE@,$LATEX_BATCHMODE,;t t
+s,@LATEX_MODE@,$LATEX_MODE,;t t
+s,@CPPUNIT_CONFIG@,$CPPUNIT_CONFIG,;t t
+s,@CPPUNIT_CFLAGS@,$CPPUNIT_CFLAGS,;t t
+s,@CPPUNIT_LIBS@,$CPPUNIT_LIBS,;t t
+s,@CONFIG_CPPUNIT_TRUE@,$CONFIG_CPPUNIT_TRUE,;t t
+s,@CONFIG_CPPUNIT_FALSE@,$CONFIG_CPPUNIT_FALSE,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s,@LN_S@,$LN_S,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@EGREP@,$EGREP,;t t
+s,@ECHO@,$ECHO,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@CPP@,$CPP,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@F77@,$F77,;t t
+s,@FFLAGS@,$FFLAGS,;t t
+s,@ac_ct_F77@,$ac_ct_F77,;t t
+s,@LIBTOOL@,$LIBTOOL,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X$ac_file : 'X\(//\)[^/]' \| \
+	 X$ac_file : 'X\(//\)$' \| \
+	 X$ac_file : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    default ) chmod a+x tvmet-config ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+
+ac_prefix_conf_OUT=`echo include/tvmet/config.h`
+ac_prefix_conf_DEF=`echo _$ac_prefix_conf_OUT | sed -e 'y:abcdefghijklmnopqrstuvwxyz./,-:ABCDEFGHIJKLMNOPQRSTUVWXYZ____:'`
+ac_prefix_conf_PKG=`echo $PACKAGE`
+ac_prefix_conf_LOW=`echo _$ac_prefix_conf_PKG | sed -e 'y:ABCDEFGHIJKLMNOPQRSTUVWXYZ-:abcdefghijklmnopqrstuvwxyz_:'`
+ac_prefix_conf_UPP=`echo $ac_prefix_conf_PKG | sed -e 'y:abcdefghijklmnopqrstuvwxyz-:ABCDEFGHIJKLMNOPQRSTUVWXYZ_:'  -e '/^[0-9]/s/^/_/'`
+ac_prefix_conf_INP=`echo config/config.h`
+if test "$ac_prefix_conf_INP" = "_"; then
+   case $ac_prefix_conf_OUT in
+      */*) ac_prefix_conf_INP=`basename $ac_prefix_conf_OUT`
+      ;;
+      *-*) ac_prefix_conf_INP=`echo $ac_prefix_conf_OUT | sed -e 's/[a-zA-Z0-9_]*-//'`
+      ;;
+      *) ac_prefix_conf_INP=config.h
+      ;;
+   esac
+fi
+if test -z "$ac_prefix_conf_PKG" ; then
+   { { echo "$as_me:$LINENO: error: no prefix for _PREFIX_PKG_CONFIG_H" >&5
+echo "$as_me: error: no prefix for _PREFIX_PKG_CONFIG_H" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  echo "$as_me:$LINENO: result: creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines" >&5
+echo "${ECHO_T}creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines" >&6
+  if test -f $ac_prefix_conf_INP ; then
+    (dirname /* automatically generated */) 2>/dev/null ||
+$as_expr X/* automatically generated */ : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X/* automatically generated */ : 'X\(//\)[^/]' \| \
+	 X/* automatically generated */ : 'X\(//\)$' \| \
+	 X/* automatically generated */ : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/* automatically generated */ |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'
+    echo '#ifndef '$ac_prefix_conf_DEF >$ac_prefix_conf_OUT
+    echo '#define '$ac_prefix_conf_DEF' 1' >>$ac_prefix_conf_OUT
+    echo ' ' >>$ac_prefix_conf_OUT
+    echo /'*' $ac_prefix_conf_OUT. Generated automatically at end of configure. '*'/ >>$ac_prefix_conf_OUT
+
+    echo 's/#undef  *\([A-Z_]\)/#undef '$ac_prefix_conf_UPP'_\1/' >conftest.sed
+    echo 's/#undef  *\([a-z]\)/#undef '$ac_prefix_conf_LOW'_\1/' >>conftest.sed
+    echo 's/#define  *\([A-Z_][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_UPP"_\\1 \\" >>conftest.sed
+    echo '#define '$ac_prefix_conf_UPP"_\\1 \\2 \\" >>conftest.sed
+    echo '#endif/' >>conftest.sed
+    echo 's/#define  *\([a-z][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_LOW"_\\1 \\" >>conftest.sed
+    echo '#define '$ac_prefix_conf_LOW"_\\1 \\2 \\" >>conftest.sed
+    echo '#endif/' >>conftest.sed
+    sed -f conftest.sed $ac_prefix_conf_INP >>$ac_prefix_conf_OUT
+    echo ' ' >>$ac_prefix_conf_OUT
+    echo '/*' $ac_prefix_conf_DEF '*/' >>$ac_prefix_conf_OUT
+    echo '#endif' >>$ac_prefix_conf_OUT
+  else
+    { { echo "$as_me:$LINENO: error: input file $ac_prefix_conf_IN does not exist,     skip generating $ac_prefix_conf_OUT" >&5
+echo "$as_me: error: input file $ac_prefix_conf_IN does not exist,     skip generating $ac_prefix_conf_OUT" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  rm -f conftest.*
+fi
+
+
+echo "
+Configuration for  $PACKAGE $VERSION:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following optional features are enabled:
+
+Source code location          : $srcdir
+tvmet's unit-tests available  : `if test "x$CONFIG_CPPUNIT" = xyes; then echo yes; else echo no; fi`
+build documentation           : `if test "x$CONFIG_DOC" = xyes; then echo yes; else echo no; fi`
+using LaTeX non-stop mode     : `if test "x$CONFIG_DOC_LATEX_NONSTOP" = xyes; then echo yes; else echo no; fi`
+graphs and diagrams           : `if test "x$DOXYGEN_HAVE_DOT" = xyes; then echo -n yes; else echo no; fi`
+Install path                  : $prefix
+
+Compiler Flags used:
+
+CXX                           : $CXX
+CXXFLAGS                      : $CXXFLAGS
+
+The configure script has generated makefiles for your platform.
+You have several options now:
+
+make               Depends on configure's flags given, build the docs,
+                   build $PACKAGE $VERSION and run the regression tests.
+make docs          Makes the docs using doxygen (if enabled).
+make check         Make the unit tests (if CppUnit available).
+make install       Install tvmet.
+make uninstall     Uninstall tvmet.
+"
diff --git a/tvmet-1.7.1/configure.ac b/tvmet-1.7.1/configure.ac
new file mode 100644
index 0000000..7120d35
--- /dev/null
+++ b/tvmet-1.7.1/configure.ac
@@ -0,0 +1,342 @@
+dnl $Id: configure.ac,v 1.47 2005/04/26 15:07:00 opetzold Exp $
+dnl Configure script for the Tiny Vector Matrix Expression Template Library
+dnl Process this file with autoconf to produce a configure script.
+
+
+dnl autoconf 2.50 or higher to rebuild aclocal.m4, because the
+dnl AC_CREATE_PREFIX_CONFIG_H macro needs the AS_DIRNAME macro.
+AC_PREREQ(2.59)
+
+
+dnl Copy revision stamp into the `configure' script,
+AC_REVISION($Revision: 1.47 $)
+
+
+dnl Disable caching.
+define([AC_CACHE_LOAD], )
+define([AC_CACHE_SAVE], )
+
+
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT([tvmet],[1.7.1],[opetzold@users.sourceforge.net])
+
+
+dnl inform about
+AC_MSG_RESULT([Configure Tiny Vector Matrix using Expression Templates library AC_PACKAGE_VERSION])
+
+
+dnl config and versioning, the config.h header is in config - we use a prefixed
+dnl config header, see below
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_HEADERS([config/config.h])
+
+
+dnl Getting the Canonical System Type
+AC_CANONICAL_HOST
+
+
+dnl require gnu style, automake 1.8 or better, etc.
+AM_INIT_AUTOMAKE([gnu 1.8 no-define dist-bzip2])
+
+
+dnl --enable-maintainer-mode for configure
+AM_MAINTAINER_MODE
+
+
+# Declare variables which we want substituted in the Makefile.in's
+AC_SUBST(CXX_OPTIMIZE_FLAGS)
+AC_SUBST(CXX_DEBUG_FLAGS)
+AC_SUBST(CXX_WARN_FLAGS)
+
+
+dnl Manual configuration options of oopattern.
+AC_ARG_ENABLE(tvmet, [
+Options of tvmet:])
+
+
+dnl Process command-line arguments for compiler (parts borrowed from blitz++)
+AC_MSG_CHECKING([for compiler])
+AC_ARG_WITH(cxx,
+  [  --with-cxx=compiler     set specific C++ compiler and options (e.g. g++ (default), KCC, icc, pgCC)],
+  [case "$withval" in
+     KCC*)               # KAI C++  http://www.kai.com/
+       AC_MSG_RESULT([KAI C++])
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE +K3 -O3 -fast --inline_keyword_space_time=10000"
+       CXX_DEBUG_FLAGS="-g +K0 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS=""
+     ;;
+     g++*|gcc*)          # gcc  http://gcc.gnu.org/
+       AC_MSG_RESULT([GNU C++])
+       AC_SET_COMPILER($withval,"g++","")
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -finline-limit=5000 -ftemplate-depth-200 -fomit-frame-pointer"
+       CXX_DEBUG_FLAGS="-g -O1 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS="-W -Wall -Winline"
+
+       # paranoia on older gcc versions
+       gxx_version=`$CXX -v 2>&1 | grep "^.*g.. version" | \
+       sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//'`
+
+       case "$gxx_version" in
+           1.* | 2.[[0123456789]].*)
+           AC_MSG_ERROR([g++ version $gxx_version will probably fail to compile tvmet])
+         ;;
+       esac
+     ;;
+     icc)                # Intel C++ compiler   http://www.intel.com/
+       AC_MSG_RESULT([Intel C++])
+       AC_SET_COMPILER($withval,"icc","")
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -fp_port -Qoption,c,-ip_ninl_max_total_stats=3000"
+       CXX_DEBUG_FLAGS="-g -O0 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS="-Wall"
+     ;;
+     pgCC*)              # Portland group   http://www.pgroup.com/
+       AC_MSG_RESULT([Portland Group C++])
+       AC_SET_COMPILER($withval,"pgCC","")
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O4 -Mnoframe -Mnodepchk -Minline=levels:25"
+       CXX_DEBUG_FLAGS="-g -O0 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS=""
+     ;;
+     *)
+        AC_MSG_WARN([--with-cxx: unknown c++ compiler $withval])
+     ;;
+   esac],[
+       AC_MSG_RESULT([GNU C++ (default)])
+       AC_SET_COMPILER($withval,"g++","")
+       CXX_OPTIMIZE_FLAGS="-DTVMET_OPTIMIZE -O2 -finline-limit=5000 -ftemplate-depth-200 -fomit-frame-pointer"
+       CXX_DEBUG_FLAGS="-g -O1 -DTVMET_DEBUG"
+       CXX_WARN_FLAGS="-W -Wall -Winline"
+   ])
+
+
+dnl Check if the script was called with --enable-optimize, and if so
+dnl modify the compilation flags.
+AC_MSG_CHECKING([for compiler optimizations])
+tvmet_optimize=0
+AC_ARG_ENABLE(optimize,
+  [  --enable-optimize       enable compiler optimization flags],
+  [if test "$enableval" = yes; then
+     AC_MSG_RESULT([yes])
+     CXXFLAGS="$CXXFLAGS $CXX_OPTIMIZE_FLAGS"
+     tvmet_optimize=1
+   else
+     AC_MSG_RESULT([no])
+   fi], [
+     AC_MSG_RESULT([no])
+   ])
+
+
+dnl Set platform-specific optimization settings
+if test $tvmet_optimize -eq 1; then
+  AC_MSG_CHECKING([for compiler platform-specific optimizations])
+  case "$build_os" in
+    *linux*)
+      case "$CXX" in
+        g++)
+	  AC_MSG_RESULT([GNU/Linux (CPU=$build_cpu) using GNU GCC])
+	  # specifying -march=cpu-type implies -mcpu=cpu-type.
+          case "$build_cpu" in
+            i386|i486)
+	  	CXXFLAGS="$CXXFLAGS -malign-double -march=i386"
+	    ;;
+	    i586)
+		CXXFLAGS="$CXXFLAGS -malign-double -march=i586 -msse"
+	    ;;
+	    i686)
+		CXXFLAGS="$CXXFLAGS -malign-double -march=i686 -msse2"
+	    ;;
+	    k6*)
+                CXXFLAGS="$CXXFLAGS -malign-double -march=k6 -m3dnow"
+	  esac
+        ;;
+        icc)
+  	  AC_MSG_RESULT([GNU/Linux (CPU=$build_cpu) using Intel CC])
+          case "$build_cpu" in
+	    i586)
+		# Intel Pentium Pro, Intel Pentium II, and Intel Pentium III processors
+		CXXFLAGS="$CXXFLAGS -tpp6"
+	    ;;
+	    i686)
+		# Intel Pentium 4 processors
+		CXXFLAGS="$CXXFLAGS -tpp7"
+	    ;;
+	  esac
+        ;;
+      esac
+    ;;
+    *)
+      AC_MSG_RESULT([tvmet has not been tuned for this platform])
+    ;;
+  esac
+fi
+
+
+dnl Check if the script was called with --enable-debug, and if so
+dnl modify the compilation flags.
+AC_MSG_CHECKING([for compiler debug flags])
+AC_ARG_ENABLE(debug,
+  [  --enable-debug          enable compiler debug flags],
+  [if test "$enableval" = yes; then
+     AC_MSG_RESULT([yes])
+     CXXFLAGS="$CXXFLAGS $CXX_DEBUG_FLAGS"
+   fi], [
+     AC_MSG_RESULT([no])
+   ])
+
+
+dnl Check if the script was called with --enable-warnings, and if so
+dnl modify the compilation flags.
+AC_MSG_CHECKING([for compiler warn flags])
+AC_ARG_ENABLE(warnings,
+  [  --enable-warnings       enable compiler warning flags],
+  [if test "$enableval" = yes; then
+     AC_MSG_RESULT([yes])
+     CXXFLAGS="$CXXFLAGS $CXX_WARN_FLAGS"
+   fi], [
+     AC_MSG_RESULT([no])
+  ])
+
+
+dnl doxygen docs
+OP_DOXYGEN_DOC
+
+
+dnl cppunit support
+oopattern_config_cppunit=yes
+AC_ARG_ENABLE(cppunit,
+  [  --disable-cppunit       disable unit tests using cppunit],
+  oopattern_config_cppunit=$enableval)
+
+
+dnl check for cppunit for unit tests
+if test x"$oopattern_config_cppunit" = xyes; then
+
+  dnl Check if we have libcppunit
+  AM_PATH_CPPUNIT(1.8.0)
+
+  if test "x$no_cppunit" = xyes; then
+    CONFIG_CPPUNIT=no
+  else
+    CONFIG_CPPUNIT=yes
+  fi
+
+fi
+AC_MSG_CHECKING(for libcppunit support)
+if test "x${oopattern_config_cppunit}" = xyes -a "x$CONFIG_CPPUNIT" = xyes; then
+  CONFIG_CPPUNIT=yes
+  AC_MSG_RESULT([yes])
+else
+  CONFIG_CPPUNIT=no
+  AC_MSG_RESULT([no])
+fi
+AM_CONDITIONAL(CONFIG_CPPUNIT,[test x"$CONFIG_CPPUNIT" = xyes])
+
+
+dnl Checks for programs.
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+AC_LANG([C++])
+AC_PROG_CXX
+AC_PROG_LN_S
+
+
+dnl don't be confused, we don't build shared/static libs; it's
+dnl for the head install process only (for build and install
+dnl process from separate build directory)
+AC_PROG_LIBTOOL
+
+
+dnl Checks for libraries.
+AC_CHECK_LIB(dl, main)
+
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_STDBOOL			dnl for unit tests
+AC_CHECK_HEADERS([sys/time.h unistd.h])
+
+
+# Checks for library functions.
+AC_CHECK_FUNCS([floor pow rint sqrt])
+
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+AC_STRUCT_TM
+
+AC_C_LONG_DOUBLE
+AC_C_LONG_LONG
+AC_C_RESTRICT
+AC_CXX_HAVE_MUTABLE
+AC_CXX_TYPENAME
+AC_CXX_PARTIAL_SPECIALIZATION
+AC_CXX_NAMESPACES
+AC_CXX_HAVE_IEEE_MATH
+AC_CXX_HAVE_SYSV_MATH
+AC_CXX_HAVE_COMPLEX
+AC_CXX_HAVE_COMPLEX_MATH1
+AC_CXX_HAVE_COMPLEX_MATH2
+
+
+dnl create makefiles
+AC_CONFIG_FILES([
+	Makefile
+	tvmet-config
+	tvmet.spec
+	include/Makefile
+	include/tvmet/Makefile
+	include/tvmet/config/Makefile
+	include/tvmet/meta/Makefile
+	include/tvmet/loop/Makefile
+	include/tvmet/util/Makefile
+	include/tvmet/xpr/Makefile
+	include/tvmet/config/config-vc71.h
+	doc/Makefile
+	doc/Doxyfile
+	doc/footer.html
+	doc/tvmet.sty
+	testsuite/Makefile
+	tests/Makefile
+	examples/Makefile
+	benchmark/Makefile
+])
+AC_CONFIG_COMMANDS([default],[[chmod a+x tvmet-config]],[[]])
+AC_OUTPUT
+
+
+dnl prefixed config header
+AC_CREATE_PREFIX_CONFIG_H([include/tvmet/config.h], $PACKAGE, [config/config.h])
+
+
+dnl -------------------
+dnl tvmet's user epilog
+dnl -------------------
+echo "
+Configuration for  $PACKAGE $VERSION:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following optional features are enabled:
+
+Source code location          : $srcdir
+tvmet's unit-tests available  : `if test "x$CONFIG_CPPUNIT" = xyes; then echo yes; else echo no; fi`
+build documentation           : `if test "x$CONFIG_DOC" = xyes; then echo yes; else echo no; fi`
+using LaTeX non-stop mode     : `if test "x$CONFIG_DOC_LATEX_NONSTOP" = xyes; then echo yes; else echo no; fi`
+graphs and diagrams           : `if test "x$DOXYGEN_HAVE_DOT" = xyes; then echo -n yes; else echo no; fi`
+Install path                  : $prefix
+
+Compiler Flags used:
+
+CXX                           : $CXX
+CXXFLAGS                      : $CXXFLAGS
+
+The configure script has generated makefiles for your platform.
+You have several options now:
+
+make               Depends on configure's flags given, build the docs,
+                   build $PACKAGE $VERSION and run the regression tests.
+make docs          Makes the docs using doxygen (if enabled).
+make check         Make the unit tests (if CppUnit available).
+make install       Install tvmet.
+make uninstall     Uninstall tvmet.
+"
diff --git a/tvmet-1.7.1/doc/Doxyfile.in b/tvmet-1.7.1/doc/Doxyfile.in
new file mode 100644
index 0000000..a83ae69
--- /dev/null
+++ b/tvmet-1.7.1/doc/Doxyfile.in
@@ -0,0 +1,1120 @@
+# $Id: Doxyfile.in,v 1.14 2004/11/30 09:51:06 opetzold Exp $
+# Doxyfile 1.3.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = @PACKAGE@
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = "Version @VERSION@"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is used
+# as the annotated text. Otherwise, the brief description is used as-is. If left
+# blank, the following values are used ("$name" is automatically replaced with the
+# name of the entity): "The $name class" "The $name widget" "The $name file"
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+#
+# doxygen BUG: Obviously doxygen takes only the first path and ignores the 2nd
+
+STRIP_FROM_PATH        = @top_srcdir@/ @top_builddir@/
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP         = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = YES
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 2
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = "docme=\todo\nDoc me!"
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           = doxygen-warning
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = \
+		       	@top_srcdir@/include/ \
+			@top_srcdir@/doc \
+			@top_builddir@/doc \
+			@top_builddir@/include/tvmet/config.h \
+			@top_builddir@/include/tvmet/config/config-vc71.h
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS          = \
+		       *.h \
+		       *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = \
+		       @top_srcdir@/doc/Util.h \
+		       @top_srcdir@/doc/dox_functions.cc \
+		       @top_srcdir@/doc/dox_operators.cc
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = CVS \
+                         stamp* \
+                         *.in
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           = @top_srcdir@/examples
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *.cc \
+                         *.h
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             = @top_srcdir@/doc
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER           =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 2
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+#GENERATE_HTML          = @enable_html_docs@
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            = @srcdir@/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = @srcdir@/tvmet.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+#GENERATE_LATEX         = @enable_latex_docs@
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = YES
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = tvmet
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = @LATEX_BATCHMODE@
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.  This is useful
+# if you want to understand what is going on.  On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           = @top_srcdir@/include \
+			 @top_builddir@/include
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED             = DOXYGEN_SKIP_THIS \
+		         TVMET_HAVE_LONG_DOUBLE \
+                         TVMET_HAVE_COMPLEX \
+                         TVMET_HAVE_IEEE_MATH
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#   TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#   TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = html/@PACKAGE@-@VERSION@.tag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = @DOXYGEN_HAVE_DOT@
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = YES
diff --git a/tvmet-1.7.1/doc/Makefile.am b/tvmet-1.7.1/doc/Makefile.am
new file mode 100644
index 0000000..05b0c62
--- /dev/null
+++ b/tvmet-1.7.1/doc/Makefile.am
@@ -0,0 +1,218 @@
+# $Id: Makefile.am,v 1.22 2004/09/16 08:12:13 opetzold Exp $
+
+AM_CXXFLAGS = -O \
+	-I@top_srcdir@/include -I@top_builddir@/include
+
+DOXY_DOC = \
+	benchmark.dox \
+	build.dox \
+	compiler.dox \
+	faq.dox \
+	intro.dox \
+	license.dox \
+	links.dox \
+	misc.dox \
+	notes.dox \
+	projects.dox \
+	usage.dox \
+	works.dox
+
+HTML_MISC = \
+	tvmet.css \
+	header.html footer.html.in
+
+LTEX_MISC = \
+	tvmet.sty.in
+
+BENCH_FIG = \
+	axpy.png \
+	matrix_matrix.png \
+	matrix_vector.png \
+	aat.png \
+	ata.png
+
+EXTRA_DIST = \
+	$(DOXY_DOC) \
+	$(HTML_MISC) \
+	$(LTEX_MISC) \
+	$(BENCH_FIG)
+
+DISTCLEANFILES = \
+	Doxyfile doxygen-warning \
+	footer.html tvmet.sty
+
+# some depencies
+Doxyfile: 	Doxyfile.in
+footer.html:	footer.html.in
+tvmet.sty: 	tvmet.sty.in
+
+# non-install programs for generating doxygen files
+noinst_PROGRAMS	= dox_operators dox_functions
+dox_operators_SOURCES = dox_operators.cc Util.h
+dox_functions_SOURCES = dox_functions.cc Util.h
+
+#
+# rules for documentation, if ordered
+#
+if CONFIG_DOC
+
+#
+# file created on the fly
+#
+DOXY_BUILD = \
+	changelog.dox \
+	news.dox \
+	credits.dox \
+	install.dox \
+	operators.dox \
+	functions.dox
+
+DOXY_HTML_SRC = \
+	$(DOXY_DOC) \
+	$(DOXY_BUILD) \
+	$(patsubst %.in, %, $(HTML_MISC))
+
+DOXY_LTEX_SRC = \
+	$(patsubst %.in, %, $(LTEX_MISC))
+
+# file creating rules; not needed every time
+operators.dox: dox_operators
+	./dox_operators > operators.dox
+
+functions.dox: dox_functions
+	./dox_functions > functions.dox
+
+# file creating rules
+changelog.dox: @top_srcdir@/ChangeLog
+	@echo "/** \page changelog ChangeLog" > $@
+	@echo "\verbatim" >> $@
+	cat $< >> $@
+	@echo "\endverbatim" >> $@
+	@echo "*/" >> $@
+
+news.dox: @top_srcdir@/NEWS
+	@echo "/** \page news News" > $@
+	@echo "\verbatim" >> $@
+	cat $< >> $@
+	@echo "\endverbatim" >> $@
+	@echo "*/" >> $@
+
+credits.dox: @top_srcdir@/THANKS
+	@echo "/** \page credits Credits" > $@
+	@echo "\verbatim" >> $@
+	cat $< >> $@
+	@echo "\endverbatim" >> $@
+	@echo "*/" >> $@
+
+install.dox: @top_srcdir@/INSTALL
+	@echo "/** \page basic_install INSTALL" > $@
+	@echo "\verbatim" >> $@
+	cat $< >> $@
+	@echo "\endverbatim" >> $@
+	@echo "*/" >> $@
+
+
+#
+# doxygen API
+#
+DOC_API_PDF = $(PACKAGE)-$(VERSION).pdf
+
+all-local: doxygen-api
+
+# need's LaTeX style, since we use an own style for LaTeX
+# which is required for generating formulas in HTML too.
+# Doxygen LaTeX batchmode doesn't solves the problem right here.
+doxygen-html-dir:
+	@if test ! -d ./html; then mkdir ./html; fi
+
+doxygen-api: doxygen-html-dir Doxyfile $(DOXY_HTML_SRC)
+	@echo "Making HTML manual"
+	@cp @builddir@/tvmet.sty ./html/
+	@DOXYGEN@ $(DOXYGEN_OPTS)
+	@$(RM) -f ./html/tvmet.sty
+
+#
+# doxygen LaTeX API
+#
+TEXINPUTS_PATH=$(TEXINPUTS):$(top_builddir)
+
+noinst_DATA = $(DOC_API_PDF)
+
+all-local: $(noinst_DATA)
+
+dvi-local:
+ps-local:
+pdf-local: $(DOC_API_PDF)
+
+$(DOC_API_PDF): Doxyfile $(DOXY_LTEX_SRC)
+	@if test -d ./latex; then \
+		echo "Making PDF manual"; \
+		if test -f $@; then \
+			$(RM) $@; \
+		fi; \
+		TEXINPUTS=$(TEXINPUTS_PATH) $(MAKE) -C ./latex refman.pdf; \
+		$(LN_S) ./latex/refman.pdf $@; \
+	fi
+
+
+#
+# misc hooks
+#
+distclean-local:
+	@rm -f $(DOXY_BUILD)
+	@if test -f $(DOC_API_PDF); then \
+		$(RM) -f $(DOC_API_PDF); \
+	fi
+	@if test -d html; then \
+		$(RM) -rf html; \
+	fi
+	@if test -d latex; then \
+		$(RM) -rf latex; \
+	fi
+	@if test -d rtf; then \
+		$(RM) -rf rtf; \
+	fi
+	@if test -d man; then \
+		$(RM) -rf man; \
+	fi
+
+doc-dist: doxygen-api
+	echo "please wait while archiving the html docs."; \
+	tar cf - -C ./html . | bzip2 --best -c > $(PACKAGE)-docs-$(VERSION).tar.bz2
+
+# where to install all html documents
+TVMET_DOC_DIR = $(datadir)/doc/$(PACKAGE)-$(VERSION)
+
+# Automake's "distcheck" is sensitive to having files left over
+# after "make uninstall", so we have to clean up the install hook.
+uninstall-local:
+	@if test -d $(TVMET_DOC_DIR); then \
+		rm -rf $(TVMET_DOC_DIR); \
+	fi
+
+# Install hooks
+make-install-dirs:
+	@if test '!' -d $(TVMET_DOC_DIR); then \
+		$(mkinstalldirs) $(TVMET_DOC_DIR); \
+	fi
+
+install-data-hook: make-install-dirs
+	@echo Installing documentations into $(TVMET_DOC_DIR)
+	@echo "install html"
+	@$(INSTALL_DATA) @top_builddir@/doc/html/* $(TVMET_DOC_DIR)
+
+else
+doc-dist:
+install-data-hook:
+endif	# CONFIG_DOC
+
+
+# --------------------------------------------------------
+# in progress:
+# make refman twoside
+twoside:
+	class=`cat latex/refman.tex | grep documentclass`
+	newclass=`echo $$class | sed -e 's/twoside,//' -e 's/\[/\[twoside,/'`
+	@echo "class:" $$class
+	@echo "newclass:" $$newclass
+	cat latex/refman.tex | sed 's/$$class/$$newclass/' >foo
diff --git a/tvmet-1.7.1/doc/Makefile.in b/tvmet-1.7.1/doc/Makefile.in
new file mode 100644
index 0000000..1615e41
--- /dev/null
+++ b/tvmet-1.7.1/doc/Makefile.in
@@ -0,0 +1,687 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.22 2004/09/16 08:12:13 opetzold Exp $
+
+
+SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+noinst_PROGRAMS = dox_operators$(EXEEXT) dox_functions$(EXEEXT)
+subdir = doc
+DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/footer.html.in \
+	$(srcdir)/tvmet.sty.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES = Doxyfile footer.html tvmet.sty
+PROGRAMS = $(noinst_PROGRAMS)
+am_dox_functions_OBJECTS = dox_functions.$(OBJEXT)
+dox_functions_OBJECTS = $(am_dox_functions_OBJECTS)
+dox_functions_LDADD = $(LDADD)
+am_dox_operators_OBJECTS = dox_operators.$(OBJEXT)
+dox_operators_OBJECTS = $(am_dox_operators_OBJECTS)
+dox_operators_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/dox_functions.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/dox_operators.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES)
+DIST_SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES)
+DATA = $(noinst_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AM_CXXFLAGS = -O \
+	-I@top_srcdir@/include -I@top_builddir@/include
+
+DOXY_DOC = \
+	benchmark.dox \
+	build.dox \
+	compiler.dox \
+	faq.dox \
+	intro.dox \
+	license.dox \
+	links.dox \
+	misc.dox \
+	notes.dox \
+	projects.dox \
+	usage.dox \
+	works.dox
+
+HTML_MISC = \
+	tvmet.css \
+	header.html footer.html.in
+
+LTEX_MISC = \
+	tvmet.sty.in
+
+BENCH_FIG = \
+	axpy.png \
+	matrix_matrix.png \
+	matrix_vector.png \
+	aat.png \
+	ata.png
+
+EXTRA_DIST = \
+	$(DOXY_DOC) \
+	$(HTML_MISC) \
+	$(LTEX_MISC) \
+	$(BENCH_FIG)
+
+DISTCLEANFILES = \
+	Doxyfile doxygen-warning \
+	footer.html tvmet.sty
+
+dox_operators_SOURCES = dox_operators.cc Util.h
+dox_functions_SOURCES = dox_functions.cc Util.h
+
+#
+# rules for documentation, if ordered
+#
+
+#
+# file created on the fly
+#
+@CONFIG_DOC_TRUE@DOXY_BUILD = \
+@CONFIG_DOC_TRUE@	changelog.dox \
+@CONFIG_DOC_TRUE@	news.dox \
+@CONFIG_DOC_TRUE@	credits.dox \
+@CONFIG_DOC_TRUE@	install.dox \
+@CONFIG_DOC_TRUE@	operators.dox \
+@CONFIG_DOC_TRUE@	functions.dox
+
+@CONFIG_DOC_TRUE@DOXY_HTML_SRC = \
+@CONFIG_DOC_TRUE@	$(DOXY_DOC) \
+@CONFIG_DOC_TRUE@	$(DOXY_BUILD) \
+@CONFIG_DOC_TRUE@	$(patsubst %.in, %, $(HTML_MISC))
+
+@CONFIG_DOC_TRUE@DOXY_LTEX_SRC = \
+@CONFIG_DOC_TRUE@	$(patsubst %.in, %, $(LTEX_MISC))
+
+
+#
+# doxygen API
+#
+@CONFIG_DOC_TRUE@DOC_API_PDF = $(PACKAGE)-$(VERSION).pdf
+
+#
+# doxygen LaTeX API
+#
+@CONFIG_DOC_TRUE@TEXINPUTS_PATH = $(TEXINPUTS):$(top_builddir)
+@CONFIG_DOC_TRUE@noinst_DATA = $(DOC_API_PDF)
+
+# where to install all html documents
+@CONFIG_DOC_TRUE@TVMET_DOC_DIR = $(datadir)/doc/$(PACKAGE)-$(VERSION)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+footer.html: $(top_builddir)/config.status $(srcdir)/footer.html.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+tvmet.sty: $(top_builddir)/config.status $(srcdir)/tvmet.sty.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+dox_functions$(EXEEXT): $(dox_functions_OBJECTS) $(dox_functions_DEPENDENCIES) 
+	@rm -f dox_functions$(EXEEXT)
+	$(CXXLINK) $(dox_functions_LDFLAGS) $(dox_functions_OBJECTS) $(dox_functions_LDADD) $(LIBS)
+dox_operators$(EXEEXT): $(dox_operators_OBJECTS) $(dox_operators_DEPENDENCIES) 
+	@rm -f dox_operators$(EXEEXT)
+	$(CXXLINK) $(dox_operators_LDFLAGS) $(dox_operators_OBJECTS) $(dox_operators_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dox_functions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dox_operators.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@	if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-local distclean-tags
+
+dvi: dvi-am
+
+dvi-am: dvi-local
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am: pdf-local
+
+ps: ps-am
+
+ps-am: ps-local
+
+uninstall-am: uninstall-info-am uninstall-local
+
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-local distclean-tags distdir dvi \
+	dvi-am dvi-local html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am pdf-local \
+	ps ps-am ps-local tags uninstall uninstall-am \
+	uninstall-info-am uninstall-local
+
+
+# some depencies
+Doxyfile: 	Doxyfile.in
+footer.html:	footer.html.in
+tvmet.sty: 	tvmet.sty.in
+
+# file creating rules; not needed every time
+@CONFIG_DOC_TRUE@operators.dox: dox_operators
+@CONFIG_DOC_TRUE@	./dox_operators > operators.dox
+
+@CONFIG_DOC_TRUE@functions.dox: dox_functions
+@CONFIG_DOC_TRUE@	./dox_functions > functions.dox
+
+# file creating rules
+@CONFIG_DOC_TRUE@changelog.dox: @top_srcdir@/ChangeLog
+@CONFIG_DOC_TRUE@	@echo "/** \page changelog ChangeLog" > $@
+@CONFIG_DOC_TRUE@	@echo "\verbatim" >> $@
+@CONFIG_DOC_TRUE@	cat $< >> $@
+@CONFIG_DOC_TRUE@	@echo "\endverbatim" >> $@
+@CONFIG_DOC_TRUE@	@echo "*/" >> $@
+
+@CONFIG_DOC_TRUE@news.dox: @top_srcdir@/NEWS
+@CONFIG_DOC_TRUE@	@echo "/** \page news News" > $@
+@CONFIG_DOC_TRUE@	@echo "\verbatim" >> $@
+@CONFIG_DOC_TRUE@	cat $< >> $@
+@CONFIG_DOC_TRUE@	@echo "\endverbatim" >> $@
+@CONFIG_DOC_TRUE@	@echo "*/" >> $@
+
+@CONFIG_DOC_TRUE@credits.dox: @top_srcdir@/THANKS
+@CONFIG_DOC_TRUE@	@echo "/** \page credits Credits" > $@
+@CONFIG_DOC_TRUE@	@echo "\verbatim" >> $@
+@CONFIG_DOC_TRUE@	cat $< >> $@
+@CONFIG_DOC_TRUE@	@echo "\endverbatim" >> $@
+@CONFIG_DOC_TRUE@	@echo "*/" >> $@
+
+@CONFIG_DOC_TRUE@install.dox: @top_srcdir@/INSTALL
+@CONFIG_DOC_TRUE@	@echo "/** \page basic_install INSTALL" > $@
+@CONFIG_DOC_TRUE@	@echo "\verbatim" >> $@
+@CONFIG_DOC_TRUE@	cat $< >> $@
+@CONFIG_DOC_TRUE@	@echo "\endverbatim" >> $@
+@CONFIG_DOC_TRUE@	@echo "*/" >> $@
+
+@CONFIG_DOC_TRUE@all-local: doxygen-api
+
+# need's LaTeX style, since we use an own style for LaTeX
+# which is required for generating formulas in HTML too.
+# Doxygen LaTeX batchmode doesn't solves the problem right here.
+@CONFIG_DOC_TRUE@doxygen-html-dir:
+@CONFIG_DOC_TRUE@	@if test ! -d ./html; then mkdir ./html; fi
+
+@CONFIG_DOC_TRUE@doxygen-api: doxygen-html-dir Doxyfile $(DOXY_HTML_SRC)
+@CONFIG_DOC_TRUE@	@echo "Making HTML manual"
+@CONFIG_DOC_TRUE@	@cp @builddir@/tvmet.sty ./html/
+@CONFIG_DOC_TRUE@	@DOXYGEN@ $(DOXYGEN_OPTS)
+@CONFIG_DOC_TRUE@	@$(RM) -f ./html/tvmet.sty
+
+@CONFIG_DOC_TRUE@all-local: $(noinst_DATA)
+
+@CONFIG_DOC_TRUE@dvi-local:
+@CONFIG_DOC_TRUE@ps-local:
+@CONFIG_DOC_TRUE@pdf-local: $(DOC_API_PDF)
+
+@CONFIG_DOC_TRUE@$(DOC_API_PDF): Doxyfile $(DOXY_LTEX_SRC)
+@CONFIG_DOC_TRUE@	@if test -d ./latex; then \
+@CONFIG_DOC_TRUE@		echo "Making PDF manual"; \
+@CONFIG_DOC_TRUE@		if test -f $@; then \
+@CONFIG_DOC_TRUE@			$(RM) $@; \
+@CONFIG_DOC_TRUE@		fi; \
+@CONFIG_DOC_TRUE@		TEXINPUTS=$(TEXINPUTS_PATH) $(MAKE) -C ./latex refman.pdf; \
+@CONFIG_DOC_TRUE@		$(LN_S) ./latex/refman.pdf $@; \
+@CONFIG_DOC_TRUE@	fi
+
+#
+# misc hooks
+#
+@CONFIG_DOC_TRUE@distclean-local:
+@CONFIG_DOC_TRUE@	@rm -f $(DOXY_BUILD)
+@CONFIG_DOC_TRUE@	@if test -f $(DOC_API_PDF); then \
+@CONFIG_DOC_TRUE@		$(RM) -f $(DOC_API_PDF); \
+@CONFIG_DOC_TRUE@	fi
+@CONFIG_DOC_TRUE@	@if test -d html; then \
+@CONFIG_DOC_TRUE@		$(RM) -rf html; \
+@CONFIG_DOC_TRUE@	fi
+@CONFIG_DOC_TRUE@	@if test -d latex; then \
+@CONFIG_DOC_TRUE@		$(RM) -rf latex; \
+@CONFIG_DOC_TRUE@	fi
+@CONFIG_DOC_TRUE@	@if test -d rtf; then \
+@CONFIG_DOC_TRUE@		$(RM) -rf rtf; \
+@CONFIG_DOC_TRUE@	fi
+@CONFIG_DOC_TRUE@	@if test -d man; then \
+@CONFIG_DOC_TRUE@		$(RM) -rf man; \
+@CONFIG_DOC_TRUE@	fi
+
+@CONFIG_DOC_TRUE@doc-dist: doxygen-api
+@CONFIG_DOC_TRUE@	echo "please wait while archiving the html docs."; \
+@CONFIG_DOC_TRUE@	tar cf - -C ./html . | bzip2 --best -c > $(PACKAGE)-docs-$(VERSION).tar.bz2
+
+# Automake's "distcheck" is sensitive to having files left over
+# after "make uninstall", so we have to clean up the install hook.
+@CONFIG_DOC_TRUE@uninstall-local:
+@CONFIG_DOC_TRUE@	@if test -d $(TVMET_DOC_DIR); then \
+@CONFIG_DOC_TRUE@		rm -rf $(TVMET_DOC_DIR); \
+@CONFIG_DOC_TRUE@	fi
+
+# Install hooks
+@CONFIG_DOC_TRUE@make-install-dirs:
+@CONFIG_DOC_TRUE@	@if test '!' -d $(TVMET_DOC_DIR); then \
+@CONFIG_DOC_TRUE@		$(mkinstalldirs) $(TVMET_DOC_DIR); \
+@CONFIG_DOC_TRUE@	fi
+
+@CONFIG_DOC_TRUE@install-data-hook: make-install-dirs
+@CONFIG_DOC_TRUE@	@echo Installing documentations into $(TVMET_DOC_DIR)
+@CONFIG_DOC_TRUE@	@echo "install html"
+@CONFIG_DOC_TRUE@	@$(INSTALL_DATA) @top_builddir@/doc/html/* $(TVMET_DOC_DIR)
+
+@CONFIG_DOC_FALSE@doc-dist:
+@CONFIG_DOC_FALSE@install-data-hook:
+
+# --------------------------------------------------------
+# in progress:
+# make refman twoside
+twoside:
+	class=`cat latex/refman.tex | grep documentclass`
+	newclass=`echo $$class | sed -e 's/twoside,//' -e 's/\[/\[twoside,/'`
+	@echo "class:" $$class
+	@echo "newclass:" $$newclass
+	cat latex/refman.tex | sed 's/$$class/$$newclass/' >foo
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/doc/Util.h b/tvmet-1.7.1/doc/Util.h
new file mode 100644
index 0000000..1a0ccc0
--- /dev/null
+++ b/tvmet-1.7.1/doc/Util.h
@@ -0,0 +1,202 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Util.h,v 1.5 2003/12/19 18:01:37 opetzold Exp $
+ */
+
+#ifndef TVMET_DOC_UTIL_H
+#define TVMET_DOC_UTIL_H
+
+#include <vector>
+#include <tvmet/config.h>
+
+struct Function {
+  Function() { }
+  virtual ~Function() { }
+  virtual const char* name() const = 0;
+  virtual const char* description() const = 0;
+  virtual bool int_only() const = 0;
+  static const char* group() { return "_function"; }
+  static const char* group_unary() { return "_unary_function"; }
+  static const char* group_binary() { return "_binary_function"; }
+  template<class Stream> static Stream& doxy_groups(Stream& os) {
+    os << "/**\n"
+       << " * \\defgroup " << group() << " Global Functions\n"
+       << " */\n\n";
+    os << "/**\n"
+       << " * \\defgroup " << group_unary() << " Global Unary Functions\n"
+       << " * \\ingroup " << group() << "\n"
+       << " */\n\n";
+    os << "/**\n"
+       << " * \\defgroup " << group_binary() << " Global Binary Functions\n"
+       << " * \\ingroup " << group() << "\n"
+       << " */\n\n";
+    os << "/**\n"
+       << " * \\defgroup " << "_trinary_function" << " Global Trinary Functions\n"
+       << " * \\ingroup " << group() << "\n"
+       << " */\n\n";
+    return os;
+  }
+
+};
+
+class BinaryFunction : public Function {
+public:
+  BinaryFunction(const char* s, const char* d, bool i = false)
+    : m_name(s), m_description(d), m_int_only(i) { }
+  const char* name() const { return m_name; }
+  const char* description() const { return m_description; }
+  const char* group() const { return group_binary(); }
+  bool int_only() const { return m_int_only; }
+private:
+  const char* 						m_name;
+  const char* 						m_description;
+  bool 							m_int_only;
+};
+
+class UnaryFunction : public Function {
+public:
+  UnaryFunction(const char* s, const char* d, bool i = false)
+    : m_name(s), m_description(d), m_int_only(i)  { }
+  virtual ~UnaryFunction() { }
+  const char* name() const { return m_name; }
+  const char* description() const { return m_description; }
+  const char* group() const { return group_unary(); }
+  bool int_only() const { return m_int_only; }
+private:
+  const char* 						m_name;
+  const char* 						m_description;
+  bool 							m_int_only;
+};
+
+struct Operator {
+  Operator() { }
+  virtual ~Operator() { }
+  virtual const char* symbol() const = 0;
+  virtual const char* description() const = 0;
+  virtual bool int_only() const = 0;
+  static const char* group() { return "_operator"; }
+  static const char* group_unary() { return "_unary_operator"; }
+  static const char* group_binary() { return "_binary_operator"; }
+  template<class Stream> static Stream& doxy_groups(Stream& os) {
+    os << "/**\n"
+       << " * \\defgroup " << group() << " Global Operators\n"
+       << " */\n\n";
+    os << "/**\n"
+       << " * \\defgroup " << group_binary() << " Global Binary Operators\n"
+       << " * \\ingroup " << group() << "\n"
+       << " */\n\n";
+    os << "/**\n"
+       << " * \\defgroup " << group_unary() << " Global Unary Operators\n"
+       << " * \\ingroup " << group() << "\n"
+       << " */\n\n";
+    return os;
+  }
+};
+
+class BinaryOperator : public Operator {
+public:
+  BinaryOperator(const char* s, const char* d, bool i = false)
+    : m_symbol(s), m_description(d), m_int_only(i) { }
+  virtual ~BinaryOperator() { }
+  const char* symbol() const { return m_symbol; }
+  const char* description() const { return m_description; }
+  const char* group() const { return group_binary(); }
+ bool int_only() const { return m_int_only; }
+private:
+  const char* 						m_symbol;
+  const char* 						m_description;
+  bool 							m_int_only;
+};
+
+class UnaryOperator : public Operator {
+public:
+  UnaryOperator(const char* s, const char* d, bool i = false)
+    : m_symbol(s), m_description(d), m_int_only(i)  { }
+  virtual ~UnaryOperator() { }
+  const char* symbol() const { return m_symbol; }
+  const char* description() const { return m_description; }
+  const char* group() const { return group_unary(); }
+  bool int_only() const { return m_int_only; }
+private:
+  const char* 						m_symbol;
+  const char* 						m_description;
+  bool 							m_int_only;
+};
+
+class DataType {
+public:
+  DataType(const char* s, const char* d, bool i = false)
+    : m_name(s), m_description(d), m_is_int(i){ }
+  const char* name() const { return m_name; }
+  const char* description() const { return m_description; }
+  bool is_int() const { return m_is_int; }
+private:
+  const char* 						m_name;
+  const char* 						m_description;
+  bool 							m_is_int;
+};
+
+class Type
+{
+public:
+  Type() {
+    datatypes.push_back( DataType("int", "int", true) );
+    datatypes.push_back( DataType("float", "float") );
+    datatypes.push_back( DataType("double", "double") );
+#ifdef TVMET_HAVE_LONG_DOUBLE
+    datatypes.push_back( DataType("long double", "long double") );
+#endif // HAVE_LONG_DOUBLE
+#ifdef TVMET_HAVE_COMPLEX
+    datatypes.push_back( DataType("const std::complex<T>&", "std::complex<T>") );
+#endif // HAVE_COMPLEX
+  }
+
+  virtual ~Type() { }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    os << "namespace tvmet {\n\n";
+    return os;
+  }
+
+  template<class Stream>
+  Stream& footer(Stream& os) const {
+    os << "\n} // namespace tvmet\n\n";
+    return os;
+  }
+
+public:
+  typedef std::vector< DataType >::const_iterator	const_iterator;
+
+public:
+  const_iterator begin() const { return datatypes.begin(); }
+  const_iterator end() const { return datatypes.end(); }
+
+private:
+  std::vector< DataType >				datatypes;
+};
+
+#endif // TVMET_DOC_UTIL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/doc/aat.png b/tvmet-1.7.1/doc/aat.png
new file mode 100644
index 0000000..2e2a536
--- /dev/null
+++ b/tvmet-1.7.1/doc/aat.png
Binary files differ
diff --git a/tvmet-1.7.1/doc/ata.png b/tvmet-1.7.1/doc/ata.png
new file mode 100644
index 0000000..0e4d52f
--- /dev/null
+++ b/tvmet-1.7.1/doc/ata.png
Binary files differ
diff --git a/tvmet-1.7.1/doc/axpy.png b/tvmet-1.7.1/doc/axpy.png
new file mode 100644
index 0000000..d537720
--- /dev/null
+++ b/tvmet-1.7.1/doc/axpy.png
Binary files differ
diff --git a/tvmet-1.7.1/doc/benchmark.dox b/tvmet-1.7.1/doc/benchmark.dox
new file mode 100644
index 0000000..fa60b48
--- /dev/null
+++ b/tvmet-1.7.1/doc/benchmark.dox
@@ -0,0 +1,52 @@
+/*
+ * $Id: benchmark.dox,v 1.8 2004/04/10 04:58:35 opetzold Exp $
+ */
+
+/**
+
+  \page benchmark Benchmark
+
+  Prior to version 0.8.0, tvmet had benchmark results listed here. Benchmarking
+  isn't as easy as had been thought. The compiler's optimizer is very tricky -
+  even more than I am. 8( To outwit the optimizer takes time - I would rather
+  put the time into tvmet, itself.
+
+  Laurent Plagne has created some benchmarks using tvmet and other libraries,
+  please have a look at
+  <a href="http://www.opencascade.org/upload/87">opencascade</a>.
+
+  The following benchmarks are done on my
+  Intel(R) Pentium(R) 4 CPU 2.40GHz
+  Linux box:
+  - \ref bench_axpy
+  - \ref bench_matrix_matrix
+  - \ref bench_matrix_vector
+  - \ref bench_aat
+  - \ref bench_ata
+
+  using a patched version of BTL 20030124. The patch is necessary to be able
+  to compile tvmet due to the high inline level used here. The patch is
+  distributed with the package.
+
+  \section bench_axpy axpy
+  \image html axpy.png "axpy"
+
+  \section bench_matrix_matrix Matrix-Matrix
+  \image html matrix_matrix.png "Matrix-Matrix"
+
+  \section bench_matrix_vector Matrix-Vector
+  \image html matrix_vector.png "Matrix-Vector"
+
+  \section bench_aat MMt
+  \image html aat.png "M M^t"
+
+  \section bench_ata MtM
+  \image html ata.png "M^t M"
+
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
+//  LocalWords:  BTL GHz Plagne
diff --git a/tvmet-1.7.1/doc/build.dox b/tvmet-1.7.1/doc/build.dox
new file mode 100644
index 0000000..51946da
--- /dev/null
+++ b/tvmet-1.7.1/doc/build.dox
@@ -0,0 +1,199 @@
+/*
+ * $Id: build.dox,v 1.14 2005/04/07 15:59:19 opetzold Exp $
+ */
+
+/**
+  \page build Download, Configuration, Build and Installation of the library
+
+   <p>Contents:</p>
+  - \ref download
+  - \ref configure_unix
+  - \ref install_unix
+  - \ref install_win
+
+
+
+
+  \section download Download tvmet
+
+  <p>
+  You can download %tvmet <a href=http://sourceforge.net/project/showfiles.php?group_id=39733>here</a>.
+  For the regression tests you will need <a href=http://sourceforge.net/projects/cppunit>CppUnit</a>.
+  While these tests are not mandatory, they are recommended.
+  </p>
+
+  <p>
+  For the API documentation you will also need <a href=http://www.doxygen.org>doxygen</a>,
+  maybe you want a graphical class hierarchy, class graph etc you need
+  the 'dot' tool of <a href="http://www.graphviz.org/">GraphViz</a>
+  to draw the miscellaneous graphs.
+  </p>
+
+
+
+
+
+  \section configure_unix Configure tvmet on unix
+
+  See the \ref basic_install file for general informations.
+
+  <b>NEW</b> Starting with tvmet version 1.5.0 the configuration options
+  has been changed!
+
+  <dl>
+    <dt><tt>--enable-optimize</tt></dt>
+    <dd>This affects the compiler optimization options. Machine specific
+       compiler flags are switched on as well. The <code>TVMET_OPTIMIZE</code>
+       symbol is defined, which uses the gcc's
+       <code>__attribute__((always_inline))</code>.
+    </dd>
+  </dl>
+
+  <dl>
+    <dt><tt>--enable-debug</tt></dt>
+    <dd>Enables debugging mode for %tvmet. This affects the compiler
+      options and preprocessor definitions.  The <code>TVMET_DEBUG</code>
+      symbol is defined. If you compile %tvmet from another source directory
+      which defines <code>DEBUG</code>, then <code>TVMET_DEBUG</code> will be
+      <b>not</b> defined (This behavior differs from release less than 0.6.0).
+      Please have a look at the \ref debug section of the \ref faq.
+    </dd>
+  </dl>
+
+  <dl>
+    <dt><tt>--enable-warnings</tt></dt>
+    <dd>This affects the compiler warning options. The warning level is on
+      a high level for default!</dd>
+  </dl>
+
+  <dl>
+    <dt><tt>--enable-docs</tt></dt>
+    <dd>Enables generation of API documentation using <a href=http://www.doxygen.org>doxygen</a>.
+      If the configure scripts founds the <a href="http://www.graphviz.org/">GraphViz</a>
+      'dot' tool it will be used. Further more an PDF file of the API
+      will be generated using doxygen too.
+    </dd>
+  </dl>
+
+  <dl>
+    <dt><tt>--enable-verbose-latex</tt></dt>
+    <dd>Uses LaTeX non-stop mode for generating the PDF file of tvmet's
+      API documentation.
+    </dd>
+  </dl>
+
+  <dl>
+    <dt><tt>--disable-cppunit</tt></dt>
+    <dd>Disables the regression/unit test. For these tests you need an installed
+      <a href="http://www.sourceforge.net/projects/cppunit">CppUnit</a>.
+    </dd>
+  </dl>
+
+  <dl>
+    <dt><tt>--with-cxx=compiler</tt></dt>
+    <dd>Set the C++ compiler to compiler and options. The known compiler are
+      the GNU g++ (default), Intel icc, Kai C++ KCC, Portland Group C++ pgCC.
+      Please have a look at the \ref compiler page.
+    </dd>
+  </dl>
+
+
+
+
+
+  \section install_unix Build and Installation of tvmet on unix
+
+  The build target for make are:
+
+  <dl>
+    <dt><tt>all</tt></dt>
+    <dd>Makes tvmet ready for installation.</dd>
+  </dl>
+
+  <dl>
+    <dt><tt>docs</tt></dt>
+    <dd>Makes the documentation using doxygen. Depends on the options given
+      to the configure script, the documentation are HTML and PDF/LaTeX.</dd>
+  </dl>
+
+  <dl>
+    <dt><tt>check</tt></dt>
+    <dd>Build and run the regression tests (needs CppUnit).</dd>
+  </dl>
+
+  <dl>
+    <dt><tt>install</tt></dt>
+    <dd>Installs tvmet.</dd>
+  </dl>
+
+  <dl>
+    <dt><tt>uninstall</tt></dt>
+    <dd>Do you really want this? :-)</dd>
+  </dl>
+
+  Further more inside the <tt>examples</tt> directory there is the target:
+
+  <dl>
+    <dt><tt>examples</tt></dt>
+    <dd>Build tvmet's examples.
+
+      At this date the example directory contains simple examples
+      for matrix, vector and matrix-vector operations. Further more
+      some sources which shows the use for expression tree printing
+      (expands the expression tree used).
+    </dd>
+  </dl>
+
+
+  Files will be installed in the following directories:
+
+  <ul>
+    <li><tt>Executables&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/bin</tt></li>
+    <li><tt>Docs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/share/doc/tvmet-${version}</tt></li>
+    <li><tt>Man pages&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/man</tt></li>
+    <li><tt>Header file&nbsp;&nbsp;&nbsp;&nbsp;-&gt; ${prefix}/include/tvmet</tt></li>
+  </ul>
+
+  Default value for prefix is <tt>/usr/local</tt> but you may change it
+  with <tt>--prefix</tt> option to the <tt>configure</tt> script (see above).
+
+
+
+
+  \section install_win Build and Installation of tvmet on MS Windows
+
+  First, the windows version used doesn't matter - the compiler is your
+  tool. The compiler has to understand the high level C++ style of
+  tvmet.
+
+  Second, tvmet comes with pre-configured files for the windows compiler.
+  Therefore you don't need to follow the configure and build procedure. An
+  exception is the <a href="http://www.cygwin.com">cygwin</a> and
+  <a href="http://www.mingw.org/">MinGW</a> environment
+  since they emulate the unix environment on windows - they follow the
+  unix style process therefore.
+
+  Well, simply copy the tvmet source tree complete or only the include
+  directory to a location of your choice and include the path to your
+  compiler environment. Thats all.
+
+  To build the regression tests it's on your own to build support for
+  <a href="http://cppunit.sourceforge.net">cppunit</a> and create the
+  appropriate sub-project. tvmet does not deliver Microsoft Visual Studio
+  project files.
+
+  If of interest the config file for Visual Studio can be found on
+  <tt>tvmet/config/config-vc71.h</tt>. There are all compiler quirks and
+  defines needed.
+
+
+  \sa \ref vc71
+
+
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
+//  LocalWords:  CppUnit GraphViz doxygen
diff --git a/tvmet-1.7.1/doc/compiler.dox b/tvmet-1.7.1/doc/compiler.dox
new file mode 100644
index 0000000..4bcd900
--- /dev/null
+++ b/tvmet-1.7.1/doc/compiler.dox
@@ -0,0 +1,375 @@
+/*
+ * $Id: compiler.dox,v 1.24 2005/03/09 12:05:19 opetzold Exp $
+ */
+
+/**
+   \page compiler Compiler Support
+
+   <p>Contents:</p>
+   - \ref requirements
+   - \ref gcc
+   - \ref kcc
+   - \ref pgCC
+   - \ref intel
+   - \ref vc71
+
+   \section requirements General compiler Requirements
+
+   This library is designed for portability - no compiler specific extensions
+   are used. Nevertheless, there are a few requirements:  (These are all a part
+   of the C++ standard.)
+
+   - Support for the <tt>mutable</tt> keyword is required.  This is used by the
+     CommaInitializer only.
+
+   - The <tt>typename</tt> keyword is used exhaustively here.
+
+   - The namespace concept is required.  The tvmet library is itself is a
+     namespace. To avoid collisions of operators, there is also an element_wise
+     namespace within tvmet.
+
+   - Partial specialization is needed for the extrema functions min and max
+     to distinguish between vectors and matrices. This allows tvmet to return
+     an object with a specific behavior.  (The location of an extremum in a
+     matrix has a (row, column) position whereas a vector extremum has only a
+     single index for its position).
+
+   \section gcc The GNU Compiler Collection
+
+   The <a href=http://gcc.gnu.org>GNU compiler</a> collection is mainly used for
+   developing this library. Moreover, it does compile the library the fastest.
+
+   \subsection gcc2953 GNU C++ Compiler v2.95.3
+
+   Gcc v2.95.3 is the last official release of the version 2 series from gnu.org.
+   Since this compiler features the \ref requirements it does work, but only
+   partial.
+
+   There are certain difficulties - see \ref ambiguous_overload (also, please
+   read about \ref gcc296).  Furthermore, there are problems with functions and
+   operators declared in the namespace <code>element_wise</code> - the
+   compiler doesn't seem to find them--even though the compiler does know
+   about namespace tvmet.  It appears to be a problem with nested namespaces and
+   the compiler's ability to perform function/operator lookup, especially during
+   regression tests: <code> matrix /= matrix </code> compiles inside a single
+   file but not at the regression tests--which is a contradiction in terms.
+
+   Porting to gcc v2.95.3 requires a lot of knowledge and effort--unfortunately,
+   I don't have enough of either.  The examples do compile and the regression
+   tests build partially.
+
+   Matrix and vector operators are working, but don't expect too much.
+
+   \subsection gcc296 GNU C++ Compiler v2.96 (Rh7.x, MD8.x)
+
+   This compiler isn't an official release of the GNU Compiler group but shipped
+   by <a href=http://www.redhat.com>Red Hat</a> and Co.
+
+   Blitz++ is using a hasFastAccess() flag to perform a check for the use of
+   _bz_meta_vecAssign::fastAssign (without bounds checking) or
+   _bz_meta_vecAssign::assign (with bounds checking). This
+   isn't really necessary for operations on blitz::TinyVector, since it's
+   always true. Nevertheless, it is important for the produced asm code using
+   the gcc-c++-2.96-0.48mdk.  Generally the code for Blitz++ using the gcc-2.96
+   is better than tvmet because of this (tested!).
+
+   I got into trouble with stl_relops.h where miscellaneous operators are defined. A
+   simple define of __SGI_STL_INTERNAL_RELOPS in the config header doesn't solve
+   the problem, only the commented out header version, see \ref
+   ambiguous_overload.  Because of this problem, the regression tests don't
+   compile with this version.  Projects with do not use the relational
+   operators are not affected.
+
+   It seems that the inlining performed by this compiler collection isn't very
+   smart. I got a lot of warnings: can't inline call to ... So, it would be
+   best to use the \ref gcc30x and later compilers.
+
+   \subsection gcc30x GNU C++ Compiler v3.0.x
+
+   These compiler produce better code than the \ref gcc296! Even the problems
+   with blitz++ fastAssign have vanished. And this compiler conforms to the
+   standard.  The regression tests does compile and run successfully.
+
+   Due to the nature of ET and MT there is a need for a high level of inlining.
+   The v3.0.x seems to do this well as compared to the v2.9x compilers which
+   produce inline warnings.
+
+   This compiler works great with the
+   <a href=http://www.stlport.org">STLPort-4.5.3</a>
+   implementation of the STL/C++ Library, Tiny Vector and Matrix template library
+   and <a href=http://cppunit.sourceforge.net>cpp-unit</a>.
+
+   \subsection gcc31x GNU C++ Compiler v3.1
+
+   %tvmet does compile with this new GNU C++ compiler. The produced code looks
+   as good as the code created by \ref gcc30x.  (Does anyone have time to make
+   a benchmark?)
+
+   The primary goal is conformance to the standard ISO/IEC 14882:1998.
+
+   \subsection gcc32x GNU C++ Compiler v3.2.x
+
+   The once again changed Application Binary Interface (ABI) doesn't affect
+   tvmet since it isn't a binary library--it's only compiled templates inside
+   the client code.
+
+   There are some problems with the GNU C++ compiler collection on the
+   regression test due to some bugs (IMO), \sa \ref regressiontest_failed.
+
+   \subsection gcc33x GNU C++ Compiler v3.3
+
+   Tested and works fine. Only some warnings on failed inlining which doesn't
+   concern tvmet directly.
+
+   Anyway, here the code from <tt>examples/ray.cc</tt> on gcc 3.3.3 using
+   <tt>-O2 -DTVMET_OPTIMIZE</tt>
+
+   \par Assembler (IA-32 Intel® Architecture):
+   \code
+	movl	16(%ebp), %edx
+	movl	12(%ebp), %ebx
+	movl	8(%ebp), %esi
+	fldl	8(%edx)
+	fldl	16(%edx)
+	fmull	16(%ebx)
+	fxch	%st(1)
+	movl	%ebx, -24(%ebp)
+	fmull	8(%ebx)
+	movl	%edx, -32(%ebp)
+	fldl	(%edx)
+	fmull	(%ebx)
+	fxch	%st(1)
+	movl	%edx, -60(%ebp)
+	movl	%edx, -12(%ebp)
+	faddp	%st, %st(2)
+	faddp	%st, %st(1)
+	fadd	%st(0), %st
+	fstpl	-56(%ebp)
+	movl	-56(%ebp), %ecx
+	movl	-52(%ebp), %eax
+	movl	%ecx, -20(%ebp)
+	movl	%eax, -16(%ebp)
+	movl	%ecx, -40(%ebp)
+	movl	%eax, -36(%ebp)
+	movl	%ecx, -68(%ebp)
+	movl	%eax, -64(%ebp)
+	fldl	(%edx)
+	fmull	-20(%ebp)
+	fsubrl	(%ebx)
+	fstpl	(%esi)
+	fldl	8(%edx)
+	fmull	-20(%ebp)
+	fsubrl	8(%ebx)
+	fstpl	8(%esi)
+	fldl	16(%edx)
+	fmull	-20(%ebp)
+	fsubrl	16(%ebx)
+	fstpl	16(%esi)
+	addl	$64, %esp
+	popl	%ebx
+	popl	%esi
+	popl	%ebp
+	ret
+   \endcode
+
+   \subsection gcc34x GNU C++ Compiler v3.4.x
+
+   The compiler 3.4.3 works fine, starting with tvmet release 1.7.1. The problem is
+   the correct syntax for the CommaInitializer template declaration and
+   implementation.
+
+   There is no assembler output for our <tt>examples/ray.cc</tt>, since I don't
+   have this compiler yet (yes, I need to update my linux system ;-)
+
+
+   \section kcc Kai C++
+
+   This has not been tested.  Unfortunately Kai's compiler is no longer shipped
+   -- one should use the Intel compiler instead
+   (see <a href=http://www.kai.com>here</a>).
+
+   If you have used it successfully including regression and/or benchmark tests,
+   please give me an answer.
+
+   \section pgCC Portland Group Compiler Technology
+
+   \subsection pgCC32 Portland Group C++ 3.2
+
+   The <a href=http://www.pgroup.com>Portland Group</a> C++ compiler is shipped
+   with the RogueWave Standard C++ Library which provides conformance to the
+   standard.  Unfortunately, the &lt;cname&gt; C library wrapper headers and the C++
+   overloads of the math functions are not provided on all platforms, see
+   <http://www.cug.com/roundup>.  The download evaluation version 3.2-4 for
+   Linux is affected for example. At first glance, it does compile with pgCC
+   since it has has the great <a href=http://www.edg.com>EDG</a> front-end.
+
+   Maybe there is a solution with other standard library implementations like
+   <a href=http://www.stlport.org>STLPort</a> (On a quick try the STL Port
+   doesn't recognize the pgCC). If you know more about this, please let me know.
+
+   Anyway, the code produced is very poor even if I use high inlining levels
+   like the command line option -Minline=levels:100 which increases the compile
+   time dramatically!  The benchmark tests have not been done.  Unfortunately,
+   my trial period has expired.  I haven't any idea if this compiler will pass
+   the regression tests.
+
+   \subsection pgCC51 Portland Group C++ 5.1
+
+   The <a href=http://www.pgroup.com>Portland Group</a> C++ compiler is shipped
+   with the <a href=http://www.stlport.org>STLport</a> Standard C++ Library, cool!
+
+   The code produced isn't very compact compared with the intel or gnu compiler.
+   Anyway it works, but the compiler time increases dramatically
+   even on higher inline levels.
+
+
+   \section intel Intel Compiler
+
+   \subsection icc5 Intel Compiler v5.0.1
+
+   This compiler complains even more than gcc-3.0.x regarding template
+   specifiers (e.g. correct spaces for template arguments to std::complex are
+   needed even when not instanced).
+
+   The produced code looks good but, I haven't done a benchmark to compare it
+   with the gcc-3.0.x since the compile time increases for the benchmark test
+   dramatically.
+
+   I have not run any regression tests due to the compile time needed by my
+   AMD K6/400 Linux box ...
+
+   \subsection icc6 Intel Compiler v6.0.x
+
+   Should work, but I haven't tested it.
+
+   \subsection icc7 Intel Compiler v7.x
+
+   This compiler is well supported by tvmet and passes the regression tests
+   without any failure - as opposed to the GNU C++ compiler collection.
+
+   \subsection icc8 Intel Compiler v8.x
+
+   No regression tests are done - reports are welcome. I'm not expecting
+   problems. Anyway, this versions uses pure macros for IEEE math isnan and
+   isinf. This prevents overwriting with tvmet's functions. Therefore
+   this functions are disabled after tvmet release 1.4.1. The code produced
+   is even on <tt>examples/ray.cc</tt> more compact than the \ref gcc33x.
+
+   Anyway, here the code from <tt>examples/ray.cc</tt> using
+   <tt>-O2 -DTVMET_OPTIMIZE</tt>
+
+   \par Assembler (IA-32 Intel® Architecture):
+   \code
+        movl      4(%esp), %ecx
+        movl      8(%esp), %edx
+        movl      12(%esp), %eax
+        fldl      (%edx)
+        fmull     (%eax)
+        fldl      8(%edx)
+        fmull     8(%eax)
+        fldl      16(%edx)
+        fmull     16(%eax)
+        faddp     %st, %st(1)
+        faddp     %st, %st(1)
+        fldl      (%eax)
+        fxch      %st(1)
+        fadd      %st(0), %st
+        fmul      %st, %st(1)
+        fxch      %st(1)
+        fsubrl    (%edx)
+        fstpl     (%ecx)
+        fldl      8(%eax)
+        fmul      %st(1), %st
+        fsubrl    8(%edx)
+        fstpl     8(%ecx)
+        fldl      16(%eax)
+        fmulp     %st, %st(1)
+        fsubrl    16(%edx)
+        fstpl     16(%ecx)
+        ret
+   \endcode
+
+
+
+
+   \section vc71 Microsoft Visual C++ v7.1
+
+   \htmlonly
+   <script language="JavaScript">
+   var m_name="blbounnejapny";
+   var m_domain="hotmail.com";
+   var m_text='<a href="mailto:'+m_name+'@'+m_domain+'?subject=tvmet and Microsoft VC++">';
+   m_text+='Robi Carnecky</a>';
+   document.write(m_text);
+   </script>
+   \endhtmlonly
+   \latexonly
+   Robi Carnecky <blbounnejapny@hotmail.com>
+   \endlatexonly
+   has reported the success on tvmet using Visual C++ v7.1.   At this
+   release of tvmet there are some warnings left - the work is on
+   progress.
+
+   The <a href="http://msdn.microsoft.com/visualc/vctoolkit2003/">Microsoft Visual C++ Toolkit 2003</a>
+   and Visual C++ prior 7.1 do not compile - you will get an undefined
+   internal error unfortunally.
+
+   Anyway, here the code from <tt>examples/ray.cc</tt>:
+
+   \par Assembler (IA-32 Intel® Architecture, no SSE2):
+   \code
+	push	ebp
+	mov	ebp, esp
+	and	esp, -8					; fffffff8H
+	sub	esp, 28					; 0000001cH
+	mov	eax, DWORD PTR _ray$[ebp]
+	mov	ecx, DWORD PTR _surfaceNormal$[ebp]
+	fld	QWORD PTR [eax+16]
+	fmul	QWORD PTR [ecx+16]
+	push	ebx
+	fld	QWORD PTR [eax+8]
+	push	esi
+	fmul	QWORD PTR [ecx+8]
+	push	edi
+	mov	edi, DWORD PTR $T35206[esp+52]
+	faddp	ST(1), ST(0)
+	mov	DWORD PTR $T35027[esp+60], edi
+	fld	QWORD PTR [eax]
+	pop	edi
+	fmul	QWORD PTR [ecx]
+	faddp	ST(1), ST(0)
+	fadd	ST(0), ST(0)
+	fstp	QWORD PTR $T35206[esp+36]
+	mov	esi, DWORD PTR $T35206[esp+40]
+	mov	edx, DWORD PTR $T35206[esp+36]
+	mov	ebx, DWORD PTR $T35265[esp+40]
+	mov	DWORD PTR $T35027[esp+44], edx
+	mov	edx, DWORD PTR _reflection$[ebp]
+	mov	DWORD PTR $T35027[esp+48], esi
+	fld	QWORD PTR $T35027[esp+44]
+	fmul	QWORD PTR [ecx]
+	pop	esi
+	mov	DWORD PTR $T35027[esp+36], ebx
+	pop	ebx
+	fsubr	QWORD PTR [eax]
+	fstp	QWORD PTR [edx]
+	fld	QWORD PTR $T35027[esp+36]
+	fmul	QWORD PTR [ecx+8]
+	fsubr	QWORD PTR [eax+8]
+	fstp	QWORD PTR [edx+8]
+	fld	QWORD PTR $T35027[esp+36]
+	fmul	QWORD PTR [ecx+16]
+	fsubr	QWORD PTR [eax+16]
+	fstp	QWORD PTR [edx+16]
+	mov	esp, ebp
+	pop	ebp
+   \endcode
+
+   \sa \ref regressiontest_failed
+   \sa \ref install_win
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/dox_functions.cc b/tvmet-1.7.1/doc/dox_functions.cc
new file mode 100644
index 0000000..ac85787
--- /dev/null
+++ b/tvmet-1.7.1/doc/dox_functions.cc
@@ -0,0 +1,448 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: dox_functions.cc,v 1.8 2003/12/19 18:01:37 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <tvmet/config.h>
+
+#include "Util.h"
+
+class FunctionBase
+{
+public:
+  FunctionBase() {
+    m_binary_functions.push_back( BinaryFunction("atan2", "arcus tangent of two variables") );
+    m_binary_functions.push_back( BinaryFunction("drem", "floating-point remainder") );
+    m_binary_functions.push_back( BinaryFunction("fmod", "floating-point remainder") );
+    m_binary_functions.push_back( BinaryFunction("hypot", "Euclidean distance") );
+    m_binary_functions.push_back( BinaryFunction("jn", "Bessel") );
+    m_binary_functions.push_back( BinaryFunction("yn", "Bessel") );
+    m_binary_functions.push_back( BinaryFunction("pow", "power") );
+
+    m_unary_functions.push_back( UnaryFunction("abs", "absolute value") );
+    m_unary_functions.push_back( UnaryFunction("cbrt", "cube root") );
+    m_unary_functions.push_back( UnaryFunction("floor", "round") );
+    m_unary_functions.push_back( UnaryFunction("rint", "round") );
+    m_unary_functions.push_back( UnaryFunction("sin", "sin") );
+    m_unary_functions.push_back( UnaryFunction("sinh", "sinh") );
+    m_unary_functions.push_back( UnaryFunction("cos", "cos") );
+    m_unary_functions.push_back( UnaryFunction("cosh", "cosh") );
+    m_unary_functions.push_back( UnaryFunction("asin", "asin") );
+    m_unary_functions.push_back( UnaryFunction("acos", "acos") );
+    m_unary_functions.push_back( UnaryFunction("atan", "atan") );
+    m_unary_functions.push_back( UnaryFunction("exp", "exponential") );
+    m_unary_functions.push_back( UnaryFunction("log", "logarithmic") );
+    m_unary_functions.push_back( UnaryFunction("log10", "logarithmic") );
+    m_unary_functions.push_back( UnaryFunction("sqrt", "sqrt") );
+#ifdef TVMET_HAVE_IEEE_MATH
+    m_unary_functions.push_back( UnaryFunction("asinh", "IEEE Math asinh") );
+    m_unary_functions.push_back( UnaryFunction("acosh", "IEEE Math acosh") );
+    m_unary_functions.push_back( UnaryFunction("atanh", "IEEE Math atanh") );
+    m_unary_functions.push_back( UnaryFunction("expm1", "IEEE Math expm1") );
+    m_unary_functions.push_back( UnaryFunction("log1p", "IEEE Math log1p") );
+    m_unary_functions.push_back( UnaryFunction("erf", "IEEE Math erf") );
+    m_unary_functions.push_back( UnaryFunction("erfc", "IEEE Math erfc") );
+    m_unary_functions.push_back( UnaryFunction("isnan", "IEEE Math isnan. "
+					       "Return nonzero value if X is a NaN.") );
+    m_unary_functions.push_back( UnaryFunction("isinf", "IEEE Math isinf. "
+					       "Return nonzero value if X is positive or negative infinity.") );
+    m_unary_functions.push_back( UnaryFunction("isfinite", "fIEEE Math isfinite. "
+					       "Return nonzero value if X is not +-Inf or NaN.") );
+    m_unary_functions.push_back( UnaryFunction("j0", "IEEE Math Bessel") );
+    m_unary_functions.push_back( UnaryFunction("j1", "IEEE Math Bessel") );
+    m_unary_functions.push_back( UnaryFunction("y0", "IEEE Math Bessel") );
+    m_unary_functions.push_back( UnaryFunction("y1", "IEEE Math Bessel") );
+    m_unary_functions.push_back( UnaryFunction("lgamma", "IEEE Math lgamma") );
+#endif
+  }
+
+  virtual ~FunctionBase() { }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    m_type.header(os);
+    return os;
+  }
+
+  template<class Stream>
+  Stream& footer(Stream& os) const {
+    m_type.footer(os);
+    return os;
+  }
+
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    return os;
+  }
+
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    return os;
+  }
+
+public:
+  typedef std::vector< BinaryFunction >::const_iterator	bfun_iterator;
+  typedef std::vector< UnaryFunction >::const_iterator	ufun_iterator;
+
+public:
+  virtual const std::vector< BinaryFunction >& bfun() const { return m_binary_functions; }
+  virtual const std::vector< UnaryFunction >& ufun() const { return m_unary_functions; }
+
+protected:
+  std::vector< BinaryFunction >		m_binary_functions;
+  std::vector< UnaryFunction >		m_unary_functions;
+  Type					m_type;
+};
+
+
+
+class XprFunctions : public FunctionBase
+{
+public:
+  XprFunctions() { }
+
+public:
+  template<class Stream>
+  Stream& operator()(Stream& os) const {
+    header(os);
+
+    binary(os);
+    binary2(os);
+    unary(os);
+
+    footer(os);
+
+    return os;
+  }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    FunctionBase::header(os);
+    os << "//\n"
+       << "// XprFunctions.h\n"
+       << "//\n\n";
+    return os;
+  }
+
+  // binary functions
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    FunctionBase::binary(os);
+
+    for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function for two XprVector.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const XprMatrix<E1, Rows, Cols>& lhs, const XprMatrix<E2, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function for two XprMatrix.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // binary functions with pod and std::complex<>
+  template<class Stream>
+  Stream& binary2(Stream& os) const {
+    for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
+      for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+	os << "/**\n"
+	   << " * \\fn " << fun->name() << "(const XprVector<E, Sz>& lhs, " << tp->name() << " rhs)\n"
+	   << " * \\brief " << fun->description() << " function between XprVector and " << tp->description() << ".\n"
+	   << " * \\ingroup " << fun->group() << "\n"
+	   << " */\n\n";
+
+// 	os << "/**\n"
+// 	   << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const XprVector<E, Sz>& rhs)\n"
+// 	   << " * \\brief " << fun->description() << " function between " << tp->description() << " and XprVector.\n"
+// 	   << " * \\ingroup " << fun->group() << "\n"
+// 	   << " */\n\n";
+
+	os << "/**\n"
+	   << " * \\fn " << fun->name() << "(const XprMatrix<E, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
+	   << " * \\brief " << fun->description() << " function between XprMatrix and " << tp->description() << ".\n"
+	   << " * \\ingroup " << fun->group() << "\n"
+	   << " */\n\n";
+
+// 	os << "/**\n"
+// 	   << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
+// 	   << " * \\brief " << fun->description() << " function between " << tp->description() << " and XprMatrix.\n"
+// 	   << " * \\ingroup " << fun->group() << "\n"
+// 	   << " */\n\n";
+      }
+    }
+    return os;
+  }
+
+  // unary functions
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    FunctionBase::unary(os);
+
+    for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const XprVector<E, Sz>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function for XprVector\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const XprMatrix<E, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function for XprMatrix.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+};
+
+
+
+
+class VectorFunctions : public FunctionBase
+{
+public:
+  VectorFunctions() { }
+
+public:
+  template<class Stream>
+  Stream& operator()(Stream& os) const {
+    header(os);
+
+    binary(os);
+    binary2(os);
+    binary3(os);
+    unary(os);
+
+    footer(os);
+
+    return os;
+  }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    FunctionBase::header(os);
+
+    os << "//\n"
+       << "// VectorFunctions.h\n"
+       << "//\n\n";
+    return os;
+  }
+
+  // binary functions
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    FunctionBase::binary(os);
+
+    for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function for two Vector.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // binary functions with pod and std::complex<>
+  template<class Stream>
+  Stream& binary2(Stream& os) const {
+    for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
+      for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+	os << "/**\n"
+	   << " * \\fn " << fun->name() << "(const Vector<T, Sz>& lhs, " << tp->name() << " rhs)\n"
+	   << " * \\brief " << fun->description() << " function on Vector and " << tp->description() << ".\n"
+	   << " * \\ingroup " << fun->group() << "\n"
+	   << " */\n\n";
+
+// 	os << "/**\n"
+// 	   << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const Vector<T, Sz>& rhs)\n"
+// 	   << " * \\brief " << fun->description() << " function on " << tp->description() << " and Vector.\n"
+// 	   << " * \\ingroup " << fun->group() << "\n"
+// 	   << " */\n\n";
+      }
+    }
+    return os;
+  }
+
+  // binary functions with expressions
+  template<class Stream>
+  Stream& binary3(Stream& os) const {
+    for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function on XprVector and Vector.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function on Vector and XprVector.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // unary functions
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    FunctionBase::unary(os);
+
+    for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const Vector<T, Sz>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function on Vector.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+};
+
+
+
+
+class MatrixFunctions : public FunctionBase
+{
+public:
+  MatrixFunctions() { }
+
+public:
+  template<class Stream>
+  Stream& operator()(Stream& os) const {
+    header(os);
+
+    binary(os);
+    binary2(os);
+    binary3(os);
+    unary(os);
+
+    footer(os);
+
+    return os;
+  }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    FunctionBase::header(os);
+
+    os << "//\n"
+       << "// MatrixFunctions.h\n"
+       << "//\n\n";
+    return os;
+  }
+
+  // binary functions
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    FunctionBase::binary(os);
+
+    for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const Matrix<T1, Rows, Cols>& lhs, const Matrix<T2, Cols, Cols>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function for two Matrizes.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // binary functions with pod and std::complex<>
+  template<class Stream>
+  Stream& binary2(Stream& os) const {
+    for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
+      for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+	os << "/**\n"
+	   << " * \\fn " << fun->name() << "(const Matrix<T, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
+	   << " * \\brief " << fun->description() << " function on Matrix and " << tp->description() << ".\n"
+	   << " * \\ingroup " << fun->group() << "\n"
+	   << " */\n\n";
+
+// 	os << "/**\n"
+// 	   << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const Matrix<T, Rows, Cols>& rhs)\n"
+// 	   << " * \\brief " << fun->description() << " function on " << tp->description() << " and Matrix.\n"
+// 	   << " * \\ingroup " << fun->group() << "\n"
+// 	   << " */\n\n";
+      }
+    }
+    return os;
+  }
+
+  // binary functions with expressions
+  template<class Stream>
+  Stream& binary3(Stream& os) const {
+    for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function on XprMatrix and Matrix.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function on Matrix and XprMatrix.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // unary functions
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    FunctionBase::unary(os);
+
+    for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) {
+      os << "/**\n"
+	 << " * \\fn " << fun->name() << "(const Matrix<T, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << fun->description() << " function on Matrix.\n"
+	 << " * \\ingroup " << fun->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+};
+
+
+
+int main()
+{
+  XprFunctions xpr_fun;
+  VectorFunctions vec_fun;
+  MatrixFunctions mtx_fun;
+
+  Function::doxy_groups(std::cout);
+
+  xpr_fun(std::cout);
+  vec_fun(std::cout);
+  mtx_fun(std::cout);
+}
diff --git a/tvmet-1.7.1/doc/dox_operators.cc b/tvmet-1.7.1/doc/dox_operators.cc
new file mode 100644
index 0000000..7c4da40
--- /dev/null
+++ b/tvmet-1.7.1/doc/dox_operators.cc
@@ -0,0 +1,425 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: dox_operators.cc,v 1.6 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#include <iostream>
+#include <vector>
+#include <string>
+
+#include <tvmet/config.h>
+
+#include "Util.h"
+
+class OperatorBase
+{
+public:
+  OperatorBase() {
+    m_binary_operators.push_back( BinaryOperator("+", "Addition") );
+    m_binary_operators.push_back( BinaryOperator("-", "Subtraction") );
+    m_binary_operators.push_back( BinaryOperator("*", "Multliply") );
+    m_binary_operators.push_back( BinaryOperator("/", "Division") );
+    m_binary_operators.push_back( BinaryOperator("%", "Modulo", true) );
+    m_binary_operators.push_back( BinaryOperator("^", "Exclusive OR", true) );
+    m_binary_operators.push_back( BinaryOperator("&", "AND", true) );
+    m_binary_operators.push_back( BinaryOperator("|", "OR", true) );
+    m_binary_operators.push_back( BinaryOperator("<<", "Left Shift", true) );
+    m_binary_operators.push_back( BinaryOperator(">>", "Right Shift", true) );
+    m_binary_operators.push_back( BinaryOperator(">", "Bigger") );
+    m_binary_operators.push_back( BinaryOperator("<", "Lesser") );
+    m_binary_operators.push_back( BinaryOperator(">=", "Bigger Equal") );
+    m_binary_operators.push_back( BinaryOperator("<=", "Less Equal") );
+    m_binary_operators.push_back( BinaryOperator("==", "Equal") );
+    m_binary_operators.push_back( BinaryOperator("!=", "Not Equal") );
+    m_binary_operators.push_back( BinaryOperator("&&", "Logical AND", true) );
+    m_binary_operators.push_back( BinaryOperator("||", "Logical OR", true) );
+
+    m_unary_operators.push_back( UnaryOperator("!", "Logical Not", true) );
+    m_unary_operators.push_back( UnaryOperator("~", "Bitwise Not", true) );
+    m_unary_operators.push_back( UnaryOperator("-", "Negate") );
+  }
+
+  virtual ~OperatorBase() { }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    m_type.header(os);
+    return os;
+  }
+
+  template<class Stream>
+  Stream& footer(Stream& os) const {
+    m_type.footer(os);
+    return os;
+  }
+
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    return os;
+  }
+
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    return os;
+  }
+
+public:
+  typedef std::vector< BinaryOperator >::const_iterator	bop_iterator;
+  typedef std::vector< UnaryOperator >::const_iterator	uop_iterator;
+
+public:
+  virtual const std::vector< BinaryOperator >& bop() const { return m_binary_operators; }
+  virtual const std::vector< UnaryOperator >& uop() const { return m_unary_operators; }
+
+protected:
+  std::vector< BinaryOperator >		m_binary_operators;
+  std::vector< UnaryOperator >		m_unary_operators;
+  Type					m_type;
+};
+
+
+class XprOperators : public OperatorBase
+{
+public:
+  XprOperators() { }
+
+public:
+  template<class Stream>
+  Stream& operator()(Stream& os) const {
+    header(os);
+
+    binary(os);
+    binary2(os);
+    unary(os);
+
+    footer(os);
+    return os;
+  }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    OperatorBase::header(os);
+
+    os << "//\n"
+       << "// XprOperators.h\n"
+       << "//\n\n";
+    return os;
+  }
+
+  // global binary math, bitops and logical operators
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    OperatorBase::binary(os);
+
+    for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for two XprVector\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for two XprMatrix.\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // global binary math, bitops and logical operators with pod and std::complex<>
+  template<class Stream>
+  Stream& binary2(Stream& os) const {
+    for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
+      for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+	if(tp->is_int() && op->int_only()) {
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(const XprVector<E, Sz>& lhs, " << tp->name() << " rhs)\n"
+	     << " * \\brief " << op->description() << " operator between XprVector and " << tp->description() << ".\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const XprVector<E, Sz>& rhs)\n"
+	     << " * \\brief " << op->description() << " operator between " << tp->description() << " and XprVector.\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(const XprMatrix<E, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
+	     << " * \\brief " << op->description() << " operator between XprMatrix and " << tp->description() << ".\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
+	     << " * \\brief " << op->description() << " operator between " << tp->description() << " and XprMatrix.\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+	}
+      }
+    }
+    return os;
+  }
+
+  // global unary operators
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    OperatorBase::unary(os);
+
+    for(uop_iterator op = uop().begin(); op != uop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const XprVector<E, Sz>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for XprVector\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const XprMatrix<E, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for XprMatrix.\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+};
+
+
+class VectorOperators : public OperatorBase
+{
+public:
+  VectorOperators() { }
+
+public:
+  template<class Stream>
+  Stream& operator()(Stream& os) const {
+    header(os);
+
+    binary(os);
+    binary2(os);
+    binary3(os);
+    unary(os);
+
+    footer(os);
+  }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    OperatorBase::header(os);
+
+    os << "//\n"
+       << "// VectorOperators.h\n"
+       << "//\n\n";
+    return os;
+  }
+
+  // global binary math, bitops and logical operators
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    OperatorBase::binary(os);
+
+    for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for two Vector\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // global binary math, bitops and logical operators with pod and std::complex<>
+  template<class Stream>
+  Stream& binary2(Stream& os) const {
+    for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
+      for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+	if(tp->is_int() && op->int_only()) {
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(const Vector<T, Sz>& lhs, " << tp->name() << " rhs)\n"
+	     << " * \\brief " << op->description() << " operator between Vector and " << tp->description() << ".\n"
+	     << " * \\ingroup _operators\n"
+	     << " * \\ingroup " << op->group() << "\n";
+
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const Vector<T, Sz>& rhs)\n"
+	     << " * \\brief " << op->description() << " operator between " << tp->description() << " and Vector.\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+	}
+      }
+    }
+    return os;
+  }
+
+  // global binary operations with expressions
+  template<class Stream>
+  Stream& binary3(Stream& os) const {
+    for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator between XprVector and Vector\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator between Vector and XprVector\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // global unary operators
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    OperatorBase::unary(os);
+
+    for(uop_iterator op = uop().begin(); op != uop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const Vector<T, Sz>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for Vector\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+};
+
+
+
+class MatrixOperators : public OperatorBase
+{
+public:
+  MatrixOperators() { }
+
+public:
+  template<class Stream>
+  Stream& operator()(Stream& os) const {
+    header(os);
+
+    binary(os);
+    binary2(os);
+    binary3(os);
+    unary(os);
+
+    footer(os);
+  }
+
+public:
+  template<class Stream>
+  Stream& header(Stream& os) const {
+    OperatorBase::header(os);
+
+    os << "//\n"
+       << "// MatrixOperators.h\n"
+       << "//\n\n";
+    return os;
+  }
+
+  // global binary math, bitops and logical operators
+  template<class Stream>
+  Stream& binary(Stream& os) const {
+    OperatorBase::binary(os);
+
+    for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for two Matrizes\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // global binary math, bitops and logical operators with pod and std::complex<>
+  template<class Stream>
+  Stream& binary2(Stream& os) const {
+    for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) {
+      for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+	if(tp->is_int() && op->int_only()) {
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(const Matrix<T, Rows, Cols>& lhs, " << tp->name() << " rhs)\n"
+	     << " * \\brief " << op->description() << " operator between Vector and " << tp->description() << ".\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+
+	  os << "/**\n"
+	     << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const Matrix<T, Rows, Cols>& rhs)\n"
+	     << " * \\brief " << op->description() << " operator between " << tp->description() << " and Vector.\n"
+	     << " * \\ingroup " << op->group() << "\n"
+	     << " */\n\n";
+	}
+      }
+    }
+    return os;
+  }
+
+  // global binary operations with expressions
+  template<class Stream>
+  Stream& binary3(Stream& os) const {
+    for(bop_iterator op = bop().begin(); op != bop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator between XprMatrix and Matrix\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator between Matrix and XprMatrix\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+
+  // global unary operators
+  template<class Stream>
+  Stream& unary(Stream& os) const {
+    OperatorBase::unary(os);
+
+    for(uop_iterator op = uop().begin(); op != uop().end(); ++op) {
+      os << "/**\n"
+	 << " * \\fn operator" << op->symbol() << "(const Matrix<T, Rows, Cols>& rhs)\n"
+	 << " * \\brief " << op->description() << " operator for Matrix\n"
+	 << " * \\ingroup " << op->group() << "\n"
+	 << " */\n\n";
+    }
+    return os;
+  }
+};
+
+int main()
+{
+  XprOperators xpr_op;
+  VectorOperators vec_op;
+  MatrixOperators mtx_op;
+
+  Operator::doxy_groups(std::cout);
+
+  xpr_op(std::cout);
+  //vec_op(std::cout);
+  //mtx_op(std::cout);
+}
diff --git a/tvmet-1.7.1/doc/faq.dox b/tvmet-1.7.1/doc/faq.dox
new file mode 100644
index 0000000..78c59e2
--- /dev/null
+++ b/tvmet-1.7.1/doc/faq.dox
@@ -0,0 +1,295 @@
+/**
+   \page faq FAQ
+
+   <p>Contents:</p>
+   -# \ref license_tvmet
+   -# \ref commercial_tvmet
+   -# \ref debug
+   -# \ref optimize
+   -# \ref ambiguous_overload
+   -# \ref conversion_non_scalar
+   -# \ref could_not_convert
+   -# \ref assign_op
+   -# \ref comma_initializer
+   -# \ref no_match_operator
+   -# \ref dimension_error
+   -# \ref rtlx_kernel_crash
+   -# \ref regressiontest_failed
+
+   Certain items on this page are also covered by the \ref usage and \ref notes
+   pages!
+
+
+
+   \section license_tvmet How is tvmet licensed?
+
+   tvmet comes with completely free source code. tvmet is available under the
+   terms of the GNU Lesser General Public License (LGPL).
+
+   I have amended the LGPL to explicitly allow statically linking tvmet (or any
+   modified version of tvmet) to your software.  The LGPL is not clear on this
+   and I definitely want to allow it.
+
+   \sa \ref license
+
+
+
+
+   \section commercial_tvmet Can I use it in commercial software products?
+
+   Yes, you can. The LGPL allows you to do this, and you do not need to release
+   the source code to your software. You do need to release the source code for
+   any modifications you make to tvmet itself. (We would hope you would send
+   any improvements like these back to us anyways.)
+
+
+
+
+   \section debug Debugging the code
+
+   Not all faults can be caught at compile time.  Therefore, there is a need
+   for runtime debugging by defining <code>TVMET_DEBUG</code> (e.g. index
+   operators of <code>Vector::operator(i)</code> and
+   <code>Matrix::operator(i,j)</code>). On defined TVMET_DEBUG a bounds checking
+   is involved. Runtime errors are handled throwing an assertion failure using
+   std::assert(). <code>TVMET_DEBUG</code> is <b>not</b> enabled by defining
+   <code>DEBUG</code>. This behavior differs from release less than 0.6.0
+
+   If you don't get the expected result on certain operations you can try the
+   \ref expr_print feature to check that the expression is being evaluated as
+   you expect.
+
+
+
+
+
+   \section optimize Optimizing the code
+
+   Starting after tvmet 1.5.0 there is a new define <code>TVMET_OPTIMIZE</code>.
+
+   If this is defined tvmet uses some compiler specific keywords.
+   Mainly, this declares the functions using gcc's
+   <tt>__attribute__((always_inline))</tt>. This allows the
+   compiler to produce high efficient code even on less
+   optimization levels, like gcc's -O2 or even -O!
+   This is known to work with gcc v3.3.3 (and higher).
+   Using icc's v8 gnuc compatibility mode this may work, I've read
+   that it's using as an hint, this means you can have static inline
+   functions inside left so you can't get the full power of this feature
+   for circumstances.
+
+
+
+
+   \section ambiguous_overload ambiguous overload for ... Compiler Error
+
+   When using gcc-2.96 you can get a compiler error like:
+
+   \code
+   ambiguous overload for ...
+   /usr/include/g++-3/stl_relops.h:42: candidates are: bool operator>
+   ...
+   \endcode
+
+   I haven't any solution for this--even if I don't use it in the tvmet library.
+   A simple define __SGI_STL_INTERNAL_RELOPS in the config header doesn't solve
+   the problem. The easiest way (brute force method) is to comment out all
+   operators in stl_reops.h.  (The better way is to use the gcc-3.0.x and later,
+   see \ref compiler.)
+
+
+
+
+
+  \section conversion_non_scalar conversion from ... to non-scalar type ... Compiler Error
+
+   You get a compiler error like:
+
+   \code
+   conversion from `tvmet::XprVector< ... >, Sz>' to non-scalar type
+   	`tvmet::Vector<T, Sz>' requested
+   \endcode
+
+   Please read about \ref construct.  You probably ignored or forgot the rules
+   of using expression templates.
+
+
+
+
+
+   \section could_not_convert could not convert `tvmet::operatorXX(...)' to `bool' ... Compiler Error
+
+   You get a compiler error like:
+
+   \code
+   could not convert `tvmet::operator==( ... , ... )' to `bool'
+   \endcode
+
+   In the example above, you did try (or hoped) to use a global operator==
+   which doesn't return a bool.  Please read \ref compare.
+
+
+
+
+   \section assign_op no match for ?= operator
+
+   You get a compiler error like:
+
+   \code
+   no match for `tvmet::Vector<...>& /= tvmet::Vector<...>&' operator
+   \endcode
+
+   For element-wise operations, you need to use the element_wise namespace
+   (found within tvmet). As the name suggests, all these operators are
+   performed in an element wise fashion.  (e.g. division of two vectors--not
+   allowed from a mathematical perspective--element by element.)  The following
+   code snippet shows how to use it:
+
+   \code
+   using namespace tvmet;
+   Vector<double,3> v1, v2;
+
+   v1 = 1,2,3;
+   v2 = v1;
+
+   cout << v1 << endl;
+   {
+     using namespace tvmet::element_wise;
+     v1 /= v2;
+   }
+   cout << v1 << endl;
+   \endcode
+
+   \sa \ref operators
+   \sa \ref alias
+
+
+
+
+   \section comma_initializer storage size of `ERROR_CommaInitializerList_is_too_long' isn't known
+
+    You get a compiler error like:
+
+   \code
+   In member function `tvmet::CommaInitializer<Obj, LEN>::Initializer<T, (N + 1)> ....
+   storage size of `ERROR_CommaInitializerList_is_too_long' isn't known
+   \endcode
+
+   You have caused a forced compile time error.  tvmet prevents you from
+   overwriting foreign memory!  In other words, your comma separated initializer
+   list is too long, e.g. you wrote something like:
+
+   \code
+   using namespace tvmet;
+   Vector<double,3>		v0;
+
+   v0 = 1,2,3,4,5,6,7,8,9;
+   \endcode
+
+   You just tried to fill a %Vector of length 3 with 9 values, which would
+   normally result in values being written off the end of the vector.  tvmet
+   prevents this with the compile time error you just saw.
+
+
+
+
+   \section no_match_operator no match for `...' operator
+
+   You get a compiler error like:
+
+   \code
+   no match for `tvmet::Matrix<T, Sz, Sz>& * tvmet::XprVector<tvmet::MatrixColVectorReference<T, Sz, Sz>, Sz>' operator
+   include/tvmet/xpr/VectorOperators.h:123: candidates are:
+   // a lot of candidates....
+   \endcode
+
+   Perhaps you wrote code like:
+
+   \code
+   Matrix<float,3,3>             eigenvecs;
+   Matrix<float,3,3>             M;
+   ...
+
+   Vector<float,3> ev0( M * col(eigenvecs, 0) );
+   \endcode
+
+   Using %tvmet prior to release 1.2.0 in this case: Obviously an operator
+   is missing... but which one?  Well, all arithmetic operators have a
+   functional equivalent, in this case, prod().  Rewriting the code above
+   using the function syntax will give you a more descriptive error message:
+
+   \code
+   no matching function for call to
+   `prod(tvmet::Matrix<float, 3, 3>&, tvmet::XprVector<tvmet::MatrixColVectorReference<float, 3, 3>, 3>)'
+   \endcode
+
+   This says, I forgot to write a function with the appropriate operator.
+   In this case, please give me a hint by writing a short example, used compiler
+   and tvmet release.
+
+   \sa \ref dimension_error.
+
+
+
+
+
+
+   \section dimension_error no match for `tvmet::Matrix<double, R, C>& * tvmet::Vector<double, Sz>&' operator
+
+   You get a compiler error like:
+
+   \code
+   no match for `tvmet::Matrix<double, 4, 4>& * tvmet::Vector<double, 3>&' operator
+   candidates are: T tvmet::operator*(const T&, ...) ...
+   \endcode
+
+   This is a feature of tvmet.  The compiler detects a mathematical problem:
+   You tried call an operator between tvmet objects which had incompatible
+   dimensions.  For example, you attempted to multiply a matrix of dimension
+   4x4 with a vector of size 3 - this isn't mathematically feasible.
+
+
+
+
+
+   \section rtlx_kernel_crash Using with Linux Real-time Extensions crashes in kernel mode
+
+   Normally there should not be a problem on using tvmet inside Linux kernel
+   space as a C++ kernel module.  Unfortunately, code working in normal
+   environment (e.g. Linux user space) crashes the Linux box by using linux
+   real-time extensions, definitely on <a href=http://www.rtai.org>RTAI</a>.
+
+   I haven't found the reason yet, my knowledge of assembler and debugging is
+   too limited.
+
+
+
+
+
+   \section regressiontest_failed Failed regression tests
+
+   Well, this is a strange world.  It can happen that some (especially the
+   tan) regression test can fail.  This is not a problem with the %tvmet library.
+   After some hours I reduce the problem to:
+
+   \code
+   cout << (std::tan(1.0) - std::tan(1.0)) << endl;
+   \endcode
+
+   got <tt>6.17995e-17</tt> on my Linux Mandrake 8.2/9.1 box. It makes no
+   difference if I take the tan function from namespace std or from the global
+   namespace.  This is especially a problem for g++ v3.2 and prior. The Intel
+   compiler v7.0 isn't affected.
+
+   Especially on VC++ 7.1 you will get 2 failed tests for complex
+   %Matrix and %Vector. The error is about <tt>8.88178e-016</tt> and
+   <tt>1.77636e-015</tt>.
+
+*/
+
+
+
+// Local Variables:
+// mode:c++
+// End:
+//  LocalWords:  RTAI
diff --git a/tvmet-1.7.1/doc/footer.html.in b/tvmet-1.7.1/doc/footer.html.in
new file mode 100644
index 0000000..962f834
--- /dev/null
+++ b/tvmet-1.7.1/doc/footer.html.in
@@ -0,0 +1,17 @@
+<hr>
+<table width="100%">
+  <tr>
+    <td width="20%" align="right" valign="center">
+      Author:<br>
+	 <script language="JavaScript">
+	       var m_name="opetzold";
+	       var m_domain="users.sourceforge.net";
+	       var m_text='<a href="mailto:'+m_name+'@'+m_domain+'?subject=tvmet @VERSION@">';
+	       m_text+='Olaf Petzold</a>';
+	       document.write(m_text);
+      </script>
+    </td>
+  </tr>
+</table>
+</body>
+</html>
diff --git a/tvmet-1.7.1/doc/header.html b/tvmet-1.7.1/doc/header.html
new file mode 100644
index 0000000..b71b879
--- /dev/null
+++ b/tvmet-1.7.1/doc/header.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+  <title>
+    Tiny Vector Matrix library using Expression Templates
+  </title>
+  <!-- This Tiny Vector and Matrix C++ template libary uses Meta Templates and
+    Expression Templates to evaluate results at compile time - to make it fast
+    for low order (tiny) systems. -->
+  <META name="description" content="This Tiny Vector and Matrix C++ template
+    libary uses Meta Templates and Expression Templates to evaluate results
+    at compile time - to make it fast for low order (tiny) systems.">
+  <META name="keywords" content="tiny, vector, matrix, fast, C++, STL, template, library,
+    expression templates, meta templates, fixed size, fixed dimension,
+    matrix-matrix, matrix-vector, vector-matrix, binary, unary, operations, operators,
+    product, transpose, linear algebra, cross product, dot product, type promotion,
+    exception, linux, kernel, embedded system, regression test, gcc, g++,
+    blitz, blitz++, TinyVector, TinyMatrix, MTL, TNT,
+    gnu compiler suite, portland group c++, kai c++, intel compiler, LGPL">
+  <link href="tvmet.css" rel="stylesheet" type="text/css">
+</head>
+<body bgcolor="#ffffff">
+<table width="100%">
+  <tr>
+    <td width="20%" align="left" valign="center">
+      <a href="http://sourceforge.net/projects/tvmet">
+      <img src="http://sourceforge.net/sflogo.php?group_id=39733&type=3" width="125" height="37" border="0" alt="SourceForge Logo"></a>
+    </td>
+    <td width="50%" align="center" valign="center">
+      <b><big>T</big>iny <big>V</big>ector <big>M</big>atrix library using <big>E</big>xpression <big>T</big>emplates</b>
+    </td>
+    <td width="20%" align="right" valign="center">
+      <a href="http://tvmet.sourceforge.net">Sourceforge Project Page</a>
+    </td>
+  </tr>
+</table>
+<hr>
diff --git a/tvmet-1.7.1/doc/intro.dox b/tvmet-1.7.1/doc/intro.dox
new file mode 100644
index 0000000..aac830d
--- /dev/null
+++ b/tvmet-1.7.1/doc/intro.dox
@@ -0,0 +1,140 @@
+/*
+ * $Id: intro.dox,v 1.12 2004/11/30 09:05:53 opetzold Exp $
+ */
+
+/**
+   \mainpage
+
+   \section intro_contents Contents
+   - \ref introduction
+   - \ref license
+   - \ref news
+   - \ref changelog
+   - \ref benchmark
+   - \ref build
+   - \ref usage
+   - \ref faq
+   - \ref notes
+   - \ref compiler
+   - \ref works
+   - \ref credits
+   - \ref projects
+   - \ref links
+
+*/
+
+/**
+   \page introduction Introduction
+
+   This Tiny %Vector and %Matrix template library uses
+   <a href=http://extreme.indiana.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html>Meta Templates</a>
+   (MT) and <a href=http://extreme.indiana.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>
+   Expression Templates</a> (ET) to evaluate results at compile time -- which
+   makes it fast for low order (tiny) systems. "Tiny" is a subjective term,
+   but typically means vectors and matrices of size ten (10) or less.
+
+   The technique used internally by tvmet is described by Todd Veldhuizen:
+
+   - <a href=http://osl.iu.edu/~tveldhui/papers/techniques/>
+     Techniques for Scientific C++</a>
+   - <a href=http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>
+     Expression Templates</a>
+   - <a href=http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html>
+     Template Metaprograms</a>
+
+   and is used by his <a href=http://oonumerics.org/blitz/>blitz++</a>, too.
+   Therefore, the speed achieved by tvmet is similar to the speed of blitz++.
+   Unfortunately, blitz++ isn't developed any more (year 2001, 2002)
+   because of other interests being pursued by Todd Veldhuizen (like his Ph.D.).
+   Furthermore, blitz++'s TinyVector is mainly developed for use by the blitz++
+   Array class -- and not for minimalistic/tiny fast math support for which
+   tvmet <b>is</b> designed. Because of this, the operators and functions are
+   incomplete or not supported well. blitz::TinyMatrix supports a few lesser
+   operators and functions (as with blitz::TinyVector). blitz++ doesn't conform
+   to STL (e.g. Container<>::value_type isn't defined), it defines a T_numtype
+   or, for blitz::TinyVector, it does have an iterator begin() - but the end()
+   is missing (blitz::TinyMatrix doesn't have anything).
+
+   These were reasons why I developed tvmet. Still, tvmet is designed to be more
+   than a mere rehashing of blitz++.  The primary design goals are:
+
+   -# mathematical notation and correctness,
+   -# high efficiency for small/tiny vector and matrices,
+   -# functionality and wide range of supported operators and functions, and
+   -# compatibility and portability.
+
+   The dimensions for vectors and matrices are statically bound at compile
+   time using template arguments. The bounded dimensions feature a <b>compile
+   time dimension check</b> to force adherence to proper dimensional sizes
+   between operands (even in the night if you are sleepy).  For example, you
+   can't assign a %Vector or %Matrix with dimension = 3 to a %Vector or %Matrix
+   of dimension = 4; nor can you create an expression using a binary operation
+   between arguments with incompatible dimensions. This is a major difference
+   between tvmet (which features this) and blitz++ (which does not prevent
+   from this). Nevertheless, tvmet isn't a matlab, maple or octave for C++.
+
+   tvmet is a general purpose library and is not (yet) a linear algebra library.
+   It does not have an interface to other numerical libraries as BLAS or LAPACK.
+   <a href="http://sourceforge.net/projects/tvmet">Tiny Vector Matrix template
+   library</a> offers these features:
+
+   -# Matrices and Vectors with fixed sizes (of course), the data is stored in
+      a static array.
+   -# compile time dimension check for Vectors and Matrices to preserve the
+      mathematical meaning.
+   -# vector, matrix, matrix-matrix and matrix-vector fast operations:
+      - complete set of standard arithmetic operations for Vectors and Matrices
+        (<a href=http://oonumerics.org/blitz/>blitz++</a> supports this only for
+        TinyVector).
+      - complete set of standard compare operations for Vectors and Matrices
+        as well as ternary functions like <tt>a ? b : c</tt>  (see eval for use).
+      - binary and unary operations.
+      - meta template use for %Matrix-Matrix-Product \f$M\,M\f$,
+        %Matrix-Transpose \f$M^T\f$ and %Matrix-Vector-Product \f$M\,x\f$
+        functions and operators.
+      - meta template for special functions like
+        \f$M^T\, x\f$, \f$M^T\,M\f$, \f$M\,M^T\f$ and \f$(M\,M)^T\f$
+        functions, see \ref spec_meta_func.
+      - simple %Matrix rows and column access as a %Vector.
+      - chaining of matrix and vector expressions is possible and working.
+      - %Vector inner and outer product (dot and cross product).
+   -# special handling for the aliasing problem - see \ref alias.
+   -# STL iterator interface.  This opens the door to all sorts of great STL
+      applications.
+   -# type promotion (for handling Matrices and Vectors of differing types).
+   -# works on self defined types such as the std::complex<> type.
+   -# makes no use of exceptions. Therefore you can use it for embedded systems
+      or in Linux kernel space.
+   -# nice expression level printing for debugging purposes (print the expanded
+      expression tree).
+   -# good documentation with examples.
+   -# regression tests for nearly all operations and functions.
+   -# support for several compilers (see \ref compiler).
+   -# written as a pure class and template library, no binary libraries and
+      versioning are needed - designed to avoid code blot due to the use of
+      templates.
+   -# ISO/IEC 14882:1998 compliant.
+
+   Although there are many advantages and features, tvmet has some limitations.
+   Due to the expression template and meta template programming, the compilation
+   time increases for higher dimensional constructs.  This can cause resource
+   limitations, especially for memory (during compilation). On the other hand,
+   the runtime performance will also decrease on higher order. Therefore only
+   use tvmet only tiny (typically less than 10) sizes. (The maximum useful
+   size/dimension depends on the operation, of course.) The \ref benchmark
+   gives a good entry point about these problem.
+   <a href=http://www.oonumerics.org/oon/#libraries>Other</a>
+   general purpose libraries and linear algebra libraries will do a better job
+   for larger matrix/vector problems.
+
+
+*/
+
+/**
+   \bugs regression test TestUnFunc::Arc and TestUnFunc::Log fails due to
+   precision errors.
+ */
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/license.dox b/tvmet-1.7.1/doc/license.dox
new file mode 100644
index 0000000..ae03f4a
--- /dev/null
+++ b/tvmet-1.7.1/doc/license.dox
@@ -0,0 +1,677 @@
+/*
+ * $Id: license.dox,v 1.7 2004/06/08 12:11:15 opetzold Exp $
+ */
+
+/**
+   \page license License
+
+   <p>Contents:</p>
+   - \ref tvmet_license
+   - \ref addendum
+   - \ref rationale
+
+
+
+   \section license tvmet's License
+
+   Copyright (C) 2001-2003 Olaf Petzold.
+
+   tvmet basically follows the standard GNU Lesser General Public License (LGPL).
+   Because of repeated questions on this topic, it has become apparent that many
+   people still had a number of uncertainties about licensing issues. Also, a
+   number of stipulations in the GNU Lesser Public License statement have
+   evidently been an impediment to truely wide-spread adoption of the tvmet
+   Library.
+
+   Thus, the intent of the License Addendum has been to provide clarification
+   of a number of obscure issues in the GNU Lesser General Public License, and
+   to relax a few of its stipulations with an eye to solving a couple of
+   practical issues.
+
+   Below follows the GNU Lesser Public License, followed by the tvmet Library
+   License  addendum.
+
+   Finally, detailed rationale behind the License Addendum is presented.
+
+
+
+
+   \section tvmet_license The License
+<pre>
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Section 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Section 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    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
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+</pre>
+
+
+
+
+
+
+   \section addendum Addendum to License
+
+<pre>
+
+                           ADDENDUM TO LICENSE
+                              February 2003
+
+                Copyright (C) 2003 Olaf Petzold
+
+        Everyone is permitted to create and distribute verbatim copies
+     of this license addendum document, but changing it is not allowed.
+
+
+tvmet License Agreement:
+
+
+0. tvmet ("The Library") is licensed under GNU Lesser General Public License
+   as published by the Free Software Foundation, version 2.1 of the License, or
+   (at your option) any later version, with the following additional conditions.
+   The following conditions take precedence over any conditions or restrictions
+   stipulated by the Lesser General Public License insofar as a conflict exists.
+
+1. The tvmet License Agreement ("License") covers only tvmet ("The Library").
+   Other libraries which the Library may use are covered by their own respective
+   licenses.
+
+2. Modification of the configure scripts, makefiles, or installation tools of
+   the Library to support a specific platform does not constitute creating a
+   modified or derivative work based on the Library.
+
+3. Statically linking of a copy of the Library against any work using the
+   Library, i.e. the inclusion of (parts of) the Library into a program or
+   binary, is functionally equivalent to a work using the Library by linking to
+   it dynamically, and therefore does not constitute creating a modified or
+   derivative work based on the Library.
+
+4. Otherwise, if the work is a derivative of the Library, you may distribute
+   the object code for the work under the terms of the GNU Lesser General Public
+   License.  Any executables containing that work also may be distributed under
+   the Lesser General Public License whether or not they are linked directly
+   with the Library itself.
+
+5. Programs or binaries linked with the Library must be identified as such by
+   including, in the Documentation or by other means (for example in the About
+   Box or Online Help), the following statement:
+
+   "This software uses tvmet (http://tvmet.sourceforge.net)."
+
+
+
+
+                             END OF ADDENDUM
+</pre>
+
+
+
+
+
+
+\section rationale Rationale
+
+We now launch into a point by point discussion of the License Addendum:
+
+<ul>
+<li>
+Point 0 says that whereever LGPL and tvmet License Addendum disagree, the tvmet
+License Addendum holds. In points not covered in the tvmet License Addendum,
+LGPL shall hold.
+</li>
+<li>
+Point 1 says we can not make any statements about anyone else's code; if your
+application must use other libraries (jpeg, png, tiff, glibc, and so on), then
+you must observe the licenses of these other libraries.
+</li>
+<li>
+Point 2 clarifies that when we're talking about derived works, we're not talking
+about making some minor changes to Makefiles or configuration scripts. However,
+it would still be nice to communicate them with the tvmet community so as to be
+able to support new platforms.
+</li>
+<li>
+Point 3 addresses the practical problem of linking tvmet statically into an
+application program or combined work. LGPL insists that the recipient of a
+distribution of a combined work i.e. a program linked with the Library, be
+allowed to relink; linking a program dynamically is usually the easiest way to
+comply with this stipulation. However, there are sometimes practical or
+logistical problems which make it difficult to comply with this requirement. We
+have taken the position that static linking is functionally equivalent to
+linking dynamically, and we're not really denying the recipient of a statically
+linked program any source code he or she wouldn't be able to obtain otherwise.
+</li>
+<li>
+Point 4 says that if you make a work based on the Library, then you may
+distribute this under the Lesser General Public License:- in other words, point
+4 applies only to a work using the Library being linked (statically or
+dynamically) to the Library. It is in the spirit of LGPL that the recipient of
+the combined work not be denied anything he or she would be able to receive with
+the regular LGPL. However, statically linking an application program with a work
+based on the Library, i.e. a modified copy would do just that! Point 5 says that
+the regular Lesser General Public License applies in that case.
+</li>
+<li>
+Point 5 requires you to identify your program as using the tvmet library. With
+static linking, there would be no way for a normal user to tell otherwise. We
+request that you include the given statement, and preferably a version number
+also. The motivation is two-fold:
+
+  -# A certain amount of publicity for tvmet :-)
+  -# Some way for recipients of your program to know that (a) your program is
+  linked to the tvmet Library, and (b) for them to verify that they have in fact
+  not been denied anything they would have been able to obtain under LGPL, by
+  visiting this page which details the license information (there are many GPL-
+  vigilantes out there, and this might appease them).
+
+</li>
+</ul>
+
+This concludes our remarks on the License revision; please feel free to contact
+me if you have additional questions. The rationale section will likely be
+expanded when there are still questions left unanswered.
+
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/links.dox b/tvmet-1.7.1/doc/links.dox
new file mode 100644
index 0000000..8d6a708
--- /dev/null
+++ b/tvmet-1.7.1/doc/links.dox
@@ -0,0 +1,41 @@
+/*
+ * $Id: links.dox,v 1.3 2003/12/05 19:08:59 opetzold Exp $
+ */
+
+/**
+   \page links Links of Interest or Related Links
+
+
+
+   \section generell General Information on Numeric C++
+   - <a href=http://osl.iu.edu/~tveldhui/papers/techniques/>Techniques for Scientific C++</a>
+   - <a href=http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>Expression Templates</a>
+   - <a href=http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html>Template Metaprograms</a>
+   - <a href=http://oonumerics.org/oon/>The Object-Oriented Numerics Page</a> - a very good entry point
+   - <a href=http://www.openscience.org/links.php?section=103>The OpenScience Project > Mathematics > Linear Algebra</a>
+   - <a href=http://sal.kachinatech.com/B/0/>SAL- Numerical Analysis - Miscellaneous Software</a>
+
+   \section numlibs Other ET and MT Vector and Matrix Libraries
+
+   - <a href=http://oonumerics.org/blitz/>blitz++</a>
+   - <a href=http://www.genesys-e.org/ublas/>uBlas</a>
+   - <a href=http://www.lsc.nd.edu/research/mtl>MTL</a>
+   - <a href=http://sourceforge.net/projects/etsmo/>ETSMO</a>  - no files released since over one year
+   - <a href=http://met.sourceforge.net/>MET</a>
+   - <a href=http://sourceforge.net/projects/metaet/>meta::Expr{T_emplate}</a>
+   - <a href=http://www.acl.lanl.gov/pete/>PETE</a>
+   - <a href=http://www.acl.lanl.gov/pooma/>POOMA</a>
+   - <a href=http://math.nist.gov/tnt/>TNT</a> - Template Numerical Toolkit
+
+   This list isn't complete. For more freely available libraries please have
+   a look <a href=http://www.oonumerics.org/oon/#libraries>here</a>.
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/matrix_matrix.png b/tvmet-1.7.1/doc/matrix_matrix.png
new file mode 100644
index 0000000..737a91a
--- /dev/null
+++ b/tvmet-1.7.1/doc/matrix_matrix.png
Binary files differ
diff --git a/tvmet-1.7.1/doc/matrix_vector.png b/tvmet-1.7.1/doc/matrix_vector.png
new file mode 100644
index 0000000..08aa473
--- /dev/null
+++ b/tvmet-1.7.1/doc/matrix_vector.png
Binary files differ
diff --git a/tvmet-1.7.1/doc/misc.dox b/tvmet-1.7.1/doc/misc.dox
new file mode 100644
index 0000000..b4a1fec
--- /dev/null
+++ b/tvmet-1.7.1/doc/misc.dox
@@ -0,0 +1,8 @@
+/*
+ * $Id: misc.dox,v 1.1.1.1 2003/02/08 19:32:50 opetzold Exp $
+ */
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/notes.dox b/tvmet-1.7.1/doc/notes.dox
new file mode 100644
index 0000000..2b07ed4
--- /dev/null
+++ b/tvmet-1.7.1/doc/notes.dox
@@ -0,0 +1,325 @@
+/*
+ * $Id: notes.dox,v 1.20 2004/04/11 01:29:41 opetzold Exp $
+ */
+
+/**
+   \page notes Some Notes ...
+
+   <p>Contents:</p>
+   -# \ref optimizing
+   -# \ref temporaries
+   -# \ref operators
+   -# \ref threads
+   -# \ref expressions
+   -# \ref adl
+   -# \ref alias
+   -# \ref spec_meta_func
+   -# \ref mmv
+
+
+
+
+   \section optimizing ... on optimizing
+
+   This depends heavily on compiler and the flags used. The code produced with
+   -O could be better than with -O2 even on gcc-2.9x suite. To get the best
+   results, you should examine the assembler code generated by your compiler.
+   Maybe I will write a benchmark suite for different compiler options one day.
+   (Maybe you could contribute?)
+
+
+
+
+
+
+   \section temporaries ... on temporaries
+
+   The use of expression templates (ET) and meta templates (MT) allows the
+   generated code to avoid the creation of many temporaries -- especially with
+   standard mathematical and assignment operations. There are times that you
+   have to use actual temporaries e.g. when swapping variables of type
+   double -- with integer values you can use the XOR operator.
+
+   Some implementations are using a loop with temporaries even if there is a
+   solution with ET. Than the loops are faster than MT.
+
+   \sa \ref mmv
+
+
+
+
+
+   \section operators ... on operators and namespace element_wise
+
+   Some operations on matrices and vectors are not available at first glance.
+   These are defined in the namespace <code>element_wise</code> because they
+   are element wise (and not strictly mathematical) operations.
+
+   But there is more: some functions do element wise operations per se (e.g.
+   vector addition) and are NOT inside namespace element_wise. Furthermore,
+   all comparison operators perform element wise operations.
+
+   \sa \ref compare
+
+
+
+
+
+   \section threads ... about Threads
+
+   This library is not thread safe. It's designed for small math operations where
+   the overhead for locking policies is too great.  If you require locking for
+   a multi-threaded application, you will need to write a wrapper.
+
+
+
+
+
+   \section expressions ... on expressions
+
+   The first versions of %tvmet had only one expression (Xpr) which was shared
+   for both vectors and matrices.  This was working fine, but limited tvmet's
+   use for arithmetic expressions expressions on complex values. For this
+   reason, I had to separate expression types for vectors and matrices. The
+   same problem appeared when using the eval() function for evaluating these
+   expressions. (Which index operator should handle it?) Unfortunately, the
+   use of separate expression types vastly increases the number of operators
+   and functions needed to make the library viable. Fortunately, most boundary
+   checks are not necessary since they are done at compile time (such as those
+   needed by the assignment operator, etc).
+
+
+
+
+
+   \section adl ... on namespaces and Koenig Lookup
+
+   IMO, the cleanest way would be to put all functions into their own
+   namespace <code>Functional</code> instead of naming them with the
+   <code>fncl_</code> prefix they currently have. (I did beforehand, and
+   have thought better since).  Unfortunately, this technique doesn't work well.
+   I got compiler errors like:
+
+   \code
+   template <class T> Functional::xyt<T>' is not a function
+   conflict with `template <class E> xyz(Xpr<E>)' in call to `xyz'
+   \endcode
+
+   when trying:
+
+   \code
+   typedef Vector<double, 3> vector3d;
+   vector3d t1(1,2,3);
+   vector3d t2(t1);
+   vector3d r;
+   r = sqrt( t1 * t2 );
+   \endcode
+
+   ADL (argument dependent lookup), aka Koenig Lookup, is causing the
+   compiler to check for a match in namespace Functional, since the
+   template instantiation is part of Functional (the Xpr stuff), it matches
+   before the global namespace (the Vector stuff) is checked. Writing:
+
+   \code
+   r = ::sqrt( t1 * t2 );
+   \endcode
+
+   seems to solve the problem at first glance. However, to force the user of
+   the library into this syntax is painful and could probably run cause other
+   problems with other namespaces (I haven't checked this). Therefore, all
+   "Functionals" have the prefix fncl_.
+
+
+
+
+
+   \section alias ... about aliasing
+
+   tvmet assumes that all matrices and vectors are alias free. These means that
+   source and destination memory layout of matrices and vectors never overlaps
+   (during an operation).
+
+   This is very easy to understood if you see a matrix-vector product. Both
+   contain different data in different (unique, non-overlapping) memory
+   regions -- hence, they are alias free. Contrast this with a matrix-matrix
+   multiply which maybe can have an aliasing, e.g. \f$A = A * B\f$.
+   When source and destination memory regions are the same, the computed results
+   may be wrong. (Probably they will be.) But, \f$C = A * B\f$ is alias free.
+
+   Let's see an example in detail:
+
+   \par Example:
+   \code
+   Matrix<double,3,3>		M1;
+   M1 = 1,2,3,4,5,6,7,8,9;
+
+   cout << "M1 = " << M1 << endl;
+   M1 = trans(M1);
+   cout << "M1 = " << M1 << endl;
+   \endcode
+
+   \par Output:
+   \code
+   M1 = Matrix<d, 3, 3> = [
+     [1, 2, 3],
+     [4, 5, 6],
+     [7, 8, 9]
+   ]
+   M1 = Matrix<d, 3, 3> = [
+     [1, 4, 7],
+     [4, 5, 8],
+     [7, 8, 9]
+   ]
+   \endcode
+
+   As you can see, the lower triangular matrix isn't what you expected due to
+   the aliasing. These results depends on the compiler optimizations, too.
+
+   Unfortunately, to avoid the aliasing problem, you must use temporaries
+   as shown here:
+
+   \par Example:
+   \code
+    matrix_type 				temp_A(A);
+    A = temp_A * B;
+    cout << "matrix_type temp_A(A);\n"
+         << "A = temp_A * B = " << A << endl;
+   \endcode
+
+   Anyway, it seems there is a small exception (no guarantee, since it's
+   compiler dependent I assume) for element wise operations with matrices
+   or vectors on right hand side.
+
+   Starting with tvmet release 1.4.1 there is a new function alias. These
+   function use a proxy to call special member functions of the %Matrix/Vector
+   class. These member functions introduce the temporary for you.
+
+   \par Example:
+   \code
+   typedef tvmet::Matrix<double, 3, 3>		matrix_type;
+   matrix_type					M;
+   std::generate(M.begin(), M.end(),
+                 tvmet::util::Incrementor<matrix_type::value_type>());
+   std::cout << "M = " << M << std::endl;
+
+   alias(M) = trans(M);
+   std::cout << "M = " << M << std::endl;
+   \endcode
+
+   with the expected
+
+   \par Output:
+   \code
+   M = [
+     [1, 4, 7],
+     [2, 5, 8],
+     [3, 6, 9]
+   ]
+   \endcode
+
+   These function/proxy will work for the element wise operators +=, -=, *= and /=
+   with expressions, e.g. as trans() returns.
+
+   \sa \ref assign_op
+
+
+
+
+
+   \section spec_meta_func ... special Meta-Template Functions
+
+   From a principle point of view, there is no need for some special functions
+   for %Matrix and %Vector functions, namely \f$M^T\, x\f$, \f$M^T\,M\f$,
+   \f$M\,M^T\f$, and \f$(M\,M)^T\f$.
+
+   Unfortunately, the g++ compiler throws in the towel sometimes even on
+   transposing matrices. Because of this, %tvmet offers specialized functions
+   which speed up at runtime (about factor 2 ... 3) using meta templates.
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Matrix<double, 6, 3>			M1(0); // will be transposed to be conform to vector size
+   Vector<double, 6> 			v1(0);
+   Vector<double, 3> 			v2(0);
+
+   M1 = ...
+   v1 = ...
+
+   v2 = Mtx_prod(M1, v1);		// equal to: v2 = trans(M1)*v1;
+   \endcode
+
+   BTW, the %Matrix-%Matrix \f$M\,M\f$ and %Matrix-%Vector \f$M\,x\f$
+   products use Meta-Templates, too.
+
+   \sa \ref Mtx_prod
+   \sa \ref MMt_prod
+   \sa \ref MtM_prod
+   \sa \ref trans_prod
+
+
+
+
+
+   \section mmv ... about Matrix-Matrix-Vector and Matrix-Matrix-Matrix-operations
+
+   The problem is related to the optimizer - due to the expression and meta
+   templates used.
+
+   Internally, an expression template may contain other expression templates
+   (meta templates inside as well as) too - the compiler will unroll all of
+   these expression into a single resultant expression (which is a hard job).
+   Sometimes the code generated from this is worse (from a performance point
+   of view) than just using simple temporaries.
+
+   You can chain matrix-matrix and matrix-vector operations without writing
+   temporaries by yourself (if this is what you want).
+
+   \par from examples/hspiess.cc:
+   \code
+   tvmet::Matrix<double,3,2>	B;
+   tvmet::Matrix<double,3,3>	D;
+   tvmet::Matrix<double,2,2>	K;
+
+   B =
+     -0.05,  0,
+      0,     0.05,
+      0.05, -0.05;
+   D =
+      2000, 1000, 0,
+      1000, 2000, 0,
+      0,    0,    500;
+
+   K = trans(B) * D * B;
+   \endcode
+
+   The performance can be sub optimal due to the increasing complexity
+   of operations. This can be reduced by a user specified temporary:
+
+   \par from examples/hspiess.cc:
+   \code
+   // as before
+
+   K = tvmet::Matrix<double,2,3>(trans(B) * D) * B;
+   \endcode
+
+   or
+   \code
+   K = prod(tvmet::Matrix<double,2,3>(prod(trans(B), D)), B);
+   \endcode
+
+   At this moment an intelligent cache and pre-evaluating strategy is
+   missing by %tvmet.
+
+   \sa \ref spec_meta_func
+   \sa some notes \ref temporaries
+
+
+
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/projects.dox b/tvmet-1.7.1/doc/projects.dox
new file mode 100644
index 0000000..2b56afb
--- /dev/null
+++ b/tvmet-1.7.1/doc/projects.dox
@@ -0,0 +1,21 @@
+/*
+ * $Id: projects.dox,v 1.6 2004/04/09 05:48:16 opetzold Exp $
+ */
+
+/**
+   \page projects Projects using tvmet
+
+
+   Please write me  about projects using tvmet - I'm highly interested in !
+
+   -# Not really a project but, an interesting application is
+      <a href=http://www.radiumsoftware.com/files/pathtrace.cxx.1.12.txt>here</a>.
+   -# <a href=http://www.iplt.org>IPLT</a>, an image processing libary
+      and toolbox for the electron microscopy community.
+
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/tvmet.css b/tvmet-1.7.1/doc/tvmet.css
new file mode 100644
index 0000000..f2a42ae
--- /dev/null
+++ b/tvmet-1.7.1/doc/tvmet.css
@@ -0,0 +1,225 @@
+BODY {
+  background: white;
+  color: black;
+  margin-right: 20px;
+  margin-left: 20px;
+}
+
+H1 {
+  text-align: center;
+  font-family: Arial, Helvetica, sans-serif;
+  text-decoration: none;
+  font-weight: bold;
+}
+
+H2 {
+  color: white;
+  font-family: Geneva, Arial, Helvetica, sans-serif;
+  text-decoration: none;
+  font-weight: bold;
+  background-color: black;
+}
+
+H3 {
+ text-decoration: underline;
+}
+
+CAPTION {
+  font-weight: bold
+}
+
+DIV.qindex {
+  width: 100%;
+  background-color: #eeeeff;
+  border: 4px solid #eeeeff;
+  text-align: center;
+  margin-bottom: 2px
+}
+
+A.qindex {
+  text-decoration: none;
+  font-weight: bold;
+  color: #0000ee
+}
+
+A.qindex:visited {
+  text-decoration: none;
+  font-weight: bold;
+  color: #0000ee
+}
+
+A.qindex:hover {
+  text-decoration: none;
+  background-color: #ddddff
+}
+
+A.qindexHL {
+  text-decoration: none;
+  font-weight: bold;
+  background-color: #6666cc;
+  color: #ffffff
+}
+
+A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+A:hover { text-decoration: none; background-color: #f2f2ff }
+
+DL.el { margin-left: -1cm }
+
+DIV.fragment {
+  width: 98%;
+  border: 1px solid #CCCCCC;
+  background-color: #f5f5f5;
+  padding-left: 4px;
+  margin: 4px;
+}
+
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+
+TD.md { background-color: #f2f2ff; font-weight: bold; }
+TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
+
+DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
+
+TD.indexkey {
+  background-color: #eeeeff;
+  font-weight: bold;
+  padding-right  : 10px;
+  padding-top    : 2px;
+  padding-left   : 10px;
+  padding-bottom : 2px;
+  margin-left    : 0px;
+  margin-right   : 0px;
+  margin-top     : 2px;
+  margin-bottom  : 2px
+}
+
+TD.indexvalue {
+  background-color: #eeeeff;
+  font-style: italic;
+  padding-right  : 10px;
+  padding-top    : 2px;
+  padding-left   : 10px;
+  padding-bottom : 2px;
+  margin-left    : 0px;
+  margin-right   : 0px;
+  margin-top     : 2px;
+  margin-bottom  : 2px
+}
+
+TR.memlist { background-color: #f0f0f0;}
+P.formulaDsp { text-align: center; }
+
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+
+.mdTable {
+  border: 1px solid #868686;
+  background-color: #f2f2ff;
+}
+
+.mdRow {
+  padding: 8px 20px;
+}
+
+.mdescLeft {
+  font-size: smaller;
+  font-family: Arial, Helvetica, sans-serif;
+  background-color: #FAFAFA;
+  padding-left: 8px;
+  border-top: 1px none #E0E0E0;
+  border-right: 1px none #E0E0E0;
+  border-bottom: 1px none #E0E0E0;
+  border-left: 1px none #E0E0E0;
+  margin: 0px;
+}
+
+.mdescRight {
+  font-size: smaller;
+  font-family: Arial, Helvetica, sans-serif;
+  font-style: italic;
+  background-color: #FAFAFA;
+  padding-left: 4px;
+  border-top: 1px none #E0E0E0;
+  border-right: 1px none #E0E0E0;
+  border-bottom: 1px none #E0E0E0;
+  border-left: 1px none #E0E0E0;
+  margin: 0px;
+  padding-bottom: 0px;
+  padding-right: 8px;
+}
+
+.memItemLeft {
+  padding: 1px 0px 0px 8px;
+  margin: 4px;
+  border-top-width: 1px;
+  border-right-width: 1px;
+  border-bottom-width: 1px;
+  border-left-width: 1px;
+  border-top-style: solid;
+  border-top-color: #E0E0E0;
+  border-right-color: #E0E0E0;
+  border-bottom-color: #E0E0E0;
+  border-left-color: #E0E0E0;
+  border-right-style: none;
+  border-bottom-style: none;
+  border-left-style: none;
+  background-color: #FAFAFA;
+  font-family: Geneva, Arial, Helvetica, sans-serif;
+  font-size: 12px;
+}
+
+.memItemRight {
+  padding: 1px 0px 0px 8px;
+  margin: 4px;
+  border-top-width: 1px;
+  border-right-width: 1px;
+  border-bottom-width: 1px;
+  border-left-width: 1px;
+  border-top-style: solid;
+  border-top-color: #E0E0E0;
+  border-right-color: #E0E0E0;
+  border-bottom-color: #E0E0E0;
+  border-left-color: #E0E0E0;
+  border-right-style: none;
+  border-bottom-style: none;
+  border-left-style: none;
+  background-color: #FAFAFA;
+  font-family: Geneva, Arial, Helvetica, sans-serif;
+  font-size: 13px;
+}
+
+.search {
+  color: #0000ee;
+  font-weight: bold;
+}
+
+FORM.search {
+  margin-bottom: 0px;
+  margin-top: 0px;
+}
+
+INPUT.search {
+  font-size: 75%;
+  color: #000080;
+  font-weight: normal;
+  background-color: #eeeeff;
+}
+
+TD.tiny {
+  font-size: 75%;
+}
diff --git a/tvmet-1.7.1/doc/tvmet.sty.in b/tvmet-1.7.1/doc/tvmet.sty.in
new file mode 100644
index 0000000..0379e99
--- /dev/null
+++ b/tvmet-1.7.1/doc/tvmet.sty.in
@@ -0,0 +1,111 @@
+%% Version: $Id: tvmet.sty.in,v 1.2 2004/03/27 14:00:33 opetzold Exp $
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\def\@rcs@ $#1Date: #2 #3$$#4Revision: #5$ {
+   \ProvidesPackage{tvmet}[#2 v#5tvmet doxygen latex style]}
+\@rcs@ $Date: 2004/03/27 14:00:33 $$Revision: 1.2 $
+
+\DeclareOption{}{%%%
+  }
+
+%%\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{}}
+\ExecuteOptions{}
+\ProcessOptions
+
+% elementary for pdflatex
+\newif\ifpdf
+  \ifx\pdfoutput\undefined
+  \pdffalse                     % no pdftex
+\else
+  \pdfoutput=1                  % running pdftex
+  \pdftrue
+\fi
+
+% Postscript fonts
+\RequirePackage[scaled=0.92]{helvet}
+\RequirePackage{courier}
+\RequirePackage{typearea}       % from KOMA script
+
+% doxygen need this; it includes the style for formulas too
+\RequirePackage{fancyhdr}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%% tvmet style %%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%
+%% page borders
+%%
+\areaset[2cm]%                  % binding border
+  {16cm}{26cm}                  % text width and height
+
+%%
+%% sans serif is default font
+%%
+\renewcommand{\familydefault}{\sfdefault}
+
+%%
+%% overwrite doxygen's hyperref setup
+%%
+\ifpdf\hypersetup{
+  baseurl={http://tvmet.sourceforge.net},
+  pdftitle={@PACKAGE@ @VERSION@ Reference Manual},
+  pdfauthor={\textcopyright\,Olaf Petzold},
+  pdfsubject={%
+    This Tiny Vector and Matrix C++ template
+    libary uses Meta Templates and Expression Templates to evaluate results
+    at compile time - to make it fast for low order (tiny) systems.
+  },
+  pdfkeywords={%
+    tiny vector matrix fast C++ STL template library
+    expression templates meta templates fixed size fixed dimension
+    matrix-matrix matrix-vector vector-matrix binary unary operations operators
+    product transpose linear algebra cross product dot product type promotion
+    exception linux kernel embedded system regression test gcc g++
+    blitz blitz++ TinyVector TinyMatrix MTL TNT
+    gnu compiler suite portland group c++ kai c++ intel compiler LGPL
+  },
+  %
+  bookmarks={true},
+  bookmarksnumbered={true},
+  bookmarksopen={true},
+  pdfpagelabels={true},
+  pdfmenubar={true},
+  pdftoolbar={true},
+  plainpages={false},
+  pdfstartview={FitH},
+  pdfpagemode={UseOutlines},
+  pdfhighlight={/I}
+}
+\fi
+
+%%
+%% overwrite fancyheadings
+%%
+\makeatletter
+  \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
+    \hbox{}\vspace*{\fill}
+    \thispagestyle{empty}
+    \newpage
+    \if@twocolumn\hbox{}\newpage\fi\fi\fi}
+\makeatother
+\renewcommand{\sectionmark}[1]{%
+  \markright{\thesection.\ #1}}
+\makeatletter
+  \lhead[\textbf{@PACKAGE@  @VERSION@}]{\fancyplain{}{\bfseries\rightmark}}
+  \rhead[\fancyplain{}{\bfseries\leftmark}]{\textbf{@PACKAGE@  @VERSION@}}
+\makeatother
+\chead{}
+\lfoot{}
+\cfoot{\bfseries --\ \thepage\ --}
+\rfoot{}
+\setlength{\headwidth}{0.0cm}
+\setlength{\headwidth}{\textwidth}
+
+\endinput
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-auto-save: nil
+%%% TeX-auto-parse-length: 99999
+%%% ispell-local-dictionary: "american"
+%%% End:
diff --git a/tvmet-1.7.1/doc/usage.dox b/tvmet-1.7.1/doc/usage.dox
new file mode 100644
index 0000000..3b2bd7b
--- /dev/null
+++ b/tvmet-1.7.1/doc/usage.dox
@@ -0,0 +1,407 @@
+/*
+ * $Id: usage.dox,v 1.14 2004/07/03 17:09:23 opetzold Exp $
+ */
+
+/**
+   \page usage Usage
+
+   <p>Contents:</p>
+   -# \ref include
+   -# \ref construct
+   -# \ref c_arrays
+   -# \ref compare
+   -# \ref pod
+   -# \ref stl
+   -# \ref matrix_access
+   -# \ref expr_print
+
+
+
+
+   \section include Include files
+
+   The Tiny %Vector and %Matrix template library has many include files spread
+   throughout the %tvmet include directory. As a user, you need only include
+   <tt><%tvmet/Vector></tt> for vector operations and/or
+   <tt><%tvmet/Matrix></tt> for matrix operations.
+
+   \par Example:
+   \code
+   #include <tvmet/Matrix.h>
+   #include <tvmet/Vector.h>
+
+   using namespace tvmet;
+   \endcode
+
+   Simple, isn't it? Don't forget to use the namespace tvmet, but keep in mind
+   that using the using directive inside headers will pollute the namespace. If
+   you write this in a header file, the namespace for all subsequent header
+   files (those which include the one you're writing) will also be polluted.
+   (This is not a %tvmet specific phenomenon.) Therefore, write the using
+   statement in the C++ file.
+
+
+
+
+
+   \section construct Construction and Initializing
+
+   Due to the nature of
+   <a href=http://extreme.indiana.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>
+   Expression Templates</a> (ET) you can't write code like
+
+   \par Example:
+   \code
+   tvmet::Vector<double, 3> v1(1,2,3);  // OK
+   tvmet::Vector<double, 3> v2 = v1;    // not possible
+   \endcode
+
+   The operator= function assigns an expression to the Vector which means that
+   the object must be constructed before you may assign something to it. The
+   solution is to write this as:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Vector<double, 3> v1(1,2,3);
+   Vector<double, 3> v2;        // construct the Vector<T,Sz> object at first
+   v2 = v1;                     // ... and assign the contents of v1 to v2
+   Vector<double, 3> v3(v1);    // ... or simple use the copy constructor
+
+   std::cout << v3 << std::endl;
+   \endcode
+
+   since the object v2 needs to be constructed before the object's operator=()
+   can be called.
+
+   The same rule applies to the Matrix class. You can only assign vectors and
+   matrices of the same dimension or you will get a compile error. This also
+   applies to the argument list for the constructor of the classes.
+
+   Initializing can be done as shown above or by using a comma separated list:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Matrix<double, 3, 2> m1;     // yes, non-square matrices are possible as well
+   m1 = 1, 4,
+        2, 5,
+        3, 6;
+   \endcode
+
+   Matrix element initialization always performed column wise! If the length
+   of the comma separated list is longer than the storage size, you will get
+   a compile time error. (tvmet is designed to prevent this -- it will prevent
+   you from accidentally overwriting memory which does not belong to the
+   matrix you are initializing.)  You can use a comma separated list to
+   initialize vectors as well.
+
+   If you want a clean (zero-valued) vector or matrix you can simple write:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Vector<double, 3> v4(0);
+   Matrix<double, 3, 4> m2(0);
+   \endcode
+
+   All elements of v4 and m2 are initialized with zero (or whatever value you
+   provide at construction time). Keep in mind that the uninitialized %Matrix
+   and %Vector classes will have random data when the are created (since they
+   use a static array for internal storage) unless you initialize them!
+
+   Another way to initialize a vector or matrix follows:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Vector<double, 3> v5(1,2,3);
+   Vector<double, 3> v6(v5);
+   Vector<double, 3> v7(v5+v6);
+   \endcode
+
+   This is useful for temporary results. The result will be immediately
+   assigned to the new vector elements using the expression passed to the
+   constructor.
+
+   Yet another way of initializing a vector or matrix is similar to the above.
+   We assign an expression to it:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Matrix<double, 3, 3> m3, m4, m5;
+   m3 = 1, 2, 3,
+        4, 5, 6,
+        7, 8, 9;
+   m4 = m3;
+   m5 = m3 + m4;
+   \endcode
+
+   If you have your data inside arrays you can use tvmet's iterator interface
+   to initialize a vector or matrix with it:
+
+   \par Example:
+   \code
+   T data[] = { 1,4,7,
+                2,5,8,
+                3,6,9 };
+
+   std::size_t sz = sizeof(data)/sizeof(T);
+   T* first = data;
+   T* last = data + sz;
+
+   tvmet::Matrix<double, 3, 3>  m(first, last);
+   \endcode
+
+   The data will be copied into the matrix itself. When the constructor has
+   finished, there will be no stored reference to the array pointer.
+
+   Starting with tvmet release 1.6.0 you can create an identity matrix
+   simply by using the function identity(). Note, we have to specify the
+   matrix type, since ADL can't work here.
+
+   \par Example:
+   \code
+   typedef Matrix<double,3,3>		matrix_type;
+   ...
+   matrix_type E( identity<matrix_type>() );
+   \endcode
+
+
+
+
+   \section c_arrays Use of C style Arrays with tvmet
+
+   Sometimes you have some data arranged in a C style array for matrices
+   and vectors. As with tvmet release 1.6.0 you can wrap an expression
+   around using the functions vector_ref(const T* mem) and
+   matrix_ref(const T* mem) where mem is the pointer to the C array.
+
+   The returned expressions (XprVector or XprMatrix) can be used
+   as usual like tvmet's vectors and matrices. This means, you
+   can use all mathematical functions on it.
+
+   \par Example:
+   \code
+   static float lhs[3][3] = {
+     {-1,  0,  1}, { 1,  0,  1}, {-1,  0, -1}
+   };
+   static float rhs[3][3] = {
+     { 0,  1,  1}, { 0,  1, -1}, { 0, -1,  1}
+   };
+   ...
+
+   typedef Matrix<float, 3, 3>			matrix_type;
+
+   matrix_type M( prod(matrix_ref<float, 3, 3>(&lhs[0][0]),
+                       matrix_ref<float, 3, 3>(&rhs[0][0])) );
+   \endcode
+
+   This allows to initialize tvmet's vectors and matrices by
+   an alternative way as described at \ref construct.
+
+
+   \section compare Compare Vectors and Matrices
+
+   If you expect to find global comparison operators for comparing Vectors
+   and Matrices, you are right -- these are provided. But, the return
+   value probably isn't what you expect: a boolean value. Instead, the operator
+   returns an expression (e.g. XprVector<>). The contents of this expression
+   type is a element wise logical operation (depends on the given operator
+   like ==, <, >, etc...)! To get a boolean value you need to evaluate the
+   expression using all_elements() or any_elements(), as follows:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+   using namespace std;
+
+   Vector<double, 3> v1, v2, bv;
+
+   v1 = 1,2,3;
+   v2 = 1,3,3;
+
+   bv = v1 == v2;
+
+   cout << bv << endl;
+   cout << "v1 == v2 is "
+        << ( all_elements( v1 == v2 ) ? "true" : "false" )
+        << endl;
+   \endcode
+
+   This gives
+
+   \par [continued]
+   \code
+   Vector<d, 3>[1, 0, 1]
+   v1 == v2 is false
+   \endcode
+
+   The reason for this is the element wise operation on all elements (for both
+   Vectors and Matrices). Comparing two vectors will result in a "boolean Vector"
+   expression. Using all_elements/any_elements evaluates the result into a
+   single boolean by repeatedly applying the comparison for each element.
+
+   An other example on comparing is shown below:
+
+   \par Example:
+   \code
+   if(all_elements(X == Y)) { cout << "matrices are identical" << endl; }
+   if(any_elements(X == Y)) { cout << "at least one element is equal" << endl; }
+   if(any_elements(X != Y)) { cout << "not all elements are equal" << endl; }
+   \endcode
+
+   %tvmet prior release 1.2.1 did have a boolean version eval for comparing.
+   The functional and semantic meaning were not clear at all. Therefore I
+   decided to remove it.
+
+   \sa \ref operators
+
+
+
+
+
+   \section pod Data Types like std::complex<>
+
+   As we can see above we can use POD (plain old data) types like <tt>double</tt> and
+   <tt>int</tt> as data type of a %Vector or %Matrix. However, we are not limited to
+   this - we can use e.g. <tt>std::complex<></tt> as well:
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   Vector<std::complex<double>,3>	v1, v2;
+   Matrix<std::complex<double>,3,3>	m1;
+   \endcode
+
+   And operate on these...
+
+   \par [continued]
+   \code
+   v1 = 1,2,3;
+   m1 = 1,4,7,
+        2,5,8,
+        3,6,9;
+   v2 = m1 * v1;
+   \endcode
+
+   Be careful. <tt>std::complex<></tt> isn't tested well on regression tests.
+
+
+
+
+   \section stl STL support
+
+   Since version 0.2.0 %tvmet has supported an iterator interface conform to
+   the STL and since version 0.5.0 reverse STL iterators have been supported,
+   too.
+
+   With these, you can mix the %tvmet Vector and Matrix containers with the
+   STL algorithms.
+
+   For example, if you don't like %tvmet's ostream operator, you can create
+   your own implementation like this:
+
+   \par Example:
+   \code
+   tvmet::Vector<double, 6> v(1,2,3,4,5,6);
+   std::cout << v << std::endl;
+
+   std::cout << "The Vector is:" << std::endl;
+   std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, "\n"));
+   \endcode
+
+   Or, you create a random matrix and print it as shown here:
+
+   \par Example:
+   \code
+   tvmet::Matrix<double,6,6> m;
+
+   std::generate(m.begin(), m.end(), rand);
+   std::cout << m << std::endl;
+   \endcode
+
+
+
+
+
+   \section matrix_access Matrix access by rows and columns
+
+   If you need a specific row or column of a given matrix you can get access to
+   it by using the functions row and col.  They will return an XprVector<T>.
+   Unfortunately, you do not get any write access to the vector elements - only
+   reading is permitted due to the expression template concept used here. For
+   write access, you have to use matrix indexing with the parentheses operator.
+
+   \par Example:
+   \code
+   using namespace tvmet;
+
+   typedef Matrix<double 5, 3>			matrix_type;
+   typedef Vector<double, 5>			matrix_rowvector;
+   typedef Vector<double, 3>			matrix_colvector;
+
+   matrix_type M;
+   M = ....
+
+   matrix_rowvector row2 = row(M, 2);
+   matrix_colvector col3 = col(M, 3);
+   ...
+   \endcode
+
+
+
+
+
+   \section expr_print Expression printing
+
+   Expression printing is a nice feature for debugging expressions. (For more
+   about expression templates and expression tree please have a look
+   <a href=http://extreme.indiana.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html>here</a>).
+
+   You can write out a simple matrix-vector multiplication of a vector
+   <tt>v1</tt> and a matrix <tt>m1</tt> of the dimension of 3 as follows:
+
+   \par Example:
+   \code
+   std::cout << m1 * v1 << std::endl;
+   \endcode
+
+   which will be expanded to:
+
+   \par [continued]
+   \code
+   XprVector<
+       XprMVProduct<
+           d, 3, 3, 3, 1, d, 1
+       >
+       3
+   >
+   \endcode
+
+   The "d" is a g++ placeholder for double. (This may vary from compiler to
+   compiler since it is an implementation detail of runtime type information
+   [rtti] determined by the compiler's manufacturer). The purpose of this
+   feature is to check the right evaluation of expressions into the tree on
+   complicated mathematical expressions.
+
+   A rich source of examples are the regression tests. They show all of the
+   supported operations and functions (if there is a regression test for this
+   of course). Some examples are in the examples directory.
+
+
+
+
+*/
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/doc/works.dox b/tvmet-1.7.1/doc/works.dox
new file mode 100644
index 0000000..07edf8a
--- /dev/null
+++ b/tvmet-1.7.1/doc/works.dox
@@ -0,0 +1,40 @@
+/*
+ * $Id: works.dox,v 1.5 2005/03/09 12:33:00 opetzold Exp $
+ */
+
+/**
+   \page works Future works
+
+   A good library is never complete. Here are some points which I hope to cover
+   in the future:
+
+   -# more regression tests (bit operations are missing, not all functions and type
+      promotion are tested) and examples (temporary the regression test can act
+      as examples). The problems with the regression tests actually used is,
+      that they does not follow mathematical, strong logical guide lines to cover all
+      possible cases.
+   -# write more examples, the regression test should not act as examples.
+   -# better support for std::complex type.
+   -# add functions like
+      - matrix inverse using LUdecomposition and other matrix vector functions
+      - meta functions for sin, cos etc.
+   -# System V math support on linux seems to be incomplete
+   -# better compiler support
+   -# Interface to other numerical libraries as uBlas, BLAS, and LAPACK.
+
+
+   Maybe, there will be a tvmet2. Some of the features mentioned above will
+   require a redesign of tvmet. With this new design tvmet can better handle
+   special matrices, like banded, symmetric or triangular matrices etc.
+   Furthermore, sparse tiny vectors and matrices are easy to implement, as well
+   as an allocator concept for re-sizable containers.
+
+   The priority depends on the \ref projects as well as the support from the
+   community - please support %tvmet.
+
+ */
+
+
+// Local Variables:
+// mode:c++
+// End:
diff --git a/tvmet-1.7.1/examples/Makefile.am b/tvmet-1.7.1/examples/Makefile.am
new file mode 100644
index 0000000..6d0c252
--- /dev/null
+++ b/tvmet-1.7.1/examples/Makefile.am
@@ -0,0 +1,59 @@
+# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $
+
+AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
+
+EXTRA_PROGRAMS	= \
+	xpr_print_v1 \
+	xpr_print_v2 \
+	xpr_print_v3 \
+	xpr_print_v4 \
+	xpr_print_m1 \
+	xpr_print_m2 \
+	xpr_print_m3 \
+	xpr_print_m4 \
+	xpr_print_mv1 \
+	xpr_print_mv2 \
+	mv \
+	mm \
+	cmv \
+	cmm \
+	matrix_col \
+	diag \
+	ray \
+	hspiess \
+	redwards \
+	frob_matrix_norm \
+	alias \
+	aliasing
+
+DISTCLEANFILES = $(EXTRA_PROGRAMS)
+
+xpr_print_v1_SOURCES = xpr_print_v1.cc
+xpr_print_v2_SOURCES = xpr_print_v2.cc
+xpr_print_v3_SOURCES = xpr_print_v3.cc
+xpr_print_v4_SOURCES = xpr_print_v4.cc
+xpr_print_m1_SOURCES = xpr_print_m1.cc
+xpr_print_m2_SOURCES = xpr_print_m2.cc
+xpr_print_m3_SOURCES = xpr_print_m3.cc
+xpr_print_m4_SOURCES = xpr_print_m4.cc
+xpr_print_mv1_SOURCES = xpr_print_mv1.cc
+xpr_print_mv2_SOURCES = xpr_print_mv2.cc
+
+mv_SOURCES = mv.cc
+mm_SOURCES = mm.cc
+cmv_SOURCES = cmv.cc
+cmm_SOURCES = cmm.cc
+matrix_col_SOURCES = matrix_col.cc
+diag_SOURCES = diag.cc
+
+ray_SOURCES = ray.cc
+
+redwards_SOURCES = redwards.cc
+hspiess_SOURCES = hspiess.cc
+
+frob_matrix_norm_SOURCES = frob_matrix_norm.cc
+
+alias_SOURCES = alias.cc
+aliasing_SOURCES = aliasing.cc
+
+examples: $(EXTRA_PROGRAMS)
diff --git a/tvmet-1.7.1/examples/Makefile.in b/tvmet-1.7.1/examples/Makefile.in
new file mode 100644
index 0000000..ce43f3a
--- /dev/null
+++ b/tvmet-1.7.1/examples/Makefile.in
@@ -0,0 +1,651 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $
+SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) $(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) $(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) $(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) $(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) $(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) $(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) $(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) $(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+EXTRA_PROGRAMS = xpr_print_v1$(EXEEXT) xpr_print_v2$(EXEEXT) \
+	xpr_print_v3$(EXEEXT) xpr_print_v4$(EXEEXT) \
+	xpr_print_m1$(EXEEXT) xpr_print_m2$(EXEEXT) \
+	xpr_print_m3$(EXEEXT) xpr_print_m4$(EXEEXT) \
+	xpr_print_mv1$(EXEEXT) xpr_print_mv2$(EXEEXT) mv$(EXEEXT) \
+	mm$(EXEEXT) cmv$(EXEEXT) cmm$(EXEEXT) matrix_col$(EXEEXT) \
+	diag$(EXEEXT) ray$(EXEEXT) hspiess$(EXEEXT) redwards$(EXEEXT) \
+	frob_matrix_norm$(EXEEXT) alias$(EXEEXT) aliasing$(EXEEXT)
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+am_alias_OBJECTS = alias.$(OBJEXT)
+alias_OBJECTS = $(am_alias_OBJECTS)
+alias_LDADD = $(LDADD)
+am_aliasing_OBJECTS = aliasing.$(OBJEXT)
+aliasing_OBJECTS = $(am_aliasing_OBJECTS)
+aliasing_LDADD = $(LDADD)
+am_cmm_OBJECTS = cmm.$(OBJEXT)
+cmm_OBJECTS = $(am_cmm_OBJECTS)
+cmm_LDADD = $(LDADD)
+am_cmv_OBJECTS = cmv.$(OBJEXT)
+cmv_OBJECTS = $(am_cmv_OBJECTS)
+cmv_LDADD = $(LDADD)
+am_diag_OBJECTS = diag.$(OBJEXT)
+diag_OBJECTS = $(am_diag_OBJECTS)
+diag_LDADD = $(LDADD)
+am_frob_matrix_norm_OBJECTS = frob_matrix_norm.$(OBJEXT)
+frob_matrix_norm_OBJECTS = $(am_frob_matrix_norm_OBJECTS)
+frob_matrix_norm_LDADD = $(LDADD)
+am_hspiess_OBJECTS = hspiess.$(OBJEXT)
+hspiess_OBJECTS = $(am_hspiess_OBJECTS)
+hspiess_LDADD = $(LDADD)
+am_matrix_col_OBJECTS = matrix_col.$(OBJEXT)
+matrix_col_OBJECTS = $(am_matrix_col_OBJECTS)
+matrix_col_LDADD = $(LDADD)
+am_mm_OBJECTS = mm.$(OBJEXT)
+mm_OBJECTS = $(am_mm_OBJECTS)
+mm_LDADD = $(LDADD)
+am_mv_OBJECTS = mv.$(OBJEXT)
+mv_OBJECTS = $(am_mv_OBJECTS)
+mv_LDADD = $(LDADD)
+am_ray_OBJECTS = ray.$(OBJEXT)
+ray_OBJECTS = $(am_ray_OBJECTS)
+ray_LDADD = $(LDADD)
+am_redwards_OBJECTS = redwards.$(OBJEXT)
+redwards_OBJECTS = $(am_redwards_OBJECTS)
+redwards_LDADD = $(LDADD)
+am_xpr_print_m1_OBJECTS = xpr_print_m1.$(OBJEXT)
+xpr_print_m1_OBJECTS = $(am_xpr_print_m1_OBJECTS)
+xpr_print_m1_LDADD = $(LDADD)
+am_xpr_print_m2_OBJECTS = xpr_print_m2.$(OBJEXT)
+xpr_print_m2_OBJECTS = $(am_xpr_print_m2_OBJECTS)
+xpr_print_m2_LDADD = $(LDADD)
+am_xpr_print_m3_OBJECTS = xpr_print_m3.$(OBJEXT)
+xpr_print_m3_OBJECTS = $(am_xpr_print_m3_OBJECTS)
+xpr_print_m3_LDADD = $(LDADD)
+am_xpr_print_m4_OBJECTS = xpr_print_m4.$(OBJEXT)
+xpr_print_m4_OBJECTS = $(am_xpr_print_m4_OBJECTS)
+xpr_print_m4_LDADD = $(LDADD)
+am_xpr_print_mv1_OBJECTS = xpr_print_mv1.$(OBJEXT)
+xpr_print_mv1_OBJECTS = $(am_xpr_print_mv1_OBJECTS)
+xpr_print_mv1_LDADD = $(LDADD)
+am_xpr_print_mv2_OBJECTS = xpr_print_mv2.$(OBJEXT)
+xpr_print_mv2_OBJECTS = $(am_xpr_print_mv2_OBJECTS)
+xpr_print_mv2_LDADD = $(LDADD)
+am_xpr_print_v1_OBJECTS = xpr_print_v1.$(OBJEXT)
+xpr_print_v1_OBJECTS = $(am_xpr_print_v1_OBJECTS)
+xpr_print_v1_LDADD = $(LDADD)
+am_xpr_print_v2_OBJECTS = xpr_print_v2.$(OBJEXT)
+xpr_print_v2_OBJECTS = $(am_xpr_print_v2_OBJECTS)
+xpr_print_v2_LDADD = $(LDADD)
+am_xpr_print_v3_OBJECTS = xpr_print_v3.$(OBJEXT)
+xpr_print_v3_OBJECTS = $(am_xpr_print_v3_OBJECTS)
+xpr_print_v3_LDADD = $(LDADD)
+am_xpr_print_v4_OBJECTS = xpr_print_v4.$(OBJEXT)
+xpr_print_v4_OBJECTS = $(am_xpr_print_v4_OBJECTS)
+xpr_print_v4_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alias.Po ./$(DEPDIR)/aliasing.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/cmm.Po ./$(DEPDIR)/cmv.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/diag.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/frob_matrix_norm.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/hspiess.Po ./$(DEPDIR)/matrix_col.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/mm.Po ./$(DEPDIR)/mv.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/ray.Po ./$(DEPDIR)/redwards.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_m1.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_m2.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_m3.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_m4.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_mv1.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_mv2.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_v1.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_v2.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_v3.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/xpr_print_v4.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \
+	$(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \
+	$(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \
+	$(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \
+	$(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \
+	$(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \
+	$(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \
+	$(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \
+	$(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
+DIST_SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \
+	$(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \
+	$(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \
+	$(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \
+	$(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \
+	$(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \
+	$(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \
+	$(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \
+	$(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
+DISTCLEANFILES = $(EXTRA_PROGRAMS)
+xpr_print_v1_SOURCES = xpr_print_v1.cc
+xpr_print_v2_SOURCES = xpr_print_v2.cc
+xpr_print_v3_SOURCES = xpr_print_v3.cc
+xpr_print_v4_SOURCES = xpr_print_v4.cc
+xpr_print_m1_SOURCES = xpr_print_m1.cc
+xpr_print_m2_SOURCES = xpr_print_m2.cc
+xpr_print_m3_SOURCES = xpr_print_m3.cc
+xpr_print_m4_SOURCES = xpr_print_m4.cc
+xpr_print_mv1_SOURCES = xpr_print_mv1.cc
+xpr_print_mv2_SOURCES = xpr_print_mv2.cc
+mv_SOURCES = mv.cc
+mm_SOURCES = mm.cc
+cmv_SOURCES = cmv.cc
+cmm_SOURCES = cmm.cc
+matrix_col_SOURCES = matrix_col.cc
+diag_SOURCES = diag.cc
+ray_SOURCES = ray.cc
+redwards_SOURCES = redwards.cc
+hspiess_SOURCES = hspiess.cc
+frob_matrix_norm_SOURCES = frob_matrix_norm.cc
+alias_SOURCES = alias.cc
+aliasing_SOURCES = aliasing.cc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  examples/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+alias$(EXEEXT): $(alias_OBJECTS) $(alias_DEPENDENCIES) 
+	@rm -f alias$(EXEEXT)
+	$(CXXLINK) $(alias_LDFLAGS) $(alias_OBJECTS) $(alias_LDADD) $(LIBS)
+aliasing$(EXEEXT): $(aliasing_OBJECTS) $(aliasing_DEPENDENCIES) 
+	@rm -f aliasing$(EXEEXT)
+	$(CXXLINK) $(aliasing_LDFLAGS) $(aliasing_OBJECTS) $(aliasing_LDADD) $(LIBS)
+cmm$(EXEEXT): $(cmm_OBJECTS) $(cmm_DEPENDENCIES) 
+	@rm -f cmm$(EXEEXT)
+	$(CXXLINK) $(cmm_LDFLAGS) $(cmm_OBJECTS) $(cmm_LDADD) $(LIBS)
+cmv$(EXEEXT): $(cmv_OBJECTS) $(cmv_DEPENDENCIES) 
+	@rm -f cmv$(EXEEXT)
+	$(CXXLINK) $(cmv_LDFLAGS) $(cmv_OBJECTS) $(cmv_LDADD) $(LIBS)
+diag$(EXEEXT): $(diag_OBJECTS) $(diag_DEPENDENCIES) 
+	@rm -f diag$(EXEEXT)
+	$(CXXLINK) $(diag_LDFLAGS) $(diag_OBJECTS) $(diag_LDADD) $(LIBS)
+frob_matrix_norm$(EXEEXT): $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_DEPENDENCIES) 
+	@rm -f frob_matrix_norm$(EXEEXT)
+	$(CXXLINK) $(frob_matrix_norm_LDFLAGS) $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_LDADD) $(LIBS)
+hspiess$(EXEEXT): $(hspiess_OBJECTS) $(hspiess_DEPENDENCIES) 
+	@rm -f hspiess$(EXEEXT)
+	$(CXXLINK) $(hspiess_LDFLAGS) $(hspiess_OBJECTS) $(hspiess_LDADD) $(LIBS)
+matrix_col$(EXEEXT): $(matrix_col_OBJECTS) $(matrix_col_DEPENDENCIES) 
+	@rm -f matrix_col$(EXEEXT)
+	$(CXXLINK) $(matrix_col_LDFLAGS) $(matrix_col_OBJECTS) $(matrix_col_LDADD) $(LIBS)
+mm$(EXEEXT): $(mm_OBJECTS) $(mm_DEPENDENCIES) 
+	@rm -f mm$(EXEEXT)
+	$(CXXLINK) $(mm_LDFLAGS) $(mm_OBJECTS) $(mm_LDADD) $(LIBS)
+mv$(EXEEXT): $(mv_OBJECTS) $(mv_DEPENDENCIES) 
+	@rm -f mv$(EXEEXT)
+	$(CXXLINK) $(mv_LDFLAGS) $(mv_OBJECTS) $(mv_LDADD) $(LIBS)
+ray$(EXEEXT): $(ray_OBJECTS) $(ray_DEPENDENCIES) 
+	@rm -f ray$(EXEEXT)
+	$(CXXLINK) $(ray_LDFLAGS) $(ray_OBJECTS) $(ray_LDADD) $(LIBS)
+redwards$(EXEEXT): $(redwards_OBJECTS) $(redwards_DEPENDENCIES) 
+	@rm -f redwards$(EXEEXT)
+	$(CXXLINK) $(redwards_LDFLAGS) $(redwards_OBJECTS) $(redwards_LDADD) $(LIBS)
+xpr_print_m1$(EXEEXT): $(xpr_print_m1_OBJECTS) $(xpr_print_m1_DEPENDENCIES) 
+	@rm -f xpr_print_m1$(EXEEXT)
+	$(CXXLINK) $(xpr_print_m1_LDFLAGS) $(xpr_print_m1_OBJECTS) $(xpr_print_m1_LDADD) $(LIBS)
+xpr_print_m2$(EXEEXT): $(xpr_print_m2_OBJECTS) $(xpr_print_m2_DEPENDENCIES) 
+	@rm -f xpr_print_m2$(EXEEXT)
+	$(CXXLINK) $(xpr_print_m2_LDFLAGS) $(xpr_print_m2_OBJECTS) $(xpr_print_m2_LDADD) $(LIBS)
+xpr_print_m3$(EXEEXT): $(xpr_print_m3_OBJECTS) $(xpr_print_m3_DEPENDENCIES) 
+	@rm -f xpr_print_m3$(EXEEXT)
+	$(CXXLINK) $(xpr_print_m3_LDFLAGS) $(xpr_print_m3_OBJECTS) $(xpr_print_m3_LDADD) $(LIBS)
+xpr_print_m4$(EXEEXT): $(xpr_print_m4_OBJECTS) $(xpr_print_m4_DEPENDENCIES) 
+	@rm -f xpr_print_m4$(EXEEXT)
+	$(CXXLINK) $(xpr_print_m4_LDFLAGS) $(xpr_print_m4_OBJECTS) $(xpr_print_m4_LDADD) $(LIBS)
+xpr_print_mv1$(EXEEXT): $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_DEPENDENCIES) 
+	@rm -f xpr_print_mv1$(EXEEXT)
+	$(CXXLINK) $(xpr_print_mv1_LDFLAGS) $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_LDADD) $(LIBS)
+xpr_print_mv2$(EXEEXT): $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_DEPENDENCIES) 
+	@rm -f xpr_print_mv2$(EXEEXT)
+	$(CXXLINK) $(xpr_print_mv2_LDFLAGS) $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_LDADD) $(LIBS)
+xpr_print_v1$(EXEEXT): $(xpr_print_v1_OBJECTS) $(xpr_print_v1_DEPENDENCIES) 
+	@rm -f xpr_print_v1$(EXEEXT)
+	$(CXXLINK) $(xpr_print_v1_LDFLAGS) $(xpr_print_v1_OBJECTS) $(xpr_print_v1_LDADD) $(LIBS)
+xpr_print_v2$(EXEEXT): $(xpr_print_v2_OBJECTS) $(xpr_print_v2_DEPENDENCIES) 
+	@rm -f xpr_print_v2$(EXEEXT)
+	$(CXXLINK) $(xpr_print_v2_LDFLAGS) $(xpr_print_v2_OBJECTS) $(xpr_print_v2_LDADD) $(LIBS)
+xpr_print_v3$(EXEEXT): $(xpr_print_v3_OBJECTS) $(xpr_print_v3_DEPENDENCIES) 
+	@rm -f xpr_print_v3$(EXEEXT)
+	$(CXXLINK) $(xpr_print_v3_LDFLAGS) $(xpr_print_v3_OBJECTS) $(xpr_print_v3_LDADD) $(LIBS)
+xpr_print_v4$(EXEEXT): $(xpr_print_v4_OBJECTS) $(xpr_print_v4_DEPENDENCIES) 
+	@rm -f xpr_print_v4$(EXEEXT)
+	$(CXXLINK) $(xpr_print_v4_LDFLAGS) $(xpr_print_v4_OBJECTS) $(xpr_print_v4_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alias.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aliasing.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frob_matrix_norm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hspiess.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix_col.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ray.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/redwards.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v4.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@	if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool 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-exec install-exec-am \
+	install-info install-info-am install-man 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 uninstall-info-am
+
+
+examples: $(EXTRA_PROGRAMS)
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/examples/alias.cc b/tvmet-1.7.1/examples/alias.cc
new file mode 100644
index 0000000..01f02ec
--- /dev/null
+++ b/tvmet-1.7.1/examples/alias.cc
@@ -0,0 +1,33 @@
+/*
+ * $Id: alias.cc,v 1.1 2004/03/26 07:56:32 opetzold Exp $
+ *
+ * This example shows the solution of the problem with aliasing
+ * mentioned at
+ * http://tvmet.sourceforge.net/notes.html#alias
+ */
+
+#include <iostream>
+#include <algorithm>
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+#include <tvmet/util/Incrementor.h>
+
+using namespace std;
+
+
+int main()
+{
+  typedef tvmet::Matrix<double, 3, 3>		matrix_type;
+
+  matrix_type						M;
+
+  std::generate(M.begin(), M.end(),
+		tvmet::util::Incrementor<matrix_type::value_type>());
+
+  std::cout << "M = " << M << std::endl;
+
+  alias(M) = M * trans(M);
+
+  std::cout << M << std::endl;
+
+}
diff --git a/tvmet-1.7.1/examples/aliasing.cc b/tvmet-1.7.1/examples/aliasing.cc
new file mode 100644
index 0000000..4ba87d8
--- /dev/null
+++ b/tvmet-1.7.1/examples/aliasing.cc
@@ -0,0 +1,44 @@
+/*
+ * $Id: aliasing.cc,v 1.2 2004/03/26 07:58:06 opetzold Exp $
+ *
+ * This example shows the problem with aliasing mentioned at
+ * http://tvmet.sourceforge.net/notes.html#alias
+ */
+
+#include <iostream>
+#include <algorithm>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/Incrementor.h>
+
+using std::cout; using std::endl;
+using namespace tvmet;
+
+typedef Matrix<double,3,3>	matrix_type;
+
+int main()
+{
+  matrix_type 			A, B;
+  matrix_type 			C;
+
+  std::generate(A.begin(), A.end(),
+		tvmet::util::Incrementor<matrix_type::value_type>());
+  std::generate(B.begin(), B.end(),
+		tvmet::util::Incrementor<matrix_type::value_type>());
+
+  cout << "A = " << A << endl;
+  cout << "B = " << B << endl;
+
+  // matrix prod without aliasing
+  C = A * B;
+  cout << "C = A * B = " << C << endl;
+
+  // work around for aliasing
+  matrix_type 			temp_A(A);
+  A = temp_A * B;
+  cout << "matrix_type temp_A(A);\n"
+       << "A = temp_A * B = " << A << endl;
+
+  // this shows the aliasing problem
+  A = A * B;
+  cout << "A = A * B = " << A << endl;
+}
diff --git a/tvmet-1.7.1/examples/cmm.cc b/tvmet-1.7.1/examples/cmm.cc
new file mode 100644
index 0000000..bd470aa
--- /dev/null
+++ b/tvmet-1.7.1/examples/cmm.cc
@@ -0,0 +1,29 @@
+#include <iostream>
+#include <complex>
+
+#include <tvmet/Matrix.h>
+
+using namespace tvmet;
+using std::cout;
+using std::endl;
+
+typedef Matrix<std::complex<double>,3,3>	matrix33d;
+
+void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) {
+  res = m1 * m2;
+}
+
+int main()
+{
+  matrix33d m1, m2, m3;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+  m2 = m1;
+
+  testMM(m3, m1, m2);
+
+  cout << m1 << "\n*\n" << m2 << "\n=";
+  cout << m3 << endl;
+}
diff --git a/tvmet-1.7.1/examples/cmv.cc b/tvmet-1.7.1/examples/cmv.cc
new file mode 100644
index 0000000..4ea55ad
--- /dev/null
+++ b/tvmet-1.7.1/examples/cmv.cc
@@ -0,0 +1,36 @@
+#include <iostream>
+#include <complex>
+
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+
+using namespace tvmet;
+using std::cout;
+using std::endl;
+
+typedef Vector<std::complex<double>,3>		vector3d;
+typedef Matrix<std::complex<double>,3,3>	matrix33d;
+
+#if (defined __ICC )
+#pragma warning(disable:1418) // external definition with no prior declaration
+#endif
+
+void testMV(vector3d& res, const matrix33d& m, const vector3d& v) {
+  res = m * v;
+}
+
+int main()
+{
+  vector3d v1, vr;
+  matrix33d m1;
+
+  v1 = 1,2,3;
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+
+  testMV(vr, m1, v1);
+
+  cout << m1 << " * " << v1 << " =\n";
+  cout << vr << endl;
+}
diff --git a/tvmet-1.7.1/examples/diag.cc b/tvmet-1.7.1/examples/diag.cc
new file mode 100644
index 0000000..40a4c18
--- /dev/null
+++ b/tvmet-1.7.1/examples/diag.cc
@@ -0,0 +1,32 @@
+/* Version: $Id: diag.cc,v 1.1 2003/02/12 19:03:48 opetzold Exp $ */
+
+
+#include <iostream>
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+
+
+using namespace std;
+using namespace tvmet;
+
+typedef Matrix<double,3,3>	matrix33d;
+typedef Vector<double,3>	vector3d;
+
+
+int main()
+{
+  matrix33d m1, m2(0);
+  vector3d v1, v2;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+  v1 = diag(m1);
+
+  // not yet, since we need to assign an expression/scalar to an expression
+  // diag(m2) = 1.0;
+
+  cout << "M1 = " << m1 << endl;
+  cout << "diag(M1) = " << v1 << endl;
+  cout << "identity(M2) = " << m2 << endl;
+}
diff --git a/tvmet-1.7.1/examples/frob_matrix_norm.cc b/tvmet-1.7.1/examples/frob_matrix_norm.cc
new file mode 100644
index 0000000..8267aa9
--- /dev/null
+++ b/tvmet-1.7.1/examples/frob_matrix_norm.cc
@@ -0,0 +1,191 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: frob_matrix_norm.cc,v 1.3 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#include <iostream>
+#include <tvmet/Matrix.h>
+#include <tvmet/xpr/Vector.h>
+
+using namespace std;
+
+template<class T, std::size_t Rows, std::size_t Cols>
+double
+frob_norm(const tvmet::Matrix<T, Rows, Cols>& M) {
+  return std::sqrt(M(0,0)*M(0,0) + M(1,0)*M(1,0) + M(2,0)*M(2,0)
+	  + M(0,1)*M(0,1) + M(1,1)*M(1,1) + M(2,1)*M(2,1)
+	  + M(0,2)*M(0,2) + M(1,2)*M(1,2) + M(2,2)*M(2,2));
+}
+
+namespace tvmet {
+  template<class T, std::size_t Rows, std::size_t Cols>
+  typename NumericTraits<T>::float_type
+  norm(const Matrix<T, Rows, Cols>& M) {
+    return std::sqrt( sum( diag( MtM_prod(M,M) ) ) );
+  }
+}
+
+int main()
+{
+  typedef tvmet::Matrix<double,3,3>	matrix_type;
+
+  matrix_type M;
+
+  M = 1,2,3,4,5,6,7,8,9;
+  cout << M << endl;
+
+  cout << "handopt norm = " << frob_norm(M) << endl;
+  cout << "tvmet::norm  = " << tvmet::norm(M) << endl;
+}
+
+/*
+   gcc 3.3 produce for the hand optimized frob_norm:
+
+_Z9frob_normIdLj3ELj3EEdRKN5tvmet6MatrixIT_XT0_EXT1_EEE:
+.LFB3210:
+	pushl	%ebp
+.LCFI6:
+	movl	%esp, %ebp
+.LCFI7:
+	subl	$8, %esp
+.LCFI8:
+	movl	8(%ebp), %eax
+	fldl	(%eax)
+	fldl	24(%eax)
+	fxch	%st(1)
+	fmul	%st(0), %st
+	fxch	%st(1)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	48(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	8(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	32(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	56(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	16(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	40(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fldl	64(%eax)
+	fmul	%st(0), %st
+	faddp	%st, %st(1)
+	fld	%st(0)
+	fsqrt
+	fucom	%st(0)
+	fnstsw	%ax
+	sahf
+	jp	.L189
+	jne	.L189
+	fstp	%st(1)
+.L186:
+	leave
+	ret
+
+*/
+
+/*
+   gcc 3.3 produce the norm function using tvmet 1.3.0:
+
+_ZN5tvmet4normIdLj3ELj3EEENS_13NumericTraitsIT_E10float_typeERKNS_6MatrixIS2_XT0_EXT1_EEE:
+.LFB3252:
+.L194:
+.L198:
+.L203:
+.L207:
+.L212:
+.L225:
+.L238:
+.L251:
+	pushl	%ebp
+.LCFI9:
+	movl	%esp, %ebp
+.LCFI10:
+	subl	$56, %esp
+.LCFI11:
+	movl	8(%ebp), %edx
+	leal	-24(%ebp), %eax
+	movl	%eax, -12(%ebp)
+	leal	-12(%ebp), %eax
+	fldl	24(%edx)
+	fldl	48(%edx)
+	fldl	(%edx)
+	fxch	%st(2)
+	fmul	%st(0), %st
+	fxch	%st(1)
+	movl	%eax, -28(%ebp)
+	fmul	%st(0), %st
+	fxch	%st(2)
+	movl	%edx, -24(%ebp)
+	movl	%edx, -20(%ebp)
+	fmul	%st(0), %st
+	fldl	8(%edx)
+	fxch	%st(2)
+	faddp	%st, %st(3)
+	fldl	56(%edx)
+	fxch	%st(2)
+	fmul	%st(0), %st
+	fxch	%st(1)
+	faddp	%st, %st(3)
+	fldl	32(%edx)
+	fxch	%st(2)
+	fmul	%st(0), %st
+	fxch	%st(2)
+	fmul	%st(0), %st
+	fldl	16(%edx)
+	fxch	%st(1)
+	faddp	%st, %st(3)
+	fmul	%st(0), %st
+	fldl	64(%edx)
+	fxch	%st(2)
+	faddp	%st, %st(3)
+	fldl	40(%edx)
+	fxch	%st(2)
+	fmul	%st(0), %st
+	fxch	%st(2)
+	fmul	%st(0), %st
+	faddp	%st, %st(2)
+	faddp	%st, %st(1)
+	faddp	%st, %st(1)
+	faddp	%st, %st(1)
+	fld	%st(0)
+	fsqrt
+	fucom	%st(0)
+	fnstsw	%ax
+	sahf
+	jp	.L265
+	jne	.L265
+	fstp	%st(1)
+.L261:
+	fstpl	-8(%ebp)
+	fldl	-8(%ebp)
+	leave
+	ret
+
+*/
diff --git a/tvmet-1.7.1/examples/hspiess.cc b/tvmet-1.7.1/examples/hspiess.cc
new file mode 100644
index 0000000..129c4f0
--- /dev/null
+++ b/tvmet-1.7.1/examples/hspiess.cc
@@ -0,0 +1,37 @@
+#include <iostream>
+
+#include <tvmet/Matrix.h>
+
+using namespace std;
+
+int main()
+{
+  tvmet::Matrix<double,3,2>	B;
+  tvmet::Matrix<double,3,3>	D;
+
+  B =
+   -0.05,  0,
+    0,     0.05,
+    0.05, -0.05;
+  D =
+    2000, 1000, 0,
+    1000, 2000, 0,
+    0,    0,    500;
+
+  cout << "B = " << B << endl;
+  cout << "D = " << D << endl;
+
+  {
+    tvmet::Matrix<double,2,2>	K;
+
+    K = trans(B) * D * B;
+    cout << "K = " << K << endl;
+  }
+
+  {
+    tvmet::Matrix<double,2,2>	K;
+
+    K = tvmet::Matrix<double,2,3>(trans(B) * D) * B;
+    cout << "K = " << K << endl;
+  }
+}
diff --git a/tvmet-1.7.1/examples/matrix_col.cc b/tvmet-1.7.1/examples/matrix_col.cc
new file mode 100644
index 0000000..a807dbb
--- /dev/null
+++ b/tvmet-1.7.1/examples/matrix_col.cc
@@ -0,0 +1,44 @@
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+
+#include <cstdlib>
+
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+typedef Vector<double,3>	vector3d;
+typedef Matrix<double,3,3>	matrix33d;
+
+int main()
+{
+  matrix33d 			m1;
+
+  std::generate(m1.begin(), m1.end(), std::rand);
+
+  vector3d vc0( col(m1, 0) );
+  vector3d vc1( col(m1, 1) );
+  vector3d vc2( col(m1, 2) );
+
+  vector3d vr0( row(m1, 0) );
+  vector3d vr1( row(m1, 1) );
+  vector3d vr2( row(m1, 2) );
+
+
+  cout << std::setw(12) << m1 << endl;
+
+  cout << "col vectors:" << endl;
+  cout << vc0 << endl;
+  cout << vc1 << endl;
+  cout << vc2 << endl;
+
+  cout << "row vectors:" << endl;
+  cout << vr0 << endl;
+  cout << vr1 << endl;
+  cout << vr2 << endl;
+
+}
+
diff --git a/tvmet-1.7.1/examples/mm.cc b/tvmet-1.7.1/examples/mm.cc
new file mode 100644
index 0000000..f251e61
--- /dev/null
+++ b/tvmet-1.7.1/examples/mm.cc
@@ -0,0 +1,30 @@
+#include <iostream>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+typedef Matrix<double,3,3>	matrix33d;
+
+#if (defined __ICC )
+#pragma warning(disable:1418) // external definition with no prior declaration
+#endif
+
+void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) {
+  res = m1 * m2;
+}
+
+int main()
+{
+  matrix33d m1, m2, m3;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+  m2 = m1;
+
+  testMM(m3, m1, m2);
+
+  cout << m1 << "\n*\n" << m2 << "\n=";
+  cout << m3 << endl;
+}
diff --git a/tvmet-1.7.1/examples/mv.cc b/tvmet-1.7.1/examples/mv.cc
new file mode 100644
index 0000000..9665409
--- /dev/null
+++ b/tvmet-1.7.1/examples/mv.cc
@@ -0,0 +1,36 @@
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+
+#include <cstdlib>
+
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+typedef Vector<double,3>	vector3d;
+typedef Matrix<double,3,3>	matrix33d;
+
+#if (defined __ICC )
+#pragma warning(disable:1418) // external definition with no prior declaration
+#endif
+
+void testMV(vector3d& res, const matrix33d& m, const vector3d& v) {
+  res = m * v;
+}
+
+int main()
+{
+  vector3d v1, vr;
+  matrix33d m1;
+
+  std::generate(v1.begin(), v1.end(), std::rand);
+  std::generate(m1.begin(), m1.end(), std::rand);
+
+  testMV(vr, m1, v1);
+
+  cout << std::setw(12) << m1 << " * " << std::setw(12) << v1 << " =\n";
+  cout << std::setw(12) << vr << endl;
+}
diff --git a/tvmet-1.7.1/examples/ray.cc b/tvmet-1.7.1/examples/ray.cc
new file mode 100644
index 0000000..6ab07b9
--- /dev/null
+++ b/tvmet-1.7.1/examples/ray.cc
@@ -0,0 +1,103 @@
+#include <iostream>
+#include <cmath>
+
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+typedef Vector<double,3>	vector3d;
+
+void reflect(vector3d& reflection, const vector3d& ray, const vector3d& surfaceNormal)
+{
+  // The surface normal must be unit length to use this equation.
+  reflection = ray - 2 * dot(ray,surfaceNormal) * surfaceNormal;
+
+  // expression printing
+  //  cout << (ray - 2 * dot(ray,surfaceNormal) * surfaceNormal) << endl;
+}
+
+int main()
+{
+  vector3d x, y, z;
+
+  // y will be the incident ray
+  y[0] = 1;
+  y[1] = 0;
+  y[2] = -1;
+
+  // z is the surface normal
+  z[0] = 0;
+  z[1] = 0;
+  z[2] = 1;
+
+  reflect(x, y, z);
+
+  cout << "Reflected ray is: [ " << x[0] << " " << x[1] << " " << x[2]
+       << " ]" << endl;
+}
+
+/*****************************************************************************************
+gcc 3.2.0 produce this code (i586) using tvmet 1.3.0:
+
+_Z7reflectRN5tvmet6VectorIdLj3EEERKS1_S4_:
+.LFB2757:
+.L8:
+.L18:
+.L22:
+.L28:
+.L32:
+.L38:
+.L44:
+.L48:
+	pushl	%ebp
+.LCFI0:
+	movl	%esp, %ebp
+.LCFI1:
+	leal	-32(%ebp), %eax
+	pushl	%ebx
+.LCFI2:
+	subl	$52, %esp
+.LCFI3:
+	movl	16(%ebp), %edx
+	movl	%eax, -24(%ebp)
+	movl	12(%ebp), %ecx
+	leal	-36(%ebp), %eax
+	movl	%eax, -20(%ebp)
+	movl	8(%ebp), %ebx
+	leal	-24(%ebp), %eax
+	fldl	8(%edx)
+	fldl	16(%edx)
+	fmull	16(%ecx)
+	fxch	%st(1)
+	movl	%eax, -12(%ebp)
+	leal	-52(%ebp), %eax
+	fmull	8(%ecx)
+	movl	%eax, -48(%ebp)
+	leal	-12(%ebp), %eax
+	fldl	(%edx)
+	fmull	(%ecx)
+	fxch	%st(1)
+	movl	%eax, -44(%ebp)
+	faddp	%st, %st(2)
+	faddp	%st, %st(1)
+	fadd	%st(0), %st
+	fld	%st(0)
+	fstl	-32(%ebp)
+	fxch	%st(1)
+	fmull	(%edx)
+	fsubrl	(%ecx)
+	fstpl	(%ebx)
+	fld	%st(0)
+	fmull	8(%edx)
+	fsubrl	8(%ecx)
+	fstpl	8(%ebx)
+	fmull	16(%edx)
+	fsubrl	16(%ecx)
+	fstpl	16(%ebx)
+	addl	$52, %esp
+	popl	%ebx
+	popl	%ebp
+	ret
+
+*****************************************************************************************/
diff --git a/tvmet-1.7.1/examples/redwards.cc b/tvmet-1.7.1/examples/redwards.cc
new file mode 100644
index 0000000..46a525d
--- /dev/null
+++ b/tvmet-1.7.1/examples/redwards.cc
@@ -0,0 +1,25 @@
+/*
+ * This is a reused case study used as example from Rusell Edwards.
+ * Works only with > release-1-2-0 due to a missed
+ * product/operator*(Matrix,XprVector) on releases prior.
+ * It shows a possible use of chained expressions.
+ */
+#include <iostream>
+
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  Matrix<float,3,3>		eigenvecs;
+  Matrix<float,3,3>		M;
+
+  eigenvecs = 1,2,3,4,5,6,7,8,9;
+  M = 10,20,30,40,50,60,70,80,90;
+
+  Vector<float,3> ev0( M * col(eigenvecs, 0));
+
+  cout << "ev0 = " << ev0 << endl;
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_m1.cc b/tvmet-1.7.1/examples/xpr_print_m1.cc
new file mode 100644
index 0000000..f48fe10
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_m1.cc
@@ -0,0 +1,21 @@
+#include <iostream>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Matrix stuff I
+  Matrix<double,3,3>	m1, m2, m3;
+  m1 = 1,2,3,
+       4,5,6,
+       7,8,9;
+  m2 = trans(m1);
+
+  cout << "Xpr Level printing of "
+       << m1 << "\n*\n" << m2 <<"\nresults into:\n";
+  cout << m1*m2 << endl;
+  cout << "The result =\n";
+  m3 = m1*m2;
+  cout << m3 << endl << endl;
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_m2.cc b/tvmet-1.7.1/examples/xpr_print_m2.cc
new file mode 100644
index 0000000..c9151fd
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_m2.cc
@@ -0,0 +1,21 @@
+#include <iostream>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Matrix stuff II (unary functions)
+  Matrix<double,3,3>	m1, m2, m3;
+  m1 = 1,2,3,
+       4,5,6,
+       7,8,9;
+  m2 = trans(m1);
+
+  cout << "Xpr Level printing of "
+       << "sqrt(\n" << m1 <<"):\n";
+  cout << sqrt(m1) << endl;
+  cout << "The result = \n";
+  m3 = sqrt(m1);
+  cout << m3 << endl << endl;
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_m3.cc b/tvmet-1.7.1/examples/xpr_print_m3.cc
new file mode 100644
index 0000000..69f6451
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_m3.cc
@@ -0,0 +1,21 @@
+#include <iostream>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Matrix stuff III (binary functions)
+  Matrix<double,3,3>	m1, m2, m3;
+  m1 = 1,2,3,
+       4,5,6,
+       7,8,9;
+  m2 = trans(m1);
+
+  cout << "Xpr Level printing of "
+       << "pow(\n" << m1 << ", " << m2 << "):\n";
+  cout << pow(m1, m2) << endl;
+  cout << "The result = \n";
+  m3 = pow(m1, m2);
+  cout << m3 << endl << endl;
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_m4.cc b/tvmet-1.7.1/examples/xpr_print_m4.cc
new file mode 100644
index 0000000..a249981
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_m4.cc
@@ -0,0 +1,21 @@
+#include <iostream>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Matrix stuff IV (binary functions with pod)
+  Matrix<double,3,3>	m1, m2, m3;
+  m1 = 1,2,3,
+       4,5,6,
+       7,8,9;
+  m2 = trans(m1);
+
+  cout << "Xpr Level printing of "
+       << "pow(\n" << m1 << ", " << 3 << "):\n";
+  cout << pow(m1, 3) << endl;
+  cout << "The result = \n";
+  m3 = pow(m1, 3);
+  cout << m3 << endl << endl;
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_mv1.cc b/tvmet-1.7.1/examples/xpr_print_mv1.cc
new file mode 100644
index 0000000..c486295
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_mv1.cc
@@ -0,0 +1,26 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+ // Matrix Vector stuff I
+  Vector<double,3>	v1(1,2,3), v2(v1);
+  Vector<double,3>	v3(0);
+
+  Matrix<double,3,3>	m1, m2, m3;
+  m1 = 1,2,3,
+       4,5,6,
+       7,8,9;
+  m2 = trans(m1);
+
+  cout << "Xpr Level printing of "
+       << m1 << "\n* " << v1 <<"\nresults into:\n";
+  cout << m1*v1 << endl;
+  cout << "The result =\n";
+  v3 = m1*v1;
+  cout << v3 << endl << endl;
+
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_mv2.cc b/tvmet-1.7.1/examples/xpr_print_mv2.cc
new file mode 100644
index 0000000..4d51e54
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_mv2.cc
@@ -0,0 +1,26 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+ // Matrix Vector stuff II
+  Vector<double,3>	v1(1,2,3), v2(v1);
+  Vector<double,3>	v3(0);
+
+  Matrix<double,3,3>	m1, m2, m3;
+  m1 = 1,2,3,
+       4,5,6,
+       7,8,9;
+  m2 = trans(m1);
+
+  cout << "Xpr Level printing of "
+       << "sqrt(\n" << m1 << "\n* " << v1 << ")\nresults into:\n";
+  cout << sqrt(m1*v1) << endl;
+  cout << "The result =\n";
+  v3 = sqrt(m1*v1);
+  cout << v3 << endl << endl;
+
+}
diff --git a/tvmet-1.7.1/examples/xpr_print_v1.cc b/tvmet-1.7.1/examples/xpr_print_v1.cc
new file mode 100644
index 0000000..98a64b5
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_v1.cc
@@ -0,0 +1,19 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Vector stuff I
+  Vector<double,3>	v1(1,2,3), v2(v1);
+  Vector<double,3>	v3(0);
+
+  cout << "Xpr Level printing of "
+       << v1 << " * " << v2 <<":\n";
+  cout << v1*v2 << endl;
+  cout << "The result = \n";
+  v3 = v1*v2;
+  cout << v3 << endl << endl;
+}
+
diff --git a/tvmet-1.7.1/examples/xpr_print_v2.cc b/tvmet-1.7.1/examples/xpr_print_v2.cc
new file mode 100644
index 0000000..f670beb
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_v2.cc
@@ -0,0 +1,19 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Vector stuff II (unary functions)
+  Vector<double,3>	v1(1,2,3), v2(v1);
+  Vector<double,3>	v3(0);
+
+  cout << "Xpr Level printing of "
+       << "sqrt(" << v1 <<"):\n";
+  cout << sqrt(v1) << endl;
+  cout << "The result = \n";
+  v3 = sqrt(v1);
+  cout << v3 << endl << endl;
+}
+
diff --git a/tvmet-1.7.1/examples/xpr_print_v3.cc b/tvmet-1.7.1/examples/xpr_print_v3.cc
new file mode 100644
index 0000000..40167b3
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_v3.cc
@@ -0,0 +1,19 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Vector stuff III (binary functions)
+  Vector<double,3>	v1(1,2,3), v2(v1);
+  Vector<double,3>	v3(0);
+
+  cout << "Xpr Level printing of "
+       << "pow(" << v1 << ", " << v2 << "):\n";
+  cout << pow(v1, v2) << endl;
+  cout << "The result = \n";
+  v3 = pow(v1, v2);
+  cout << v3 << endl << endl;
+}
+
diff --git a/tvmet-1.7.1/examples/xpr_print_v4.cc b/tvmet-1.7.1/examples/xpr_print_v4.cc
new file mode 100644
index 0000000..1253db8
--- /dev/null
+++ b/tvmet-1.7.1/examples/xpr_print_v4.cc
@@ -0,0 +1,19 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+
+using namespace std;
+using namespace tvmet;
+
+int main() {
+  // Vector stuff IV (binary functions with pod)
+  Vector<double,3>	v1(1,2,3), v2(v1);
+  Vector<double,3>	v3(0);
+
+  cout << "Xpr Level printing of "
+       << "pow(" << v1 << ", " << 3 << "):\n";
+  cout << pow(v1, 3) << endl;
+  cout << "The result = \n";
+  v3 = pow(v1, 3);
+  cout << v3 << endl << endl;
+}
+
diff --git a/tvmet-1.7.1/include/Makefile.am b/tvmet-1.7.1/include/Makefile.am
new file mode 100644
index 0000000..87d973f
--- /dev/null
+++ b/tvmet-1.7.1/include/Makefile.am
@@ -0,0 +1,3 @@
+# $Id: Makefile.am,v 1.2 2004/04/12 21:50:35 opetzold Exp $
+
+SUBDIRS = $(PACKAGE)
diff --git a/tvmet-1.7.1/include/Makefile.in b/tvmet-1.7.1/include/Makefile.in
new file mode 100644
index 0000000..55fb1bf
--- /dev/null
+++ b/tvmet-1.7.1/include/Makefile.in
@@ -0,0 +1,477 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.2 2004/04/12 21:50:35 opetzold Exp $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = $(PACKAGE)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (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):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	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; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if (etags --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	else \
+	  include_option=--include; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && \
+	      tags="$$tags $$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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || mkdir "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="../$(top_distdir)" \
+	        distdir="../$(distdir)/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/AliasProxy.h b/tvmet-1.7.1/include/tvmet/AliasProxy.h
new file mode 100644
index 0000000..ff6fa5c
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/AliasProxy.h
@@ -0,0 +1,127 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: AliasProxy.h,v 1.4 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_ALIAS_PROXY_H
+#define TVMET_ALIAS_PROXY_H
+
+namespace tvmet {
+
+
+/** forwards */
+template<class E> class AliasProxy;
+
+
+/**
+ * \brief Simplify syntax for alias Matrices and Vectors,
+ *        where aliasing left hand values appear in the
+ *        expression.
+ * \par Example:
+ * \code
+ * typedef tvmet::Matrix<double, 10, 10>	matrix_type;
+ * matrix_type					m;
+ * ...
+ * alias(m) += trans(m);
+ * \endcode
+ * \sa AliasProxy
+ * \sa Some Notes \ref alias
+ */
+template<class E>
+AliasProxy<E> alias(E& expr) { return AliasProxy<E>(expr); }
+
+
+/**
+ * \class AliasProxy AliasProxy.h "tvmet/AliasProxy.h"
+ * \brief Assign proxy for alias Matrices and Vectors.
+ *
+ *        A short lived object to provide simplified alias syntax.
+ *        Only the friend function alias is allowed to create
+ *        such a object. The proxy calls the appropriate member
+ *        alias_xyz() which have to use temporaries to avoid
+ *        overlapping memory regions.
+ * \sa alias
+ * \sa Some Notes \ref alias
+ * \note Thanks to ublas-dev group, where the principle idea
+ *       comes from.
+ */
+template<class E>
+class AliasProxy
+{
+  AliasProxy(const AliasProxy&);
+  AliasProxy& operator=(const AliasProxy&);
+
+  friend AliasProxy<E> alias<>(E& expr);
+
+public:
+  AliasProxy(E& expr) : m_expr(expr) { }
+
+
+  template<class E2>
+  E& operator=(const E2& expr) {
+    return m_expr.alias_assign(expr);
+  }
+
+  template<class E2>
+  E& operator+=(const E2& expr) {
+    return m_expr.alias_add_eq(expr);
+  }
+
+  template<class E2>
+  E& operator-=(const E2& expr) {
+    return m_expr.alias_sub_eq(expr);
+  }
+
+  template<class E2>
+  E& operator*=(const E2& expr) {
+    return m_expr.alias_mul_eq(expr);
+  }
+
+  template<class E2>
+  E& operator/=(const E2& expr) {
+    return m_expr.alias_div_eq(expr);
+  }
+
+private:
+  E&						m_expr;
+};
+
+
+#if 0
+namespace element_wise {
+// \todo to write
+template<class E, class E2>
+E& operator/=(AliasProxy<E>& proxy, const E2& rhs) {
+  return proxy.div_upd(rhs);
+}
+
+}
+#endif
+
+
+} // namespace tvmet
+
+
+#endif /* TVMET_ALIAS_PROXY_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/BinaryFunctionals.h b/tvmet-1.7.1/include/tvmet/BinaryFunctionals.h
new file mode 100644
index 0000000..eaf1ca5
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/BinaryFunctionals.h
@@ -0,0 +1,303 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: BinaryFunctionals.h,v 1.19 2004/10/04 11:40:46 opetzold Exp $
+ */
+
+#ifndef TVMET_BINARY_FUNCTIONAL_H
+#define TVMET_BINARY_FUNCTIONAL_H
+
+namespace tvmet {
+
+
+/**
+ * \class Fcnl_assign BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
+ * \brief Binary operator for assign operations.
+ *
+ * Unfortunally we have sometimes to cast on assign operations e.g.,
+ * on assign on different POD. So we avoid warnings.
+ */
+template <class T1, class T2>
+struct Fcnl_assign : public BinaryFunctional {
+  static inline
+  void apply_on(T1& _tvmet_restrict lhs, T2 rhs) {
+    lhs = static_cast<T1>(rhs);
+  }
+
+  static
+  void print_xpr(std::ostream& os, std::size_t l=0) {
+    os << IndentLevel(l) << "fcnl_assign<T1="
+       << typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"
+       << std::endl;
+  }
+};
+
+
+/** \class Fcnl_add_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_sub_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_mul_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_div_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_mod_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_xor_eq		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_and_eq		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_or_eq		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_shl_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_shr_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class T1, class T2>						\
+struct Fcnl_##NAME : public BinaryFunctional {				\
+  typedef void						value_type;	\
+									\
+  static inline								\
+  void apply_on(T1& _tvmet_restrict lhs, T2 rhs) {			\
+    lhs OP rhs;								\
+  }									\
+									\
+  static								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l)						\
+       << "Fcnl_" << #NAME << "<T1="					\
+       << typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"	\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(add_eq, +=)
+TVMET_IMPLEMENT_MACRO(sub_eq, -=)
+TVMET_IMPLEMENT_MACRO(mul_eq, *=)
+TVMET_IMPLEMENT_MACRO(div_eq, /=)
+TVMET_IMPLEMENT_MACRO(mod_eq, %=)
+TVMET_IMPLEMENT_MACRO(xor_eq, ^=)
+TVMET_IMPLEMENT_MACRO(and_eq, &=)
+TVMET_IMPLEMENT_MACRO(or_eq, |=)
+TVMET_IMPLEMENT_MACRO(shl_eq, <<=)
+TVMET_IMPLEMENT_MACRO(shr_eq, >>=)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/** \class Fcnl_add 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_sub 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_mul 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_div 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_mod 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_bitxor		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_bitand		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_bitor		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_shl 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_shr 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class T1, class T2>						\
+struct Fcnl_##NAME : public BinaryFunctional {				\
+  typedef typename  PromoteTraits<T1, T2>::value_type	value_type;	\
+  									\
+  static inline 							\
+  value_type apply_on(T1 lhs, T2 rhs) {					\
+    return lhs OP rhs;							\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l)						\
+       << "Fcnl_" << #NAME << "<T1="					\
+       << typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"	\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(add, +)
+TVMET_IMPLEMENT_MACRO(sub, -)
+TVMET_IMPLEMENT_MACRO(mul, *)
+TVMET_IMPLEMENT_MACRO(div, /)
+TVMET_IMPLEMENT_MACRO(mod, %)
+TVMET_IMPLEMENT_MACRO(bitxor, ^)
+TVMET_IMPLEMENT_MACRO(bitand, &)
+TVMET_IMPLEMENT_MACRO(bitor, |)
+TVMET_IMPLEMENT_MACRO(shl, <<)
+TVMET_IMPLEMENT_MACRO(shr, >>)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/** \class Fcnl_greater 	BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_greater_eq 	BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_less 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_less_eq 	BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_not_eq 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_and 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_or 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class T1, class T2>						\
+struct Fcnl_##NAME : public BinaryFunctional {				\
+  typedef bool						value_type;	\
+  									\
+  static inline								\
+  bool apply_on(T1 lhs, T2 rhs) {					\
+    return lhs OP rhs;							\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l)						\
+       << "Fcnl_" << #NAME << "<T1="					\
+       << typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"	\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/** \class Fcnl_atan2 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_fmod 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_pow 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template <class T1, class T2>						\
+struct Fcnl_##NAME : public BinaryFunctional {				\
+  typedef typename PromoteTraits<T1, T2>::value_type	value_type;	\
+									\
+  static inline 							\
+  value_type apply_on(T1 lhs, T2 rhs) {					\
+    return TVMET_STD_SCOPE(NAME)(lhs, rhs);				\
+  }									\
+   									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l)						\
+       << "Fcnl_" << #NAME << "<T1="					\
+       << typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"	\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(pow)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/** \class Fcnl_drem 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_hypot 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_jn 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+/** \class Fcnl_yn 		BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template <class T1, class T2>						\
+struct Fcnl_##NAME : public BinaryFunctional {				\
+  typedef typename PromoteTraits<T1, T2>::value_type	value_type;	\
+									\
+  static inline 							\
+  value_type apply_on(T1 lhs, T2 rhs) {					\
+    return TVMET_GLOBAL_SCOPE(NAME)(lhs, rhs);				\
+  }									\
+   									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l)						\
+       << "Fcnl_" << #NAME << "<T1="					\
+       << typeid(T1).name() << ", T2=" << typeid(T2).name() << ">,"	\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/**
+ * \class Fcnl_polar BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
+ * \brief %Functional for polar.
+ */
+template <class T1, class T2> struct Fcnl_polar : public BinaryFunctional { };
+
+
+/**
+ * \class Fcnl_polar<T,T> BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
+ * \brief %Functional for polar.
+ * \note  This functional is partialy specialized due to the declaration
+ *        of %polar in namespace std <tt>complex<T> polar(T, T)</tt>.
+ *        This means especially that type promotion isn't avaible here.
+ */
+template <class T>
+struct Fcnl_polar<T,T> : public BinaryFunctional {
+  typedef std::complex<T>                               value_type;
+
+  static inline
+  value_type apply_on(T lhs, T rhs) {
+    return std::polar(lhs, rhs);
+  }
+
+  static
+  void print_xpr(std::ostream& os, std::size_t l=0) {
+    os << IndentLevel(l) << "Fcnl_polar<T1="
+       << typeid(T).name() << ", T2=" << typeid(T).name() << ">,"
+       << std::endl;
+  }
+};
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/**
+ * \class Fcnl_swap BinaryFunctionals.h "tvmet/BinaryFunctionals.h"
+ * \brief Binary operator for swapping values using temporaries.
+ * \todo check for std::swap implementation; todo before LUdecomp
+ */
+template <class T1, class T2>
+struct Fcnl_swap : public BinaryFunctional {
+  static inline
+  void apply_on(T1& _tvmet_restrict lhs, T2& _tvmet_restrict rhs) {
+    typedef typename  PromoteTraits<T1, T2>::value_type	temp_type;
+
+    temp_type 						temp(lhs);
+    lhs = static_cast<T1>(rhs);
+    rhs = static_cast<T2>(temp);
+  }
+
+  static
+  void print_xpr(std::ostream& os, std::size_t l=0) {
+    os << IndentLevel(l) << "Fcnl_swap<T1="
+       << typeid(T1).name() << ", T2" << typeid(T2).name() << ">,"
+       << std::endl;
+  }
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_BINARY_FUNCTIONAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/CommaInitializer.h b/tvmet-1.7.1/include/tvmet/CommaInitializer.h
new file mode 100644
index 0000000..bb3c640
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/CommaInitializer.h
@@ -0,0 +1,163 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: CommaInitializer.h,v 1.14 2005/03/02 12:14:22 opetzold Exp $
+ */
+
+#ifndef TVMET_COMMA_INITIALIZER_H
+#define TVMET_COMMA_INITIALIZER_H
+
+#include <tvmet/CompileTimeError.h>
+
+namespace tvmet {
+
+
+/**
+ * \class CommaInitializer CommaInitializer.h "tvmet/CommaInitializer.h"
+ * \brief Initialize classes using a comma separated lists.
+ *
+ * The comma operator is called when it appears next to an object of
+ * the type the comma is defined for. However, "operator," is not called
+ * for function argument lists, only for objects that are out in the open,
+ * separated by commas (Thinking C++
+ * <a href=http://www.ida.liu.se/~TDDA14/online/v1ticpp/Chapter12.html>
+ * Ch.12: Operator comma</a>).
+ *
+ * This implementation uses the same technique as described in Todd Veldhuizen
+ * Techniques for Scientific C++
+ * <a href=http://extreme.indiana.edu/~tveldhui/papers/techniques/techniques01.html#l43>
+ * chapter 1.11 Comma overloading</a>.
+ *
+ * The initializer list is avaible after instanciation of the object,
+ * therefore use it like:
+ * \code
+ * vector3d t;
+ * t = 1.0, 2.0, 3.0;
+ * \endcode
+ * It's evaluated to (((t = 1.0), 2.0), 3.0)
+ *
+ * For matrizes the initilization is done row wise.
+ *
+ * If the comma separted list of values longer then the size of the vector
+ * or matrix a compile time error will occour. Otherwise the pending values
+ * will be written random into the memory.
+ *
+ */
+template<class Obj, std::size_t LEN>
+class CommaInitializer
+{
+  CommaInitializer();
+  CommaInitializer& operator=(const CommaInitializer&);
+
+private:
+  /**
+   * \class Initializer
+   * \brief Helper fo recursive overloaded comma operator.
+   */
+  template<class T, std::size_t N> class Initializer
+  {
+    Initializer();
+    Initializer& operator=(const Initializer&);
+
+  public:
+    typedef T						value_type;
+    typedef T*						iterator;
+
+  public:
+    Initializer(iterator iter) : m_iter(iter) { }
+
+    /** Overloads the comma operator for recursive assign values from comma
+	separated list. */
+    Initializer<value_type, N+1> operator,(value_type rhs)
+    {
+      TVMET_CT_CONDITION(N < LEN, CommaInitializerList_is_too_long)
+      *m_iter = rhs;
+      return Initializer<value_type, N+1>(m_iter + 1);
+    }
+
+  private:
+    iterator 						m_iter;
+  };
+
+public:
+  typedef typename Obj::value_type 			value_type;
+  typedef value_type*					iterator;
+
+public:
+  CommaInitializer(const CommaInitializer& rhs)
+    : m_object(rhs.m_object),
+      m_data(rhs.m_data),
+      m_wipeout_on_destruct(true)
+  {
+    rhs.disable();
+  }
+
+  /** Constructor used by Vector or Matrix operator(value_type rhs) */
+  CommaInitializer(Obj& obj, value_type x)
+    : m_object(obj),
+      m_data(x),
+      m_wipeout_on_destruct(true)
+  { }
+
+  /** Destructs and assigns the comma separated value. */
+  ~CommaInitializer() {
+    if(m_wipeout_on_destruct) m_object.assign_value(m_data);
+  }
+
+  /** Overloaded comma operator, called only once for the first occoured comma. This
+      means the first value is assigned by %operator=() and the 2nd value after the
+      comma. Therfore we call the %Initializer::operator,() for the list starting
+      after the 2nd. */
+  Initializer<value_type, 2> operator,(value_type rhs);
+
+  void disable() const { m_wipeout_on_destruct = false; }
+
+private:
+  Obj& 							m_object;
+  value_type 						m_data;
+  mutable bool 						m_wipeout_on_destruct;
+};
+
+
+/*
+ * Implementation
+ */
+template<class Obj, std::size_t LEN>
+typename CommaInitializer<Obj, LEN>::template Initializer<typename Obj::value_type, 2>
+CommaInitializer<Obj, LEN>::operator,(typename Obj::value_type rhs)
+{
+  m_wipeout_on_destruct = false;
+  iterator iter1 = m_object.data();
+  *iter1         = m_data;
+  iterator iter2 = iter1 + 1;
+  *iter2         = rhs;
+  return Initializer<value_type, 2>(iter2 + 1);
+}
+
+
+
+} // namespace tvmet
+
+
+#endif //  TVMET_COMMA_INITIALIZER_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/CompileTimeError.h b/tvmet-1.7.1/include/tvmet/CompileTimeError.h
new file mode 100644
index 0000000..9be1bb1
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/CompileTimeError.h
@@ -0,0 +1,59 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: CompileTimeError.h,v 1.7 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#ifndef TVMET_COMPILE_TIME_ERROR_H
+#define TVMET_COMPILE_TIME_ERROR_H
+
+namespace tvmet {
+
+/**
+ * \class CompileTimeError CompileTimeError.h "tvmet/CompileTimeError.h"
+ * \brief Compile Time Assertation classes.
+ */
+template<bool> struct CompileTimeError;
+
+/**
+ * \class CompileTimeError<true> CompileTimeError.h "tvmet/CompileTimeError.h"
+ * \brief Specialized Compile Time Assertation for successfully condition.
+ * This results in a compiler pass.
+ */
+template<> struct CompileTimeError<true> { };
+
+
+/**
+ * \def TVMET_CT_CONDITION(XPR, MSG)
+ * \brief Simplify the Compile Time Assertation by using an expression
+ * Xpr and an error message MSG.
+ */
+#define TVMET_CT_CONDITION(XPR, MSG) {				\
+  CompileTimeError<(XPR)> tvmet_ERROR_##MSG;			\
+  (void)tvmet_ERROR_##MSG;					\
+}
+
+} // namespace tvmet
+
+#endif // TVMET_COMPILE_TIME_ERROR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/Extremum.h b/tvmet-1.7.1/include/tvmet/Extremum.h
new file mode 100644
index 0000000..f0b5f05
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Extremum.h
@@ -0,0 +1,107 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Extremum.h,v 1.6 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#ifndef TVMET_EXTREMUM_H
+#define TVMET_EXTREMUM_H
+
+namespace tvmet {
+
+
+/**
+ * \class matrix_tag Extremum.h "tvmet/Extremum.h"
+ * \brief For use with Extremum to simplify max handling.
+ * This allows the min/max functions to return an Extremum object.
+ */
+struct matrix_tag { };
+
+
+/**
+ * \class vector_tag Extremum.h "tvmet/Extremum.h"
+ * \brief For use with Extremum to simplify max handling.
+ * This allows the min/max functions to return an Extremum object.
+ */
+struct vector_tag { };
+
+
+/**
+ * \class Extremum Extremum.h "tvmet/Extremum.h"
+ * \brief Generell class for storing extremums determined by min/max.
+ */
+template<class T1, class T2, class Tag>
+class Extremum { };
+
+
+/**
+ * \class Extremum<T1, T2, vector_tag> Extremum.h "tvmet/Extremum.h"
+ * \brief Partial specialzed for vectors to store extremums by value and index.
+ */
+template<class T1, class T2>
+class Extremum<T1, T2, vector_tag>
+{
+public:
+  typedef T1					value_type;
+  typedef T2					index_type;
+
+public:
+  Extremum(value_type value, index_type index)
+    : m_value(value), m_index(index) { }
+  value_type value() const { return m_value; }
+  index_type index() const { return m_index; }
+
+private:
+  value_type 					m_value;
+  index_type 					m_index;
+};
+
+
+/**
+ * \class Extremum<T1, T2, matrix_tag> Extremum.h "tvmet/Extremum.h"
+ * \brief Partial specialzed for matrix to store extremums by value, row and column.
+ */
+template<class T1, class T2>
+class Extremum<T1, T2, matrix_tag>
+{
+public:
+  typedef T1					value_type;
+  typedef T2					index_type;
+
+public:
+  Extremum(value_type value, index_type row, index_type col)
+    : m_value(value), m_row(row), m_col(col) { }
+  value_type value() const { return m_value; }
+  index_type row() const { return m_row; }
+  index_type col() const { return m_col; }
+
+private:
+  value_type 					m_value;
+  index_type 					m_row, m_col;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_EXTREMUM_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/Functional.h b/tvmet-1.7.1/include/tvmet/Functional.h
new file mode 100644
index 0000000..3aa7579
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Functional.h
@@ -0,0 +1,87 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Functional.h,v 1.7 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_FUNCTIONAL_H
+#define TVMET_FUNCTIONAL_H
+
+#include <tvmet/TypePromotion.h>
+
+namespace tvmet {
+
+
+/**
+ * \class Functional Functional.h "tvmet/Functional.h"
+ * \brief Base class for all binary und unary functionals.
+ *
+ * All functional operators and functions have a static apply
+ * member function for evaluating the expressions inside.
+ */
+struct Functional { };
+
+
+/**
+ * \class BinaryFunctional Functional.h "tvmet/Functional.h"
+ * \brief Base class for all binary functions.
+ * \note Used for collecting classes for doxygen.
+ */
+struct BinaryFunctional : public Functional { };
+
+
+/**
+ * \class UnaryFunctional Functional.h "tvmet/Functional.h"
+ * \brief Base class for all unary functions.
+ * \note Used for collecting classes for doxygen.
+ */
+struct UnaryFunctional : public Functional { };
+
+
+/*
+ * some macro magic need below
+ */
+
+/**
+ * \def TVMET_STD_SCOPE(x)
+ * \brief Simple macro to allow using macros for namespace std functions.
+ */
+#define TVMET_STD_SCOPE(x) std::x
+
+
+/**
+ * \def TVMET_GLOBAL_SCOPE(x)
+ * \brief Simple macro to allow using macros for global namespace functions.
+ */
+#define TVMET_GLOBAL_SCOPE(x) ::x
+
+
+} // namespace tvmet
+
+
+#include <tvmet/BinaryFunctionals.h>
+#include <tvmet/UnaryFunctionals.h>
+
+
+#endif // TVMET_FUNCTIONAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/Io.h b/tvmet-1.7.1/include/tvmet/Io.h
new file mode 100644
index 0000000..de7905c
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Io.h
@@ -0,0 +1,68 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Io.h,v 1.3 2004/04/30 16:03:38 opetzold Exp $
+ */
+
+#ifndef TVMET_IO_H
+#define TVMET_IO_H
+
+namespace tvmet {
+
+/**
+ * \class IoPrintHelper Io.h "tvmet/Io.h"
+ * \brief Determines the number of digits regarding the sign of the
+ *        container.
+ *        This class is nesessary due to the complex type and the
+ *        function min(), which are not defined for this type.
+ *        So we have to dispatch between pod and complex types
+ *        to get an information about the extra space for signs.
+ */
+template<class C>
+class IoPrintHelper {
+  IoPrintHelper();
+  IoPrintHelper(const IoPrintHelper&);
+  IoPrintHelper& operator=(const IoPrintHelper&);
+
+private:
+  static std::streamsize width(const C& e) {
+    std::streamsize w = static_cast<std::streamsize>(std::log10(max(abs(e)))+1);
+    return w > 0 ? w : 0;
+  }
+
+public:
+  static std::streamsize width(dispatch<true>, const C& e) {
+    return width(e);
+  }
+  static std::streamsize width(dispatch<false>, const C& e) {
+    std::streamsize w = width(e);
+    if(min(e) < 0) return w+1;
+    else return w;
+  }
+};
+
+
+};
+
+#endif /* TVMET_IO_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/Makefile.am b/tvmet-1.7.1/include/tvmet/Makefile.am
new file mode 100644
index 0000000..f9c9bfe
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Makefile.am
@@ -0,0 +1,45 @@
+# $Id: Makefile.am,v 1.10 2004/04/24 11:59:55 opetzold Exp $
+
+SUBDIRS  = \
+	config \
+	meta \
+	loop \
+	util \
+	xpr
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)
+
+libtvmetinclude_HEADERS = \
+	config.h \
+	tvmet.h \
+	AliasProxy.h \
+	BinaryFunctionals.h \
+	CompileTimeError.h \
+	CommaInitializer.h \
+	Extremum.h \
+	Functional.h \
+	Io.h \
+	Matrix.h \
+	MatrixImpl.h \
+	MatrixFunctions.h \
+	MatrixBinaryFunctions.h \
+	MatrixUnaryFunctions.h \
+	MatrixOperators.h \
+	MatrixEval.h \
+	NumericTraits.h \
+	TypePromotion.h \
+	RunTimeError.h \
+	TvmetBase.h \
+	UnaryFunctionals.h \
+	Vector.h \
+	VectorImpl.h \
+	VectorEval.h \
+	VectorFunctions.h \
+	VectorBinaryFunctions.h \
+	VectorUnaryFunctions.h \
+	VectorOperators.h
+
+DISTCLEANFILES = config.h
+
+dist-hook:
+	rm -f $(distdir)/config.h
diff --git a/tvmet-1.7.1/include/tvmet/Makefile.in b/tvmet-1.7.1/include/tvmet/Makefile.in
new file mode 100644
index 0000000..983df95
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Makefile.in
@@ -0,0 +1,548 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.10 2004/04/24 11:59:55 opetzold Exp $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/tvmet
+DIST_COMMON = $(libtvmetinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+am__installdirs = "$(DESTDIR)$(libtvmetincludedir)"
+libtvmetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtvmetinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = \
+	config \
+	meta \
+	loop \
+	util \
+	xpr
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)
+libtvmetinclude_HEADERS = \
+	config.h \
+	tvmet.h \
+	AliasProxy.h \
+	BinaryFunctionals.h \
+	CompileTimeError.h \
+	CommaInitializer.h \
+	Extremum.h \
+	Functional.h \
+	Io.h \
+	Matrix.h \
+	MatrixImpl.h \
+	MatrixFunctions.h \
+	MatrixBinaryFunctions.h \
+	MatrixUnaryFunctions.h \
+	MatrixOperators.h \
+	MatrixEval.h \
+	NumericTraits.h \
+	TypePromotion.h \
+	RunTimeError.h \
+	TvmetBase.h \
+	UnaryFunctionals.h \
+	Vector.h \
+	VectorImpl.h \
+	VectorEval.h \
+	VectorFunctions.h \
+	VectorBinaryFunctions.h \
+	VectorUnaryFunctions.h \
+	VectorOperators.h
+
+DISTCLEANFILES = config.h
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/tvmet/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/tvmet/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-libtvmetincludeHEADERS: $(libtvmetinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libtvmetincludedir)" || $(mkdir_p) "$(DESTDIR)$(libtvmetincludedir)"
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(libtvmetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  $(libtvmetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+uninstall-libtvmetincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (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):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	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; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if (etags --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	else \
+	  include_option=--include; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && \
+	      tags="$$tags $$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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || mkdir "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="../$(top_distdir)" \
+	        distdir="../$(distdir)/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(libtvmetincludedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-libtvmetincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libtvmetincludeHEADERS
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-libtvmetincludeHEADERS install-man \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am uninstall-info-am \
+	uninstall-libtvmetincludeHEADERS
+
+
+dist-hook:
+	rm -f $(distdir)/config.h
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/Matrix.h b/tvmet-1.7.1/include/tvmet/Matrix.h
new file mode 100644
index 0000000..74cd1f8
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Matrix.h
@@ -0,0 +1,475 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Matrix.h,v 1.54 2005/03/02 12:12:51 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_H
+#define TVMET_MATRIX_H
+
+#include <iterator>					// reverse_iterator
+
+#include <tvmet/tvmet.h>
+#include <tvmet/TypePromotion.h>
+#include <tvmet/CommaInitializer.h>
+#include <tvmet/RunTimeError.h>
+
+#include <tvmet/xpr/Matrix.h>
+#include <tvmet/xpr/MatrixRow.h>
+#include <tvmet/xpr/MatrixCol.h>
+#include <tvmet/xpr/MatrixDiag.h>
+
+namespace tvmet {
+
+
+/* forwards */
+template<class T, std::size_t Rows, std::size_t Cols> class Matrix;
+template<class T,
+	 std::size_t RowsBgn, std::size_t RowsEnd,
+	 std::size_t ColsBgn, std::size_t ColsEnd,
+	 std::size_t RowStride, std::size_t ColStride /*=1*/>
+class MatrixSliceConstReference; // unused here; for me only
+
+
+/**
+ * \class MatrixConstReference Matrix.h "tvmet/Matrix.h"
+ * \brief value iterator for ET
+ */
+template<class T, std::size_t NRows, std::size_t NCols>
+class MatrixConstReference
+  : public TvmetBase < MatrixConstReference<T, NRows, NCols> >
+{
+public:
+  typedef T						value_type;
+  typedef T*						pointer;
+  typedef const T*					const_pointer;
+
+  /** Dimensions. */
+  enum {
+    Rows = NRows,			/**< Number of rows. */
+    Cols = NCols,			/**< Number of cols. */
+    Size = Rows * Cols			/**< Complete Size of Matrix. */
+  };
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops       = Rows * Cols
+  };
+
+private:
+  MatrixConstReference();
+  MatrixConstReference& operator=(const MatrixConstReference&);
+
+public:
+  /** Constructor. */
+  explicit MatrixConstReference(const Matrix<T, Rows, Cols>& rhs)
+    : m_data(rhs.data())
+  { }
+
+  /** Constructor by a given memory pointer. */
+  explicit MatrixConstReference(const_pointer data)
+    : m_data(data)
+  { }
+
+public: // access operators
+  /** access by index. */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Rows) && (j < Cols), "MatrixConstReference Bounce Violation")
+    return m_data[i * Cols + j];
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l)
+       << "MatrixConstReference[O=" << ops << "]<"
+       << "T=" << typeid(value_type).name() << ">,"
+       << std::endl;
+  }
+
+private:
+  const_pointer _tvmet_restrict 			m_data;
+};
+
+
+/**
+ * \class Matrix Matrix.h "tvmet/Matrix.h"
+ * \brief A tiny matrix class.
+ *
+ * The array syntax A[j][j] isn't supported here. The reason is that
+ * operator[] always takes exactly one parameter, but operator() can
+ * take any number of parameters (in the case of a rectangular matrix,
+ * two paramters are needed). Therefore the cleanest way to do it is
+ * with operator() rather than with operator[]. \see C++ FAQ Lite 13.8
+ */
+template<class T, std::size_t NRows, std::size_t NCols>
+class Matrix
+{
+public:
+  /** Data type of the tvmet::Matrix. */
+  typedef T						value_type;
+
+  /** Reference type of the tvmet::Matrix data elements. */
+  typedef T&     					reference;
+
+  /** const reference type of the tvmet::Matrix data elements. */
+  typedef const T&     					const_reference;
+
+  /** STL iterator interface. */
+  typedef T*     					iterator;
+
+  /** STL const_iterator interface. */
+  typedef const T*     					const_iterator;
+
+  /** STL reverse iterator interface. */
+  typedef std::reverse_iterator<iterator> 		reverse_iterator;
+
+  /** STL const reverse iterator interface. */
+  typedef std::reverse_iterator<const_iterator> 	const_reverse_iterator;
+
+public:
+  /** Dimensions. */
+  enum {
+    Rows = NRows,			/**< Number of rows. */
+    Cols = NCols,			/**< Number of cols. */
+    Size = Rows * Cols			/**< Complete Size of Matrix. */
+  };
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_assign = Rows * Cols,
+    ops        = ops_assign,
+    use_meta   = ops < TVMET_COMPLEXITY_M_ASSIGN_TRIGGER ? true : false
+  };
+
+public: // STL  interface
+  /** STL iterator interface. */
+  iterator begin() { return m_data; }
+
+  /** STL iterator interface. */
+  iterator end() { return m_data + Size; }
+
+  /** STL const_iterator interface. */
+  const_iterator begin() const { return m_data; }
+
+  /** STL const_iterator interface. */
+  const_iterator end() const { return m_data + Size; }
+
+  /** STL reverse iterator interface reverse begin. */
+  reverse_iterator rbegin() { return reverse_iterator( end() ); }
+
+  /** STL const reverse iterator interface reverse begin. */
+  const_reverse_iterator rbegin() const {
+    return const_reverse_iterator( end() );
+  }
+
+  /** STL reverse iterator interface reverse end. */
+  reverse_iterator rend() { return reverse_iterator( begin() ); }
+
+  /** STL const reverse iterator interface reverse end. */
+  const_reverse_iterator rend() const {
+    return const_reverse_iterator( begin() );
+  }
+
+  /** The size of the matrix. */
+  static std::size_t size() { return Size; }
+
+  /** STL vector max_size() - returns allways rows()*cols(). */
+  static std::size_t max_size() { return Size; }
+
+  /** STL vector empty() - returns allways false. */
+  static bool empty() { return false; }
+
+public:
+  /** The number of rows of matrix. */
+  static std::size_t rows() { return Rows; }
+
+  /** The number of columns of matrix. */
+  static std::size_t cols() { return Cols; }
+
+public:
+  /** Default Destructor */
+  ~Matrix() {
+#if defined(TVMET_DYNAMIC_MEMORY)
+    delete [] m_data;
+#endif
+  }
+
+  /** Default Constructor. The allocated memory region isn't cleared. If you want
+   a clean use the constructor argument zero. */
+  explicit Matrix()
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  { }
+
+  /** Copy Constructor, not explicit! */
+  Matrix(const Matrix& rhs)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    *this = XprMatrix<ConstReference, Rows, Cols>(rhs.const_ref());
+  }
+
+  /**
+   * Constructor with STL iterator interface. The data will be copied into the matrix
+   * self, there isn't any stored reference to the array pointer.
+   */
+  template<class InputIterator>
+  explicit Matrix(InputIterator first, InputIterator last)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_RT_CONDITION(static_cast<std::size_t>(std::distance(first, last)) <= Size,
+		       "InputIterator doesn't fits in size" )
+    std::copy(first, last, m_data);
+  }
+
+  /**
+   * Constructor with STL iterator interface. The data will be copied into the matrix
+   * self, there isn't any stored reference to the array pointer.
+   */
+  template<class InputIterator>
+  explicit Matrix(InputIterator first, std::size_t sz)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_RT_CONDITION(sz <= Size, "InputIterator doesn't fits in size" )
+    std::copy(first, first + sz, m_data);
+  }
+
+  /** Construct the matrix by value. */
+  explicit Matrix(value_type rhs)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    typedef XprLiteral<value_type> expr_type;
+    *this = XprMatrix<expr_type, Rows, Cols>(expr_type(rhs));
+  }
+
+  /** Construct a matrix by expression. */
+  template<class E>
+  explicit Matrix(const XprMatrix<E, Rows, Cols>& e)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    *this = e;
+  }
+
+  /** assign a value_type on array, this can be used for a single value
+      or a comma separeted list of values. */
+  CommaInitializer<Matrix, Size> operator=(value_type rhs) {
+    return CommaInitializer<Matrix, Size>(*this, rhs);
+  }
+
+public: // access operators
+  value_type* _tvmet_restrict data() { return m_data; }
+  const value_type* _tvmet_restrict data() const { return m_data; }
+
+public: // index access operators
+  value_type& _tvmet_restrict operator()(std::size_t i, std::size_t j) {
+    // Note: g++-2.95.3 does have problems on typedef reference
+    TVMET_RT_CONDITION((i < Rows) && (j < Cols), "Matrix Bounce Violation")
+    return m_data[i * Cols + j];
+  }
+
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Rows) && (j < Cols), "Matrix Bounce Violation")
+    return m_data[i * Cols + j];
+  }
+
+public: // ET interface
+  typedef MatrixConstReference<T, Rows, Cols>   	ConstReference;
+
+  typedef MatrixSliceConstReference<
+    T,
+    0, Rows, 0, Cols,
+    Rows, 1
+  >							SliceConstReference;
+
+  /** Return a const Reference of the internal data */
+  ConstReference const_ref() const { return ConstReference(*this); }
+
+  /**
+   * Return a sliced const Reference of the internal data.
+   * \note Doesn't work since isn't implemented, but it is in
+   * progress. Therefore this is a placeholder. */
+  ConstReference const_sliceref() const { return SliceConstReference(*this); }
+
+  /** Return the vector as const expression. */
+  XprMatrix<ConstReference, Rows, Cols> as_expr() const {
+    return XprMatrix<ConstReference, Rows, Cols>(this->const_ref());
+  }
+
+private:
+  /** Wrapper for meta assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<true>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    meta::Matrix<Rows, Cols, 0, 0>::assign(dest, src, assign_fn);
+  }
+
+  /** Wrapper for loop assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<false>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    loop::Matrix<Rows, Cols>::assign(dest, src, assign_fn);
+  }
+
+private:
+  /** assign this to a matrix  of a different type T2 using
+      the functional assign_fn. */
+  template<class T2, class Assign>
+  void assign_to(Matrix<T2, Rows, Cols>& dest, const Assign& assign_fn) const {
+    do_assign(dispatch<use_meta>(), dest, *this, assign_fn);
+  }
+
+public:  // assign operations
+  /** assign a given matrix of a different type T2 element wise
+      to this matrix. The operator=(const Matrix&) is compiler
+      generated. */
+  template<class T2>
+  Matrix& operator=(const Matrix<T2, Rows, Cols>& rhs) {
+    rhs.assign_to(*this, Fcnl_assign<value_type, T2>());
+    return *this;
+  }
+
+  /** assign a given XprMatrix element wise to this matrix. */
+  template <class E>
+  Matrix& operator=(const XprMatrix<E, Rows, Cols>& rhs) {
+    rhs.assign_to(*this, Fcnl_assign<value_type, typename E::value_type>());
+    return *this;
+  }
+
+private:
+  template<class Obj, std::size_t LEN> friend class CommaInitializer;
+
+  /** This is a helper for assigning a comma separated initializer
+      list. It's equal to Matrix& operator=(value_type) which does
+      replace it. */
+  Matrix& assign_value(value_type rhs) {
+    typedef XprLiteral<value_type> 			expr_type;
+    *this = XprMatrix<expr_type, Rows, Cols>(expr_type(rhs));
+    return *this;
+  }
+
+public: // math operators with scalars
+  // NOTE: this meaning is clear - element wise ops even if not in ns element_wise
+  Matrix& operator+=(value_type) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator-=(value_type) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator*=(value_type) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator/=(value_type) TVMET_CXX_ALWAYS_INLINE;
+
+  Matrix& operator%=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator^=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator&=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator|=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator<<=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Matrix& operator>>=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+
+public: // math operators with matrizes
+  // NOTE: access using the operators in ns element_wise, since that's what is does
+  template <class T2> Matrix& M_add_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_sub_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_mul_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_div_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_mod_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_xor_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_and_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_or_eq (const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_shl_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& M_shr_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+
+public: // math operators with expressions
+  // NOTE: access using the operators in ns element_wise, since that's what is does
+  template <class E> Matrix& M_add_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_sub_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_mul_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_div_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_mod_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_xor_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_and_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_or_eq (const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_shl_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& M_shr_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+
+public: // aliased math operators with expressions
+  template <class T2> Matrix& alias_assign(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& alias_add_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& alias_sub_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& alias_mul_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Matrix& alias_div_eq(const Matrix<T2, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+
+  template <class E> Matrix& alias_assign(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& alias_add_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& alias_sub_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& alias_mul_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Matrix& alias_div_eq(const XprMatrix<E, Rows, Cols>&) TVMET_CXX_ALWAYS_INLINE;
+
+public: // io
+  /** Structure for info printing as Matrix<T, Rows, Cols>. */
+  struct Info : public TvmetBase<Info> {
+    std::ostream& print_xpr(std::ostream& os) const {
+      os << "Matrix<T=" << typeid(value_type).name()
+	 << ", R=" << Rows << ", C=" << Cols << ">";
+      return os;
+    }
+  };
+
+  /** Get an info object of this matrix. */
+  static Info info() { return Info(); }
+
+  /** Member function for expression level printing. */
+  std::ostream& print_xpr(std::ostream& os, std::size_t l=0) const;
+
+  /** Member function for printing internal data. */
+  std::ostream& print_on(std::ostream& os) const;
+
+private:
+  /** The data of matrix self. */
+#if defined(TVMET_DYNAMIC_MEMORY)
+  value_type*						m_data;
+#else
+  value_type 						m_data[Size];
+#endif
+};
+
+
+} // namespace tvmet
+
+#include <tvmet/MatrixImpl.h>
+#include <tvmet/MatrixFunctions.h>
+#include <tvmet/MatrixBinaryFunctions.h>
+#include <tvmet/MatrixUnaryFunctions.h>
+#include <tvmet/MatrixOperators.h>
+#include <tvmet/MatrixEval.h>
+#include <tvmet/AliasProxy.h>
+
+#endif // TVMET_MATRIX_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/MatrixBinaryFunctions.h b/tvmet-1.7.1/include/tvmet/MatrixBinaryFunctions.h
new file mode 100644
index 0000000..6a85b62
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/MatrixBinaryFunctions.h
@@ -0,0 +1,532 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixBinaryFunctions.h,v 1.12 2005/04/26 15:05:06 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_BINARY_FUNCTIONS_H
+#define TVMET_MATRIX_BINARY_FUNCTIONS_H
+
+namespace tvmet {
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+/*
+ * binary_function(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * binary_function(Matrix<T1, Rows, Cols>, XprMatrix<E, Rows, Cols>)
+ * binary_function(XprMatrix<E, Rows, Cols>, Matrix<T, Rows, Cols>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>	\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    MatrixConstReference<T1, Rows, Cols>,				\
+    MatrixConstReference<T2, Rows, Cols>				\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const Matrix<T1, Rows, Cols>& lhs, 				\
+     const Matrix<T2, Cols, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class E, class T, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const XprMatrix<E, Rows, Cols>& lhs, 				\
+     const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+									\
+template<class E, class T, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const Matrix<T, Rows, Cols>& lhs, 					\
+     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2)
+TVMET_DECLARE_MACRO(drem)
+TVMET_DECLARE_MACRO(fmod)
+TVMET_DECLARE_MACRO(hypot)
+TVMET_DECLARE_MACRO(jn)
+TVMET_DECLARE_MACRO(yn)
+TVMET_DECLARE_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_DECLARE_MACRO(polar)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * binary_function(Matrix<T, Rows, Cols>, POD)
+ */
+#define TVMET_DECLARE_MACRO(NAME, TP)					\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, TP >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral< TP >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const Matrix<T, Rows, Cols>& lhs, TP rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2, int)
+TVMET_DECLARE_MACRO(drem, int)
+TVMET_DECLARE_MACRO(fmod, int)
+TVMET_DECLARE_MACRO(hypot, int)
+TVMET_DECLARE_MACRO(jn, int)
+TVMET_DECLARE_MACRO(yn, int)
+TVMET_DECLARE_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(atan2, long long int)
+TVMET_DECLARE_MACRO(drem, long long int)
+TVMET_DECLARE_MACRO(fmod, long long int)
+TVMET_DECLARE_MACRO(hypot, long long int)
+TVMET_DECLARE_MACRO(jn, long long int)
+TVMET_DECLARE_MACRO(yn, long long int)
+TVMET_DECLARE_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_DECLARE_MACRO(atan2, float)
+TVMET_DECLARE_MACRO(drem, float)
+TVMET_DECLARE_MACRO(fmod, float)
+TVMET_DECLARE_MACRO(hypot, float)
+TVMET_DECLARE_MACRO(jn, float)
+TVMET_DECLARE_MACRO(yn, float)
+TVMET_DECLARE_MACRO(pow, float)
+
+TVMET_DECLARE_MACRO(atan2, double)
+TVMET_DECLARE_MACRO(drem, double)
+TVMET_DECLARE_MACRO(fmod, double)
+TVMET_DECLARE_MACRO(hypot, double)
+TVMET_DECLARE_MACRO(jn, double)
+TVMET_DECLARE_MACRO(yn, double)
+TVMET_DECLARE_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(atan2, long double)
+TVMET_DECLARE_MACRO(drem, long double)
+TVMET_DECLARE_MACRO(fmod, long double)
+TVMET_DECLARE_MACRO(hypot, long double)
+TVMET_DECLARE_MACRO(jn, long double)
+TVMET_DECLARE_MACRO(yn, long double)
+TVMET_DECLARE_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * complex math
+ */
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow<T, std::complex<T> >,
+    MatrixConstReference<T, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >,
+  Rows, Cols
+>
+pow(const Matrix<T, Rows, Cols>& lhs,
+    const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow< std::complex<T>, std::complex<T> >,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >,
+  Rows, Cols
+>
+pow(const Matrix<std::complex<T>, Rows, Cols>& lhs,
+    const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/**
+ * \fn pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, const T& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, T>,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral<T>
+  >,
+  Rows, Cols
+>
+pow(const Matrix<std::complex<T>, Rows, Cols>& lhs,
+    const T& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/**
+ * \fn pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, int rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, int>,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral<int>
+  >,
+  Rows, Cols
+>
+pow(const Matrix<std::complex<T>, Rows, Cols>& lhs,
+    int rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprBinOp<
+    Fcnl_polar<T, T>,
+    MatrixConstReference<T, Rows, Cols>,
+    XprLiteral<T>
+  >,
+  Rows, Cols
+>
+polar(const Matrix<T, Rows, Cols>& lhs,
+      const T& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+// to be written (atan2)
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+/*
+ * binary_function(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * binary_function(Matrix<T1, Rows, Cols>, XprMatrix<E, Rows, Cols>)
+ * binary_function(XprMatrix<E, Rows, Cols>, Matrix<T, Rows, Cols>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)						\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>		\
+inline										\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<T1, T2>,							\
+    MatrixConstReference<T1, Rows, Cols>,					\
+    MatrixConstReference<T2, Rows, Cols>					\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME(const Matrix<T1, Rows, Cols>& lhs, const Matrix<T2, Cols, Cols>& rhs) {	\
+  typedef XprBinOp <								\
+    Fcnl_##NAME<T1, T2>,							\
+    MatrixConstReference<T1, Rows, Cols>,					\
+    MatrixConstReference<T2, Rows, Cols>					\
+  >							expr_type;		\
+  return XprMatrix<expr_type, Rows, Cols>(					\
+    expr_type(lhs.const_ref(), rhs.const_ref()));				\
+}										\
+										\
+template<class E, class T, std::size_t Rows, std::size_t Cols>			\
+inline										\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME(const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    XprMatrix<E, Rows, Cols>,							\
+    MatrixConstReference<T, Rows, Cols>						\
+  > 							 expr_type;		\
+  return XprMatrix<expr_type, Rows, Cols>(					\
+    expr_type(lhs, rhs.const_ref()));						\
+}										\
+										\
+template<class E, class T, std::size_t Rows, std::size_t Cols>			\
+inline										\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<T, typename E::value_type>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME(const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  > 						 	expr_type;		\
+  return XprMatrix<expr_type, Rows, Cols>(					\
+    expr_type(lhs.const_ref(), rhs));						\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+TVMET_IMPLEMENT_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_IMPLEMENT_MACRO(polar)
+#endif
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * binary_function(Matrix<T, Rows, Cols>, POD)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, TP)					\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, TP >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral< TP >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const Matrix<T, Rows, Cols>& lhs, TP rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, TP >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs.const_ref(), XprLiteral< TP >(rhs)));			\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2, int)
+TVMET_IMPLEMENT_MACRO(drem, int)
+TVMET_IMPLEMENT_MACRO(fmod, int)
+TVMET_IMPLEMENT_MACRO(hypot, int)
+TVMET_IMPLEMENT_MACRO(jn, int)
+TVMET_IMPLEMENT_MACRO(yn, int)
+TVMET_IMPLEMENT_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(atan2, long long int)
+TVMET_IMPLEMENT_MACRO(drem, long long int)
+TVMET_IMPLEMENT_MACRO(fmod, long long int)
+TVMET_IMPLEMENT_MACRO(hypot, long long int)
+TVMET_IMPLEMENT_MACRO(jn, long long int)
+TVMET_IMPLEMENT_MACRO(yn, long long int)
+TVMET_IMPLEMENT_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(atan2, float)
+TVMET_IMPLEMENT_MACRO(drem, float)
+TVMET_IMPLEMENT_MACRO(fmod, float)
+TVMET_IMPLEMENT_MACRO(hypot, float)
+TVMET_IMPLEMENT_MACRO(jn, float)
+TVMET_IMPLEMENT_MACRO(yn, float)
+TVMET_IMPLEMENT_MACRO(pow, float)
+
+TVMET_IMPLEMENT_MACRO(atan2, double)
+TVMET_IMPLEMENT_MACRO(drem, double)
+TVMET_IMPLEMENT_MACRO(fmod, double)
+TVMET_IMPLEMENT_MACRO(hypot, double)
+TVMET_IMPLEMENT_MACRO(jn, double)
+TVMET_IMPLEMENT_MACRO(yn, double)
+TVMET_IMPLEMENT_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(atan2, long double)
+TVMET_IMPLEMENT_MACRO(drem, long double)
+TVMET_IMPLEMENT_MACRO(fmod, long double)
+TVMET_IMPLEMENT_MACRO(hypot, long double)
+TVMET_IMPLEMENT_MACRO(jn, long double)
+TVMET_IMPLEMENT_MACRO(yn, long double)
+TVMET_IMPLEMENT_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * complex math
+ */
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+/**
+ * \fn pow(const Matrix<T, Rows, Cols>& lhs, const std::complex<T>& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow<T, std::complex<T> >,
+    MatrixConstReference<T, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >,
+  Rows, Cols
+>
+pow(const Matrix<T, Rows, Cols>& lhs, const std::complex<T>& rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<T, std::complex<T> >,
+    MatrixConstReference<T, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+      expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));
+}
+
+
+/**
+ * \fn pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, const std::complex<T>& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow< std::complex<T>, std::complex<T> >,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >,
+  Rows, Cols
+>
+pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, const std::complex<T>& rhs) {
+  typedef XprBinOp<
+    Fcnl_pow< std::complex<T>, std::complex<T> >,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+      expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));
+}
+
+
+/**
+ * \fn pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, const T& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, T>,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral<T>
+  >,
+  Rows, Cols
+>
+pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, const T& rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<std::complex<T>, T>,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral<T>
+  >							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+      expr_type(lhs.const_ref(), XprLiteral<T>(rhs)));
+}
+
+
+/**
+ * \fn pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, int rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, int>,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral<int>
+  >,
+  Rows, Cols
+>
+pow(const Matrix<std::complex<T>, Rows, Cols>& lhs, int rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<std::complex<T>, int>,
+    MatrixConstReference<std::complex<T>, Rows, Cols>,
+    XprLiteral<int>
+  >							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+      expr_type(lhs.const_ref(), XprLiteral<int>(rhs)));
+}
+
+
+/**
+ * \fn polar(const Matrix<T, Rows, Cols>& lhs, const T& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprBinOp<
+    Fcnl_polar<T, T>,
+    MatrixConstReference<T, Rows, Cols>,
+    XprLiteral<T>
+  >,
+  Rows, Cols
+>
+polar(const Matrix<T, Rows, Cols>& lhs, const T& rhs) {
+  typedef XprBinOp<
+    Fcnl_polar<T, T>,
+    MatrixConstReference<T, Rows, Cols>,
+    XprLiteral<T>
+  >							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+      expr_type(lhs.const_ref(), XprLiteral<T>(rhs)));
+}
+
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+// to be written (atan2)
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+
+
+} // namespace tvmet
+
+#endif // TVMET_MATRIX_BINARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/MatrixEval.h b/tvmet-1.7.1/include/tvmet/MatrixEval.h
new file mode 100644
index 0000000..c4d13f9
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/MatrixEval.h
@@ -0,0 +1,386 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixEval.h,v 1.14 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_EVAL_H
+#define TVMET_MATRIX_EVAL_H
+
+namespace tvmet {
+
+
+/**
+ * \fn bool all_elements(const XprMatrix<E, Rows, Cols>& e)
+ * \brief check on statements for all elements
+ * \ingroup _unary_function
+ * This is for use with boolean operators like
+ * \par Example:
+ * \code
+ * all_elements(matrix > 0) {
+ *     // true branch
+ * } else {
+ *     // false branch
+ * }
+ * \endcode
+ * \sa \ref compare
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+bool all_elements(const XprMatrix<E, Rows, Cols>& e) {
+  return meta::Matrix<Rows, Cols, 0, 0>::all_elements(e);
+}
+
+
+/**
+ * \fn bool any_elements(const XprMatrix<E, Rows, Cols>& e)
+ * \brief check on statements for any elements
+ * \ingroup _unary_function
+ * This is for use with boolean operators like
+ * \par Example:
+ * \code
+ * any_elements(matrix > 0) {
+ *     // true branch
+ * } else {
+ *     // false branch
+ * }
+ * \endcode
+ * \sa \ref compare
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+bool any_elements(const XprMatrix<E, Rows, Cols>& e) {
+  return meta::Matrix<Rows, Cols, 0, 0>::any_elements(e);
+}
+
+
+/*
+ * trinary evaluation functions with matrizes and xpr of
+ *
+ * XprMatrix<E1, Rows, Cols> ? Matrix<T2, Rows, Cols> : Matrix<T3, Rows, Cols>
+ * XprMatrix<E1, Rows, Cols> ? Matrix<T2, Rows, Cols> : XprMatrix<E3, Rows, Cols>
+ * XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : Matrix<T3, Rows, Cols>
+ * XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : XprMatrix<E3, Rows, Cols>
+ */
+
+/**
+ * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const Matrix<T2, Rows, Cols>& m2, const Matrix<T3, Rows, Cols>& m3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class T2, class T3, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    MatrixConstReference<T2, Rows, Cols>,
+    MatrixConstReference<T3, Rows, Cols>
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E1, Rows, Cols>& e1,
+     const Matrix<T2, Rows, Cols>& m2,
+     const Matrix<T3, Rows, Cols>& m3) {
+  typedef XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    MatrixConstReference<T2, Rows, Cols>,
+    MatrixConstReference<T3, Rows, Cols>
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+    expr_type(e1, m2.const_ref(), m3.const_ref()));
+}
+
+
+/**
+ * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const Matrix<T2, Rows, Cols>& m2, const XprMatrix<E3, Rows, Cols>& e3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class T2, class E3, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    MatrixConstReference<T2, Rows, Cols>,
+    XprMatrix<E3, Rows, Cols>
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E1, Rows, Cols>& e1,
+     const Matrix<T2, Rows, Cols>& m2,
+     const XprMatrix<E3, Rows, Cols>& e3) {
+  typedef XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    MatrixConstReference<T2, Rows, Cols>,
+    XprMatrix<E3, Rows, Cols>
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+    expr_type(e1, m2.const_ref(), e3));
+}
+
+
+/**
+ * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const Matrix<T3, Rows, Cols>& m3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E2, class T3, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprMatrix<E2, Rows, Cols>,
+    MatrixConstReference<T3, Rows, Cols>
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E1, Rows, Cols>& e1,
+    const  XprMatrix<E2, Rows, Cols>& e2,
+     const Matrix<T3, Rows, Cols>& m3) {
+  typedef XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprMatrix<E2, Rows, Cols>,
+    MatrixConstReference<T3, Rows, Cols>
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+    expr_type(e1, e2, m3.const_ref()));
+}
+
+
+/**
+ * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const XprMatrix<E3, Rows, Cols>& e3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E2, class E3, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprMatrix<E2, Rows, Cols>,
+    XprMatrix<E3, Rows, Cols>
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E1, Rows, Cols>& e1,
+     const XprMatrix<E2, Rows, Cols>& e2,
+     const XprMatrix<E3, Rows, Cols>& e3) {
+  typedef XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprMatrix<E2, Rows, Cols>,
+    XprMatrix<E3, Rows, Cols>
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(e1, e2, e3));
+}
+
+
+/*
+ * trinary evaluation functions with matrizes, xpr of and POD
+ *
+ * XprMatrix<E, Rows, Cols> ? POD1 : POD2
+ * XprMatrix<E1, Rows, Cols> ? POD : XprMatrix<E3, Rows, Cols>
+ * XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : POD
+ */
+#define TVMET_IMPLEMENT_MACRO(POD)               			\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline               							\
+XprMatrix<               						\
+  XprEval<               						\
+    XprMatrix<E, Rows, Cols>,               			      	\
+    XprLiteral< POD >,               					\
+    XprLiteral< POD >               					\
+  >,                							\
+  Rows, Cols								\
+>               							\
+eval(const XprMatrix<E, Rows, Cols>& e, POD x2, POD x3) {      		\
+  typedef XprEval<               					\
+    XprMatrix<E, Rows, Cols>,               				\
+    XprLiteral< POD >,                					\
+    XprLiteral< POD >                					\
+  > 							expr_type; 	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(e, XprLiteral< POD >(x2), XprLiteral< POD >(x3))); 	\
+}               							\
+               								\
+template<class E1, class E3, std::size_t Rows, std::size_t Cols> 	\
+inline               							\
+XprMatrix<               						\
+  XprEval<               						\
+    XprMatrix<E1, Rows, Cols>,               				\
+    XprLiteral< POD >,               					\
+    XprMatrix<E3, Rows, Cols>               				\
+  >,                							\
+  Rows, Cols								\
+>               							\
+eval(const XprMatrix<E1, Rows, Cols>& e1, POD x2, const XprMatrix<E3, Rows, Cols>& e3) { \
+  typedef XprEval<               					\
+    XprMatrix<E1, Rows, Cols>,               				\
+    XprLiteral< POD >,                					\
+    XprMatrix<E3, Rows, Cols>               				\
+  > 							expr_type; 	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(e1, XprLiteral< POD >(x2), e3)); 				\
+}               							\
+               								\
+template<class E1, class E2, std::size_t Rows, std::size_t Cols>	\
+inline               							\
+XprMatrix<               						\
+  XprEval<               						\
+    XprMatrix<E1, Rows, Cols>,               				\
+    XprMatrix<E2, Rows, Cols>,               				\
+    XprLiteral< POD >               					\
+  >,                							\
+  Rows, Cols								\
+>               							\
+eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, POD x3) { \
+  typedef XprEval<               					\
+    XprMatrix<E1, Rows, Cols>,               				\
+    XprMatrix<E2, Rows, Cols>,               				\
+    XprLiteral< POD >                					\
+  > 							expr_type; 	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(e1, e2, XprLiteral< POD >(x3))); 				\
+}
+
+TVMET_IMPLEMENT_MACRO(int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(float)
+TVMET_IMPLEMENT_MACRO(double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * trinary evaluation functions with matrizes, xpr of and complex<> types
+ *
+ * XprMatrix<E, Rows, Cols> e, std::complex<T> z2, std::complex<T> z3
+ * XprMatrix<E1, Rows, Cols> e1, std::complex<T> z2, XprMatrix<E3, Rows, Cols> e3
+ * XprMatrix<E1, Rows, Cols> e1, XprMatrix<E2, Rows, Cols> e2, std::complex<T> z3
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+
+/**
+ * \fn eval(const XprMatrix<E, Rows, Cols>& e, const std::complex<T>& x2, const std::complex<T>& x3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E, std::size_t Rows, std::size_t Cols, class T>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E, Rows, Cols>,
+    XprLiteral< std::complex<T> >,
+    XprLiteral< std::complex<T> >
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E, Rows, Cols>& e, const std::complex<T>& x2, const std::complex<T>& x3) {
+  typedef XprEval<
+    XprMatrix<E, Rows, Cols>,
+    XprLiteral< std::complex<T> >,
+    XprLiteral< std::complex<T> >
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+    expr_type(e, XprLiteral< std::complex<T> >(x2), XprLiteral< std::complex<T> >(x3)));
+}
+
+
+/**
+ * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const std::complex<T>& x2, const XprMatrix<E3, Rows, Cols>& e3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E3, std::size_t Rows, std::size_t Cols, class T>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprLiteral< std::complex<T> >,
+    XprMatrix<E3, Rows, Cols>
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E1, Rows, Cols>& e1, const std::complex<T>& x2, const XprMatrix<E3, Rows, Cols>& e3) {
+  typedef XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprLiteral< std::complex<T> >,
+    XprMatrix<E3, Rows, Cols>
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+    expr_type(e1, XprLiteral< std::complex<T> >(x2), e3));
+}
+
+
+/**
+ * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const std::complex<T>& x3)
+ * \brief Evals the matrix expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E2, std::size_t Rows, std::size_t Cols, class T>
+inline
+XprMatrix<
+  XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprMatrix<E2, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  >,
+  Rows, Cols
+>
+eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const std::complex<T>& x3) {
+  typedef XprEval<
+    XprMatrix<E1, Rows, Cols>,
+    XprMatrix<E2, Rows, Cols>,
+    XprLiteral< std::complex<T> >
+  > 							expr_type;
+  return XprMatrix<expr_type, Rows, Cols>(
+    expr_type(e1, e2, XprLiteral< std::complex<T> >(x3)));
+}
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+#endif // TVMET_MATRIX_EVAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/MatrixFunctions.h b/tvmet-1.7.1/include/tvmet/MatrixFunctions.h
new file mode 100644
index 0000000..7f03994
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/MatrixFunctions.h
@@ -0,0 +1,1376 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixFunctions.h,v 1.59 2004/11/04 16:21:17 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_FUNCTIONS_H
+#define TVMET_MATRIX_FUNCTIONS_H
+
+#include <tvmet/Extremum.h>
+
+namespace tvmet {
+
+/* forwards */
+template<class T, std::size_t Sz> class Vector;
+template<class T, std::size_t Sz> class VectorConstReference;
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * function(XprMatrix<E, Rows, Cols>, Matrix<T, Rows, Cols>)
+ * function(Matrix<T, Rows, Cols>, XprMatrix<E, Rows, Cols>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>	\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    MatrixConstReference<T1, Rows, Cols>,				\
+    MatrixConstReference<T2, Rows, Cols>				\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const Matrix<T1, Rows, Cols>& lhs,				\
+      const Matrix<T2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class E, class T, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprMatrix<E, Rows, Cols>,						\
+    MatrixConstReference<T, Rows, Cols>					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E, Rows, Cols>& lhs,				\
+      const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class T, class E, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const Matrix<T, Rows, Cols>& lhs,					\
+      const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)			// per se element wise
+TVMET_DECLARE_MACRO(sub)			// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mul)			// not defined for matrizes
+  TVMET_DECLARE_MACRO(div)			// not defined for matrizes
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * function(Matrix<T, Rows, Cols>, POD)
+ * function(POD, Matrix<T, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, POD)					\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, POD >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral<POD >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const Matrix<T, Rows, Cols>& lhs, 				\
+      POD rhs) TVMET_CXX_ALWAYS_INLINE;					\
+									\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, T>,						\
+    XprLiteral< POD >,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (POD lhs, 								\
+      const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, int)
+TVMET_DECLARE_MACRO(sub, int)
+TVMET_DECLARE_MACRO(mul, int)
+TVMET_DECLARE_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, long long int)
+TVMET_DECLARE_MACRO(sub, long long int)
+TVMET_DECLARE_MACRO(mul, long long int)
+TVMET_DECLARE_MACRO(div, long long int)
+#endif
+
+TVMET_DECLARE_MACRO(add, float)
+TVMET_DECLARE_MACRO(sub, float)
+TVMET_DECLARE_MACRO(mul, float)
+TVMET_DECLARE_MACRO(div, float)
+
+TVMET_DECLARE_MACRO(add, double)
+TVMET_DECLARE_MACRO(sub, double)
+TVMET_DECLARE_MACRO(mul, double)
+TVMET_DECLARE_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, long double)
+TVMET_DECLARE_MACRO(sub, long double)
+TVMET_DECLARE_MACRO(mul, long double)
+TVMET_DECLARE_MACRO(div, long double)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(Matrix<T, Rows, Cols>, complex<T>)
+ * function(complex<T>, Matrix<T, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME)						\
+template<class T, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    MatrixConstReference< std::complex<T>, Rows, Cols>,				\
+    XprLiteral<std::complex<T> >						\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME (const Matrix< std::complex<T>, Rows, Cols>& lhs,				\
+      const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;			\
+										\
+template<class T, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    XprLiteral< std::complex<T> >,						\
+    MatrixConstReference< std::complex<T>, Rows, Cols>				\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME (const std::complex<T>& lhs,						\
+      const Matrix< std::complex<T>, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)
+TVMET_DECLARE_MACRO(sub)
+TVMET_DECLARE_MACRO(mul)
+TVMET_DECLARE_MACRO(div)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2 		// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2							// return Dim
+>
+prod(const Matrix<T1, Rows1, Cols1>& lhs,
+     const Matrix<T2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,			// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2							// return Dim
+>
+prod(const XprMatrix<E1, Rows1, Cols1>& lhs,
+     const Matrix<T2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2				// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2							// return Dim
+>
+prod(const Matrix<T1, Rows1, Cols1>& lhs,
+     const XprMatrix<E2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+XprMatrix<
+  XprMMProductTransposed<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Cols2, Rows1							// return Dim
+>
+trans_prod(const Matrix<T1, Rows1, Cols1>& lhs,
+	   const Matrix<T2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>	// Rows2 = Rows1
+XprMatrix<
+  XprMtMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Rows1, Cols2>, Cols2		// M2(Rows1, Cols2)
+  >,
+  Cols1, Cols2							// return Dim
+>
+MtM_prod(const Matrix<T1, Rows1, Cols1>& lhs,
+	 const Matrix<T2, Rows1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Rows2>
+XprMatrix<
+  XprMMtProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Rows2, Cols1>, Cols1 		// M2(Rows2, Cols1)
+  >,
+  Rows1, Rows2							// return Dim
+>
+MMt_prod(const Matrix<T1, Rows1, Cols1>& lhs,
+	 const Matrix<T2, Rows2, Cols1>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,	// M(Rows, Cols)
+    VectorConstReference<T2, Cols> 			// V
+  >,
+  Rows
+>
+prod(const Matrix<T1, Rows, Cols>& lhs,
+     const Vector<T2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, class E2, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+prod(const Matrix<T1, Rows, Cols>& lhs,
+     const XprVector<E2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, class T2, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,		// M(Rows, Cols)
+    VectorConstReference<T2, Cols> 			// V
+  >,
+  Rows
+>
+prod(const XprMatrix<E1, Rows, Cols>& lhs,
+     const Vector<T2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMtVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows,	Cols,   // M(Rows, Cols)
+    VectorConstReference<T2, Rows> 			// V
+  >,
+  Cols
+>
+Mtx_prod(const Matrix<T1, Rows, Cols>& lhs,
+	 const Vector<T2, Rows>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprMatrixTranspose<
+    MatrixConstReference<T, Rows, Cols>
+  >,
+  Cols, Rows
+>
+trans(const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+typename NumericTraits<T>::sum_type
+trace(const Matrix<T, Sz, Sz>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMatrixRow<
+    MatrixConstReference<T, Rows, Cols>,
+    Rows, Cols
+  >,
+  Cols
+>
+row(const Matrix<T, Rows, Cols>& m,
+    std::size_t no) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMatrixCol<
+    MatrixConstReference<T, Rows, Cols>,
+    Rows, Cols
+  >,
+  Rows
+>
+col(const Matrix<T, Rows, Cols>& m,
+    std::size_t no) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  XprMatrixDiag<
+    MatrixConstReference<T, Sz, Sz>,
+    Sz
+  >,
+  Sz
+>
+diag(const Matrix<T, Sz, Sz>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * min/max unary functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+Extremum<typename E::value_type, std::size_t, matrix_tag>
+maximum(const XprMatrix<E, Rows, Cols>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+Extremum<T, std::size_t, matrix_tag>
+maximum(const Matrix<T, Rows, Cols>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+Extremum<typename E::value_type, std::size_t, matrix_tag>
+minimum(const XprMatrix<E, Rows, Cols>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+Extremum<T, std::size_t, matrix_tag>
+minimum(const Matrix<T, Rows, Cols>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+typename E::value_type
+max(const XprMatrix<E, Rows, Cols>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+T max(const Matrix<T, Rows, Cols>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+typename E::value_type
+min(const XprMatrix<E, Rows, Cols>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+T min(const Matrix<T, Rows, Cols>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * other unary functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprIdentity<T, Rows, Cols>,
+  Rows, Cols
+>
+identity() TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class M>
+XprMatrix<
+  XprIdentity<
+    typename M::value_type,
+    M::Rows, M::Cols>,
+  M::Rows, M::Cols
+>
+identity() TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  MatrixConstReference<T, Rows, Cols>,
+  Rows, Cols
+>
+cmatrix_ref(const T* mem) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * function(XprMatrix<E, Rows, Cols>, Matrix<T, Rows, Cols>)
+ * function(Matrix<T, Rows, Cols>, XprMatrix<E, Rows, Cols>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)						\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>		\
+inline										\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<T1, T2>,							\
+    MatrixConstReference<T1, Rows, Cols>,					\
+    MatrixConstReference<T2, Rows, Cols>					\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME (const Matrix<T1, Rows, Cols>& lhs, const Matrix<T2, Rows, Cols>& rhs) {	\
+  typedef XprBinOp <								\
+    Fcnl_##NAME<T1, T2>,							\
+    MatrixConstReference<T1, Rows, Cols>,					\
+    MatrixConstReference<T2, Rows, Cols>					\
+  >							expr_type;		\
+  return XprMatrix<expr_type, Rows, Cols>(					\
+    expr_type(lhs.const_ref(), rhs.const_ref()));				\
+}										\
+										\
+template<class E, class T, std::size_t Rows, std::size_t Cols>			\
+inline										\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    XprMatrix<E, Rows, Cols>,							\
+    MatrixConstReference<T, Rows, Cols>						\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME (const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    XprMatrix<E, Rows, Cols>,							\
+    MatrixConstReference<T, Rows, Cols>						\
+  > 							 expr_type;		\
+  return XprMatrix<expr_type, Rows, Cols>(					\
+    expr_type(lhs, rhs.const_ref()));						\
+}										\
+										\
+template<class T, class E, std::size_t Rows, std::size_t Cols>			\
+inline										\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME (const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >	 						 expr_type;		\
+  return XprMatrix<expr_type, Rows, Cols>(					\
+    expr_type(lhs.const_ref(), rhs));						\
+}
+
+TVMET_IMPLEMENT_MACRO(add)			// per se element wise
+TVMET_IMPLEMENT_MACRO(sub)			// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mul)			// not defined for matrizes
+  TVMET_IMPLEMENT_MACRO(div)			// not defined for matrizes
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * function(Matrix<T, Rows, Cols>, POD)
+ * function(POD, Matrix<T, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, POD)				\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, POD >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral<POD >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const Matrix<T, Rows, Cols>& lhs, POD rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, POD >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral< POD >							\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs.const_ref(), XprLiteral< POD >(rhs)));		\
+}									\
+									\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, T>,						\
+    XprLiteral< POD >,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (POD lhs, const Matrix<T, Rows, Cols>& rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< POD, T>,						\
+    XprLiteral< POD >,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(XprLiteral< POD >(lhs), rhs.const_ref()));		\
+}
+
+TVMET_IMPLEMENT_MACRO(add, int)
+TVMET_IMPLEMENT_MACRO(sub, int)
+TVMET_IMPLEMENT_MACRO(mul, int)
+TVMET_IMPLEMENT_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, long long int)
+TVMET_IMPLEMENT_MACRO(sub, long long int)
+TVMET_IMPLEMENT_MACRO(mul, long long int)
+TVMET_IMPLEMENT_MACRO(div, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(add, float)
+TVMET_IMPLEMENT_MACRO(sub, float)
+TVMET_IMPLEMENT_MACRO(mul, float)
+TVMET_IMPLEMENT_MACRO(div, float)
+
+TVMET_IMPLEMENT_MACRO(add, double)
+TVMET_IMPLEMENT_MACRO(sub, double)
+TVMET_IMPLEMENT_MACRO(mul, double)
+TVMET_IMPLEMENT_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, long double)
+TVMET_IMPLEMENT_MACRO(sub, long double)
+TVMET_IMPLEMENT_MACRO(mul, long double)
+TVMET_IMPLEMENT_MACRO(div, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(Matrix<T, Rows, Cols>, complex<T>)
+ * function(complex<T>, Matrix<T, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,			\
+    MatrixConstReference< std::complex<T>, Rows, Cols>,			\
+    XprLiteral<std::complex<T> >					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const Matrix< std::complex<T>, Rows, Cols>& lhs,			\
+      const std::complex<T>& rhs) {					\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,			\
+    MatrixConstReference< std::complex<T>, Rows, Cols>,			\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));	\
+}									\
+									\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,			\
+    XprLiteral< std::complex<T> >,					\
+    MatrixConstReference< std::complex<T>, Rows, Cols>			\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const std::complex<T>& lhs,					\
+      const Matrix< std::complex<T>, Rows, Cols>& rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,			\
+    XprLiteral< std::complex<T> >,					\
+    MatrixConstReference<T, Rows, Cols>					\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs.const_ref()));	\
+}
+
+TVMET_IMPLEMENT_MACRO(add)
+TVMET_IMPLEMENT_MACRO(sub)
+TVMET_IMPLEMENT_MACRO(mul)
+TVMET_IMPLEMENT_MACRO(div)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ * \brief Function for the matrix-matrix-product.
+ * \ingroup _binary_function
+ * \note The rows2 has to be equal to cols1.
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2 		// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2							// return Dim
+>
+prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Cols2>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+/**
+ * \fn prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of XprMatrix and Matrix.
+ * \ingroup _binary_function
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,			// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2							// return Dim
+>
+prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Cols2>(
+    expr_type(lhs, rhs.const_ref()));
+}
+
+
+/**
+ * \fn prod(const Matrix<T1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of Matrix and XprMatrix.
+ * \ingroup _binary_function
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2				// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2							// return Dim
+>
+prod(const Matrix<T1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Cols2>(
+    expr_type(lhs.const_ref(), rhs));
+}
+
+
+/**
+ * \fn trans_prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ * \brief Function for the trans(matrix-matrix-product)
+ * \ingroup _binary_function
+ * Perform on given Matrix M1 and M2:
+ * \f[
+ * (M_1\,M_2)^T
+ * \f]
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProductTransposed<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Cols2, Rows1							// return Dim
+>
+trans_prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs) {
+  typedef XprMMProductTransposed<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Cols2, Rows1>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+/**
+ * \fn MtM_prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Rows1, Cols2>& rhs)
+ * \brief Function for the trans(matrix)-matrix-product.
+ * \ingroup _binary_function
+ *        using formula
+ *        \f[
+ *        M_1^{T}\,M_2
+ *        \f]
+ * \note The number of cols of matrix 2 have to be equal to number of rows of
+ *       matrix 1, since matrix 1 is trans - the result is a (Cols1 x Cols2)
+ *       matrix.
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>	// Rows2 = Rows1
+inline
+XprMatrix<
+  XprMtMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Rows1, Cols2>, Cols2		// M2(Rows1, Cols2)
+  >,
+  Cols1, Cols2							// return Dim
+>
+MtM_prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Rows1, Cols2>& rhs) {
+  typedef XprMtMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Rows1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Cols1, Cols2>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+/**
+ * \fn MMt_prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Rows2, Cols1>& rhs)
+ * \brief Function for the matrix-trans(matrix)-product.
+ * \ingroup _binary_function
+ * \note The Cols2 has to be equal to Cols1.
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Rows2>
+inline
+XprMatrix<
+  XprMMtProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    MatrixConstReference<T2, Rows2, Cols1>, Cols1 		// M2(Rows2, Cols1)
+  >,
+  Rows1, Rows2							// return Dim
+>
+MMt_prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Rows2, Cols1>& rhs) {
+  typedef XprMMtProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Rows2, Cols1>, Cols1
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Rows2>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn prod(const Matrix<T1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs)
+ * \brief Function for the matrix-vector-product
+ * \ingroup _binary_function
+ */
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,	// M(Rows, Cols)
+    VectorConstReference<T2, Cols> 			// V
+  >,
+  Rows
+>
+prod(const Matrix<T1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs) {
+  typedef XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Cols>
+  > 							expr_type;
+  return XprVector<expr_type, Rows>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+/**
+ * \fn prod(const Matrix<T1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs)
+ * \brief Function for the matrix-vector-product
+ * \ingroup _binary_function
+ */
+template<class T1, class E2, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+prod(const Matrix<T1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs) {
+  typedef XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  > 							expr_type;
+  return XprVector<expr_type, Rows>(
+    expr_type(lhs.const_ref(), rhs));
+}
+
+
+/*
+ * \fn prod(const XprMatrix<E, Rows, Cols>& lhs, const Vector<T, Cols>& rhs)
+ * \brief Compute the product of an XprMatrix with a Vector.
+ * \ingroup _binary_function
+ */
+template<class E1, class T2, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,		// M(Rows, Cols)
+    VectorConstReference<T2, Cols> 			// V
+  >,
+  Rows
+>
+prod(const XprMatrix<E1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs) {
+  typedef XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Cols>
+  > 							expr_type;
+  return XprVector<expr_type, Rows>(
+    expr_type(lhs, rhs.const_ref()));
+}
+
+
+/**
+ * \fn Mtx_prod(const Matrix<T1, Rows, Cols>& matrix, const Vector<T2, Rows>& vector)
+ * \brief Function for the trans(matrix)-vector-product
+ * \ingroup _binary_function
+ * Perform on given Matrix M and vector x:
+ * \f[
+ * M^T\, x
+ * \f]
+ */
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMtVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows,	Cols,   // M(Rows, Cols)
+    VectorConstReference<T2, Rows> 			// V
+  >,
+  Cols
+>
+Mtx_prod(const Matrix<T1, Rows, Cols>& lhs, const Vector<T2, Rows>& rhs) {
+  typedef XprMtVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Rows>
+  > 							expr_type;
+  return XprVector<expr_type, Cols>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn trans(const Matrix<T, Rows, Cols>& rhs)
+ * \brief Transpose the matrix
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprMatrixTranspose<
+    MatrixConstReference<T, Rows, Cols>
+  >,
+  Cols, Rows
+>
+trans(const Matrix<T, Rows, Cols>& rhs) {
+  typedef XprMatrixTranspose<
+    MatrixConstReference<T, Rows, Cols>
+  >							expr_type;
+  return XprMatrix<expr_type, Cols, Rows>(
+    expr_type(rhs.const_ref()));
+}
+
+
+/*
+ * \fn trace(const Matrix<T, Sz, Sz>& m)
+ * \brief Compute the trace of a square matrix.
+ * \ingroup _unary_function
+ *
+ * Simply compute the trace of the given matrix as:
+ * \f[
+ *  \sum_{k = 0}^{Sz-1} m(k, k)
+ * \f]
+ */
+template<class T, std::size_t Sz>
+inline
+typename NumericTraits<T>::sum_type
+trace(const Matrix<T, Sz, Sz>& m) {
+  return meta::Matrix<Sz, Sz, 0, 0>::trace(m);
+}
+
+
+/**
+ * \fn row(const Matrix<T, Rows, Cols>& m, std::size_t no)
+ * \brief Returns a row vector of the given matrix.
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMatrixRow<
+    MatrixConstReference<T, Rows, Cols>,
+    Rows, Cols
+  >,
+  Cols
+>
+row(const Matrix<T, Rows, Cols>& m, std::size_t no) {
+  typedef XprMatrixRow<
+    MatrixConstReference<T, Rows, Cols>,
+    Rows, Cols
+  >							expr_type;
+  return XprVector<expr_type, Cols>(expr_type(m.const_ref(), no));
+}
+
+
+/**
+ * \fn col(const Matrix<T, Rows, Cols>& m, std::size_t no)
+ * \brief Returns a column vector of the given matrix.
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMatrixCol<
+    MatrixConstReference<T, Rows, Cols>,
+    Rows, Cols
+  >,
+  Rows
+>
+col(const Matrix<T, Rows, Cols>& m, std::size_t no) {
+  typedef XprMatrixCol<
+    MatrixConstReference<T, Rows, Cols>,
+    Rows, Cols
+  >							expr_type;
+  return XprVector<expr_type, Rows>(expr_type(m.const_ref(), no));
+}
+
+
+/**
+ * \fn diag(const Matrix<T, Sz, Sz>& m)
+ * \brief Returns the diagonal vector of the given square matrix.
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprMatrixDiag<
+    MatrixConstReference<T, Sz, Sz>,
+    Sz
+  >,
+  Sz
+>
+diag(const Matrix<T, Sz, Sz>& m) {
+  typedef XprMatrixDiag<
+    MatrixConstReference<T, Sz, Sz>,
+    Sz
+  >							expr_type;
+  return XprVector<expr_type, Sz>(expr_type(m.const_ref()));
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * min/max unary functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn maximum(const XprMatrix<E, Rows, Cols>& e)
+ * \brief Find the maximum of a matrix expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+Extremum<typename E::value_type, std::size_t, matrix_tag>
+maximum(const XprMatrix<E, Rows, Cols>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						temp(e(0, 0));
+  std::size_t 						row_no(0), col_no(0);
+
+  for(std::size_t i = 0; i != Rows; ++i) {
+    for(std::size_t j = 0; j != Cols; ++j) {
+      if(e(i, j) > temp) {
+	temp = e(i, j);
+	row_no = i;
+	col_no = j;
+      }
+    }
+  }
+
+  return Extremum<value_type, std::size_t, matrix_tag>(temp, row_no, col_no);
+}
+
+
+/**
+ * \fn maximum(const Matrix<T, Rows, Cols>& m)
+ * \brief Find the maximum of a matrix
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+Extremum<T, std::size_t, matrix_tag>
+maximum(const Matrix<T, Rows, Cols>& m) { return maximum(m.as_expr()); }
+
+
+/**
+ * \fn minimum(const XprMatrix<E, Rows, Cols>& e)
+ * \brief Find the minimum of a matrix expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+Extremum<typename E::value_type, std::size_t, matrix_tag>
+minimum(const XprMatrix<E, Rows, Cols>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						temp(e(0, 0));
+  std::size_t 						row_no(0), col_no(0);
+
+  for(std::size_t i = 0; i != Rows; ++i) {
+    for(std::size_t j = 0; j != Cols; ++j) {
+      if(e(i, j) < temp) {
+	temp = e(i, j);
+	row_no = i;
+	col_no = j;
+      }
+    }
+  }
+
+  return Extremum<value_type, std::size_t, matrix_tag>(temp, row_no, col_no);
+}
+
+
+/**
+ * \fn minimum(const Matrix<T, Rows, Cols>& m)
+ * \brief Find the minimum of a matrix
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+Extremum<T, std::size_t, matrix_tag>
+minimum(const Matrix<T, Rows, Cols>& m) { return minimum(m.as_expr()); }
+
+
+/**
+ * \fn max(const XprMatrix<E, Rows, Cols>& e)
+ * \brief Find the maximum of a matrix expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+typename E::value_type
+max(const XprMatrix<E, Rows, Cols>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						temp(e(0, 0));
+
+  for(std::size_t i = 0; i != Rows; ++i)
+    for(std::size_t j = 0; j != Cols; ++j)
+      if(e(i, j) > temp)
+	temp = e(i, j);
+
+  return temp;
+}
+
+
+/**
+ * \fn max(const Matrix<T, Rows, Cols>& m)
+ * \brief Find the maximum of a matrix
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+T max(const Matrix<T, Rows, Cols>& m) {
+  typedef T			 			value_type;
+  typedef typename Matrix<
+   T, Rows, Cols
+  >::const_iterator					const_iterator;
+
+  const_iterator					iter(m.begin());
+  const_iterator					last(m.end());
+  value_type 						temp(*iter);
+
+  for( ; iter != last; ++iter)
+    if(*iter > temp)
+      temp = *iter;
+
+  return temp;
+}
+
+
+/**
+ * \fn min(const XprMatrix<E, Rows, Cols>& e)
+ * \brief Find the minimum of a matrix expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+typename E::value_type
+min(const XprMatrix<E, Rows, Cols>& e) {
+  typedef typename E::value_type			value_type;
+
+  value_type 						temp(e(0, 0));
+
+  for(std::size_t i = 0; i != Rows; ++i)
+    for(std::size_t j = 0; j != Cols; ++j)
+      if(e(i, j) < temp)
+	temp = e(i, j);
+
+  return temp;
+}
+
+
+/**
+ * \fn min(const Matrix<T, Rows, Cols>& m)
+ * \brief Find the minimum of a matrix
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+T min(const Matrix<T, Rows, Cols>& m) {
+  typedef T			 			value_type;
+  typedef typename Matrix<
+   T, Rows, Cols
+  >::const_iterator					const_iterator;
+
+  const_iterator					iter(m.begin());
+  const_iterator					last(m.end());
+  value_type 						temp(*iter);
+
+  for( ; iter != last; ++iter)
+    if(*iter < temp)
+      temp = *iter;
+
+  return temp;
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * other unary functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn XprMatrix<XprIdentity<typename M::value_type, M::Rows, M::Cols>, M::Rows, M::Cols>identity()
+ * \brief Fill a matrix to an identity matrix.
+ * \ingroup _unary_function
+ *
+ * \note The matrix doesn't need to be square. Only the elements
+ *       where the current number of rows are equal to columns
+ *       will be set to 1, else to 0.
+ *
+ * \par Usage:
+ * \code
+ * typedef Matrix<double,3,3>		matrix_type;
+ * ...
+ * matrix_type E( identity<double, 3, 3>() );
+ * \endcode
+ *
+ * Note, we have to specify the type, number of rows and columns
+ * since ADL can't work here.
+ *
+ *
+ *
+ * \since release 1.6.0
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprIdentity<T, Rows, Cols>,
+  Rows, Cols
+>
+identity() {
+  typedef XprIdentity<T, Rows, Cols>		expr_type;
+
+  return XprMatrix<expr_type, Rows, Cols>(expr_type());
+}
+
+/**
+ * \fn XprMatrix<XprIdentity<typename M::value_type, M::Rows, M::Cols>, M::Rows, M::Cols>identity()
+ * \brief Fill a matrix to an identity matrix (convenience wrapper
+ *        for matrix typedefs).
+ * \ingroup _unary_function
+ *
+ * \note The matrix doesn't need to be square. Only the elements
+ *       where the current number of rows are equal to columns
+ *       will be set to 1, else to 0.
+ *
+ * \par Usage:
+ * \code
+ * typedef Matrix<double,3,3>		matrix_type;
+ * ...
+ * matrix_type E( identity<matrix_type>() );
+ * \endcode
+ *
+ * Note, we have to specify the matrix type, since ADL can't work here.
+ *
+ * \since release 1.6.0
+ */
+template<class M>
+inline
+XprMatrix<
+  XprIdentity<
+    typename M::value_type,
+    M::Rows, M::Cols>,
+  M::Rows, M::Cols
+>
+identity() {
+  return identity<typename M::value_type, M::Rows, M::Cols>();
+}
+
+
+/**
+ * \fn cmatrix_ref(const T* mem)
+ * \brief Creates an expression wrapper for a C like matrices.
+ * \ingroup _unary_function
+ *
+ * This is like creating a matrix of external data, as described
+ * at \ref construct. With this function you wrap an expression
+ * around a C style matrix and you can operate directly with it
+ * as usual.
+ *
+ * \par Example:
+ * \code
+ * static float lhs[3][3] = {
+ *   {-1,  0,  1}, { 1,  0,  1}, {-1,  0, -1}
+ * };
+ * static float rhs[3][3] = {
+ *   { 0,  1,  1}, { 0,  1, -1}, { 0, -1,  1}
+ * };
+ * ...
+ *
+ * typedef Matrix<float, 3, 3>			matrix_type;
+ *
+ * matrix_type M( cmatrix_ref<float, 3, 3>(&lhs[0][0])
+ *                *  cmatrix_ref<float, 3, 3>(&rhs[0][0]) );
+ * \endcode
+ *
+ * \since release 1.6.0
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  MatrixConstReference<T, Rows, Cols>,
+  Rows, Cols
+>
+cmatrix_ref(const T* mem) {
+  typedef MatrixConstReference<T, Rows, Cols>	expr_type;
+
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(mem));
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_MATRIX_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/MatrixImpl.h b/tvmet-1.7.1/include/tvmet/MatrixImpl.h
new file mode 100644
index 0000000..1fbc4d0
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/MatrixImpl.h
@@ -0,0 +1,217 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixImpl.h,v 1.27 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_IMPL_H
+#define TVMET_MATRIX_IMPL_H
+
+#include <iomanip>			// setw
+
+#include <tvmet/Functional.h>
+#include <tvmet/Io.h>
+
+
+namespace tvmet {
+
+
+/*
+ * member operators for i/o
+ */
+template<class T, std::size_t NRows, std::size_t NCols>
+std::ostream& Matrix<T, NRows, NCols>::print_xpr(std::ostream& os, std::size_t l) const
+{
+  os << IndentLevel(l++) << "Matrix[" << ops << "]<"
+     << typeid(T).name() << ", " << Rows << ", " << Cols << ">,"
+     << IndentLevel(--l)
+     << std::endl;
+
+  return os;
+}
+
+
+template<class T, std::size_t NRows, std::size_t NCols>
+std::ostream& Matrix<T, NRows, NCols>::print_on(std::ostream& os) const
+{
+  enum {
+    complex_type = NumericTraits<value_type>::is_complex
+  };
+
+  std::streamsize w = IoPrintHelper<Matrix>::width(dispatch<complex_type>(), *this);
+
+  os << std::setw(0) << "[\n";
+  for(std::size_t i = 0; i < Rows; ++i) {
+    os << " [";
+    for(std::size_t j = 0; j < (Cols - 1); ++j) {
+      os << std::setw(w) << this->operator()(i, j) << ", ";
+    }
+    os << std::setw(w) << this->operator()(i, Cols - 1)
+       << (i != (Rows-1) ? "],\n" : "]\n");
+    }
+  os << "]";
+
+  return os;
+}
+
+
+/*
+ * member operators with scalars, per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				    \
+template<class T, std::size_t NRows, std::size_t NCols>		    \
+inline 								    \
+Matrix<T, NRows, NCols>&					    \
+Matrix<T, NRows, NCols>::operator OP (value_type rhs) {		    \
+  typedef XprLiteral<value_type> 			expr_type;  \
+  this->M_##NAME(XprMatrix<expr_type, Rows, Cols>(expr_type(rhs))); \
+  return *this;							    \
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq, +=)
+TVMET_IMPLEMENT_MACRO(sub_eq, -=)
+TVMET_IMPLEMENT_MACRO(mul_eq, *=)
+TVMET_IMPLEMENT_MACRO(div_eq, /=)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				    \
+template<class T, std::size_t NRows, std::size_t NCols>		    \
+inline 								    \
+Matrix<T, NRows, NCols>&					    \
+Matrix<T, NRows, NCols>::operator OP (std::size_t rhs) {	    \
+  typedef XprLiteral<value_type> 			expr_type;  \
+  this->M_##NAME(XprMatrix<expr_type, Rows, Cols>(expr_type(rhs))); \
+  return *this;							    \
+}
+
+TVMET_IMPLEMENT_MACRO(mod_eq, %=)
+TVMET_IMPLEMENT_MACRO(xor_eq,^=)
+TVMET_IMPLEMENT_MACRO(and_eq, &=)
+TVMET_IMPLEMENT_MACRO(or_eq, |=)
+TVMET_IMPLEMENT_MACRO(shl_eq, <<=)
+TVMET_IMPLEMENT_MACRO(shr_eq, >>=)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ *  member functions (operators) with matrizes, for use with +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)									     \
+template<class T1, std::size_t NRows, std::size_t NCols>						     \
+template <class T2>											     \
+inline 													     \
+Matrix<T1, NRows, NCols>&										     \
+Matrix<T1, NRows, NCols>::M_##NAME (const Matrix<T2, Rows, Cols>& rhs) {				     \
+  this->M_##NAME( XprMatrix<typename Matrix<T2, Rows, Cols>::ConstReference, Rows, Cols>(rhs.const_ref()) ); \
+  return *this;												     \
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+TVMET_IMPLEMENT_MACRO(mod_eq)
+TVMET_IMPLEMENT_MACRO(xor_eq)
+TVMET_IMPLEMENT_MACRO(and_eq)
+TVMET_IMPLEMENT_MACRO(or_eq)
+TVMET_IMPLEMENT_MACRO(shl_eq)
+TVMET_IMPLEMENT_MACRO(shr_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * member functions (operators) with expressions, for use width +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					   \
+template<class T, std::size_t NRows, std::size_t NCols>			   \
+template<class E>							   \
+inline 									   \
+Matrix<T, NRows, NCols>&						   \
+Matrix<T, NRows, NCols>::M_##NAME (const XprMatrix<E, Rows, Cols>& rhs) {  \
+  rhs.assign_to(*this, Fcnl_##NAME<value_type, typename E::value_type>()); \
+  return *this;								   \
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+TVMET_IMPLEMENT_MACRO(mod_eq)
+TVMET_IMPLEMENT_MACRO(xor_eq)
+TVMET_IMPLEMENT_MACRO(and_eq)
+TVMET_IMPLEMENT_MACRO(or_eq)
+TVMET_IMPLEMENT_MACRO(shl_eq)
+TVMET_IMPLEMENT_MACRO(shr_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * aliased member functions (operators) with matrizes,
+ * for use with +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)										 \
+template<class T1, std::size_t NRows, std::size_t NCols>							 \
+template <class T2>												 \
+inline 														 \
+Matrix<T1, NRows, NCols>&											 \
+Matrix<T1, NRows, NCols>::alias_##NAME (const Matrix<T2, Rows, Cols>& rhs) {					 \
+  this->alias_##NAME( XprMatrix<typename Matrix<T2, Rows, Cols>::ConstReference, Rows, Cols>(rhs.const_ref()) ); \
+  return *this;													 \
+}
+
+TVMET_IMPLEMENT_MACRO(assign)
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * aliased member functions (operators) with expressions,
+ * for use width +=,-= ... <<= and aliased(),
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)						      \
+template<class T, std::size_t NRows, std::size_t NCols>				      \
+template<class E>								      \
+inline 										      \
+Matrix<T, NRows, NCols>&							      \
+Matrix<T, NRows, NCols>::alias_##NAME (const XprMatrix<E, Rows, Cols>& rhs) {	      \
+  typedef Matrix<T, NRows, NCols> 			temp_type;		      \
+  temp_type(rhs).assign_to(*this, Fcnl_##NAME<value_type, typename E::value_type>()); \
+  return *this;									      \
+}
+
+TVMET_IMPLEMENT_MACRO(assign)
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_MATRIX_IMPL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/MatrixOperators.h b/tvmet-1.7.1/include/tvmet/MatrixOperators.h
new file mode 100644
index 0000000..2917e35
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/MatrixOperators.h
@@ -0,0 +1,1286 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixOperators.h,v 1.33 2004/06/17 15:53:12 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_OPERATORS_H
+#define TVMET_MATRIX_OPERATORS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+template<class T, std::size_t Rows, std::size_t Cols>
+std::ostream& operator<<(std::ostream& os,
+			 const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Member operators (arithmetic and bit ops)
+ *++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * update_operator(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * update_operator(Matrix<T1, Rows, Cols>, XprMatrix<E, Rows, Cols> rhs)
+ * Note: per se element wise
+ * \todo: the operator*= can have element wise mul oder product, decide!
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>		\
+Matrix<T1, Rows, Cols>&								\
+operator OP (Matrix<T1, Rows, Cols>& lhs, 					\
+	     const Matrix<T2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+										\
+template<class T, class E, std::size_t Rows,  std::size_t Cols>			\
+Matrix<T, Rows, Cols>&								\
+operator OP (Matrix<T, Rows, Cols>& lhs, 					\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add_eq, +=)		// per se element wise
+TVMET_DECLARE_MACRO(sub_eq, -=)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mul_eq, *=)		// see note
+  TVMET_DECLARE_MACRO(div_eq, /=)		// not defined for vectors
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod_eq, %=)
+  TVMET_DECLARE_MACRO(xor_eq, ^=)
+  TVMET_DECLARE_MACRO(and_eq, &=)
+  TVMET_DECLARE_MACRO(or_eq, |=)
+  TVMET_DECLARE_MACRO(shl_eq, <<=)
+  TVMET_DECLARE_MACRO(shr_eq, >>=)
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * operator(XprMatrix<E, Rows, Cols>, Matrix<T, Rows, Cols>)
+ * operator(Matrix<T, Rows, Cols>, XprMatrix<E, Rows, Cols>)
+ * Note: per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<T1, T2>,							\
+    MatrixConstReference<T1, Rows, Cols>,					\
+    MatrixConstReference<T2, Rows, Cols>					\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const Matrix<T1, Rows, Cols>& lhs,					\
+	     const Matrix<T2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+										\
+template<class E, class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    XprMatrix<E, Rows, Cols>,							\
+    MatrixConstReference<T, Rows, Cols>						\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, 				\
+	     const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+										\
+template<class T, class E, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const Matrix<T, Rows, Cols>& lhs, 					\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)			// per se element wise
+TVMET_DECLARE_MACRO(sub, -)			// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mul, *)			// see as prod()
+  TVMET_DECLARE_MACRO(div, /)			// not defined for matrizes
+}
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * operator(Matrix<T, Rows, Cols>, POD)
+ * operator(POD, Matrix<T, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, POD)				\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, POD >,						\
+    MatrixConstReference<T, Rows, Cols>,				\
+    XprLiteral<POD >							\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const Matrix<T, Rows, Cols>& lhs, 				\
+	     POD rhs) TVMET_CXX_ALWAYS_INLINE;				\
+									\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, T>,						\
+    XprLiteral< POD >,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (POD lhs, 							\
+	     const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +, int)
+TVMET_DECLARE_MACRO(sub, -, int)
+TVMET_DECLARE_MACRO(mul, *, int)
+TVMET_DECLARE_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, +, long long int)
+TVMET_DECLARE_MACRO(sub, -, long long int)
+TVMET_DECLARE_MACRO(mul, *, long long int)
+TVMET_DECLARE_MACRO(div, /, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_DECLARE_MACRO(add, +, float)
+TVMET_DECLARE_MACRO(sub, -, float)
+TVMET_DECLARE_MACRO(mul, *, float)
+TVMET_DECLARE_MACRO(div, /, float)
+
+TVMET_DECLARE_MACRO(add, +, double)
+TVMET_DECLARE_MACRO(sub, -, double)
+TVMET_DECLARE_MACRO(mul, *, double)
+TVMET_DECLARE_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, +, long double)
+TVMET_DECLARE_MACRO(sub, -, long double)
+TVMET_DECLARE_MACRO(mul, *, long double)
+TVMET_DECLARE_MACRO(div, /, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Matrix<T, Rows, Cols>, complex<T>)
+ * operator(complex<T>, Matrix<T, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)							\
+template<class T, std::size_t Rows, std::size_t Cols>					\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    MatrixConstReference< std::complex<T>, Rows, Cols>,					\
+    XprLiteral<std::complex<T> >							\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const Matrix< std::complex<T>, Rows, Cols>& lhs,				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;			\
+											\
+template<class T, std::size_t Rows, std::size_t Cols>					\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    XprLiteral< std::complex<T> >,							\
+    MatrixConstReference< std::complex<T>, Rows, Cols>					\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const std::complex<T>& lhs,						\
+	     const Matrix< std::complex<T>, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)
+TVMET_DECLARE_MACRO(sub, -)
+TVMET_DECLARE_MACRO(mul, *)
+TVMET_DECLARE_MACRO(div, /)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific operator*() = prod() operations
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2
+>
+operator*(const Matrix<T1, Rows1, Cols1>& lhs,
+	  const Matrix<T2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2
+>
+operator*(const XprMatrix<E1, Rows1, Cols1>& lhs,
+	  const Matrix<T2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2
+>
+operator*(const Matrix<T1, Rows1, Cols1>& lhs,
+	  const XprMatrix<E2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T1, std::size_t Rows, std::size_t Cols, class T2>
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Cols>
+  >,
+  Rows
+>
+operator*(const Matrix<T1, Rows, Cols>& lhs,
+	  const Vector<T2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, class E2, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+operator*(const Matrix<T1, Rows, Cols>& lhs,
+	  const XprVector<E2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, class T2, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Cols>
+  >,
+  Rows
+>
+operator*(const XprMatrix<E1, Rows, Cols>& lhs,
+	  const Vector<T2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * operator(XprMatrix<E>, Matrix<T, Rows, Cols>)
+ * operator(Matrix<T, Rows, Cols>, XprMatrix<E>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class T1, std::size_t Rows, std::size_t Cols,				\
+	 class T2>								\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<T1, T2>,							\
+    MatrixConstReference<T1, Rows, Cols>,					\
+    MatrixConstReference<T2, Rows, Cols>					\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const Matrix<T1, Rows, Cols>& lhs,					\
+	     const Matrix<T2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+										\
+template<class E,								\
+	 class T, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    XprMatrix<E, Rows, Cols>,							\
+    MatrixConstReference<T, Rows, Cols>						\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, 				\
+	     const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+										\
+template<class T, std::size_t Rows, std::size_t Cols,				\
+	 class E>								\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,					\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const Matrix<T, Rows, Cols>& lhs, 					\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %)
+  TVMET_DECLARE_MACRO(bitxor, ^)
+  TVMET_DECLARE_MACRO(bitand, &)
+  TVMET_DECLARE_MACRO(bitor, |)
+  TVMET_DECLARE_MACRO(shl, <<)
+  TVMET_DECLARE_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Matrix<T, Rows, Cols>, complex<T>)
+ * operator(complex<T>, Matrix<T, Rows, Cols>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)							\
+template<class T, std::size_t Rows, std::size_t Cols>					\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    MatrixConstReference< std::complex<T>, Rows, Cols>,					\
+    XprLiteral<std::complex<T> >							\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const Matrix< std::complex<T>, Rows, Cols>& lhs,				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;			\
+											\
+template<class T, std::size_t Rows, std::size_t Cols>					\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    XprLiteral< std::complex<T> >,							\
+    MatrixConstReference< std::complex<T>, Rows, Cols>					\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const std::complex<T>& lhs,						\
+	     const Matrix< std::complex<T>, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*
+ * operator(Matrix<T, Rows, Cols>, POD)
+ * operator(POD, Matrix<T, Rows, Cols>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, TP)					\
+template<class T, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<T, TP >,							\
+    MatrixConstReference<T, Rows, Cols>,					\
+    XprLiteral<TP >								\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const Matrix<T, Rows, Cols>& lhs, TP rhs) TVMET_CXX_ALWAYS_INLINE;	\
+										\
+template<class T, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME< TP, T>,							\
+    XprLiteral< TP >,								\
+    MatrixConstReference<T, Rows, Cols>						\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (TP lhs, const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, int)
+  TVMET_DECLARE_MACRO(bitxor, ^, int)
+  TVMET_DECLARE_MACRO(bitand, &, int)
+  TVMET_DECLARE_MACRO(bitor, |, int)
+  TVMET_DECLARE_MACRO(shl, <<, int)
+  TVMET_DECLARE_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, int)
+TVMET_DECLARE_MACRO(less, <, int)
+TVMET_DECLARE_MACRO(greater_eq, >=, int)
+TVMET_DECLARE_MACRO(less_eq, <=, int)
+TVMET_DECLARE_MACRO(eq, ==, int)
+TVMET_DECLARE_MACRO(not_eq, !=, int)
+TVMET_DECLARE_MACRO(and, &&, int)
+TVMET_DECLARE_MACRO(or, ||, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, long long int)
+  TVMET_DECLARE_MACRO(bitxor, ^, long long int)
+  TVMET_DECLARE_MACRO(bitand, &, long long int)
+  TVMET_DECLARE_MACRO(bitor, |, long long int)
+  TVMET_DECLARE_MACRO(shl, <<, long long int)
+  TVMET_DECLARE_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long long int)
+TVMET_DECLARE_MACRO(less, <, long long int)
+TVMET_DECLARE_MACRO(greater_eq, >=, long long int)
+TVMET_DECLARE_MACRO(less_eq, <=, long long int)
+TVMET_DECLARE_MACRO(eq, ==, long long int)
+TVMET_DECLARE_MACRO(not_eq, !=, long long int)
+TVMET_DECLARE_MACRO(and, &&, long long int)
+TVMET_DECLARE_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, float)
+TVMET_DECLARE_MACRO(less, <, float)
+TVMET_DECLARE_MACRO(greater_eq, >=, float)
+TVMET_DECLARE_MACRO(less_eq, <=, float)
+TVMET_DECLARE_MACRO(eq, ==, float)
+TVMET_DECLARE_MACRO(not_eq, !=, float)
+TVMET_DECLARE_MACRO(and, &&, float)
+TVMET_DECLARE_MACRO(or, ||, float)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, double)
+TVMET_DECLARE_MACRO(less, <, double)
+TVMET_DECLARE_MACRO(greater_eq, >=, double)
+TVMET_DECLARE_MACRO(less_eq, <=, double)
+TVMET_DECLARE_MACRO(eq, ==, double)
+TVMET_DECLARE_MACRO(not_eq, !=, double)
+TVMET_DECLARE_MACRO(and, &&, double)
+TVMET_DECLARE_MACRO(or, ||, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long double)
+TVMET_DECLARE_MACRO(less, <, long double)
+TVMET_DECLARE_MACRO(greater_eq, >=, long double)
+TVMET_DECLARE_MACRO(less_eq, <=, long double)
+TVMET_DECLARE_MACRO(eq, ==, long double)
+TVMET_DECLARE_MACRO(not_eq, !=, long double)
+TVMET_DECLARE_MACRO(and, &&, long double)
+TVMET_DECLARE_MACRO(or, ||, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * unary_operator(Matrix<T, Rows, Cols>)
+ * Note: per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template <class T, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprUnOp<								\
+    Fcnl_##NAME<T>,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(not, !)
+TVMET_DECLARE_MACRO(compl, ~)
+TVMET_DECLARE_MACRO(neg, -)
+#undef TVMET_DECLARE_MACRO
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/**
+ * \fn operator<<(std::ostream& os, const Matrix<T, Rows, Cols>& rhs)
+ * \brief Overload operator for i/o
+ * \ingroup _binary_operator
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+std::ostream& operator<<(std::ostream& os, const Matrix<T, Rows, Cols>& rhs) {
+  return rhs.print_on(os);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Member operators (arithmetic and bit ops)
+ *++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * update_operator(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * update_operator(Matrix<T1, Rows, Cols>, XprMatrix<E, Rows, Cols> rhs)
+ * Note: per se element wise
+ * \todo: the operator*= can have element wise mul oder product, decide!
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)						\
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>		\
+inline 										\
+Matrix<T1, Rows, Cols>&								\
+operator OP (Matrix<T1, Rows, Cols>& lhs, const Matrix<T2, Rows, Cols>& rhs) {	\
+  return lhs.M_##NAME(rhs);							\
+}										\
+										\
+template<class T, class E, std::size_t Rows,  std::size_t Cols>			\
+inline 										\
+Matrix<T, Rows, Cols>&								\
+operator OP (Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs) {	\
+  return lhs.M_##NAME(rhs);							\
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq, +=)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub_eq, -=)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mul_eq, *=)		// see note
+  TVMET_IMPLEMENT_MACRO(div_eq, /=)		// not defined for vectors
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod_eq, %=)
+  TVMET_IMPLEMENT_MACRO(xor_eq, ^=)
+  TVMET_IMPLEMENT_MACRO(and_eq, &=)
+  TVMET_IMPLEMENT_MACRO(or_eq, |=)
+  TVMET_IMPLEMENT_MACRO(shl_eq, <<=)
+  TVMET_IMPLEMENT_MACRO(shr_eq, >>=)
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * operator(XprMatrix<E, Rows, Cols>, Matrix<T, Rows, Cols>)
+ * operator(Matrix<T, Rows, Cols>, XprMatrix<E, Rows, Cols>)
+ * Note: per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)						      \
+template<class T1, class T2, std::size_t Rows, std::size_t Cols>		      \
+inline										      \
+XprMatrix<									      \
+  XprBinOp<									      \
+    Fcnl_##NAME<T1, T2>,							      \
+    MatrixConstReference<T1, Rows, Cols>,					      \
+    MatrixConstReference<T2, Rows, Cols>					      \
+  >,										      \
+  Rows, Cols									      \
+>										      \
+operator OP (const Matrix<T1, Rows, Cols>& lhs,	const Matrix<T2, Rows, Cols>& rhs) {  \
+  return NAME(lhs, rhs);							      \
+}										      \
+										      \
+template<class E, class T, std::size_t Rows, std::size_t Cols>			      \
+inline										      \
+XprMatrix<									      \
+  XprBinOp<									      \
+    Fcnl_##NAME<typename E::value_type, T>,					      \
+    XprMatrix<E, Rows, Cols>,							      \
+    MatrixConstReference<T, Rows, Cols>						      \
+  >,										      \
+  Rows, Cols									      \
+>										      \
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs) { \
+  return NAME(lhs, rhs);							      \
+}										      \
+										      \
+template<class T, class E, std::size_t Rows, std::size_t Cols>			      \
+inline										      \
+XprMatrix<									      \
+  XprBinOp<									      \
+    Fcnl_##NAME<typename E::value_type, T>,					      \
+    MatrixConstReference<T, Rows, Cols>,					      \
+    XprMatrix<E, Rows, Cols>							      \
+  >,										      \
+  Rows, Cols									      \
+>										      \
+operator OP (const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs) { \
+  return NAME(lhs, rhs);							      \
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)			// per se element wise
+TVMET_IMPLEMENT_MACRO(sub, -)			// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mul, *)			// see as prod()
+  TVMET_IMPLEMENT_MACRO(div, /)			// not defined for matrizes
+}
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * operator(Matrix<T, Rows, Cols>, POD)
+ * operator(POD, Matrix<T, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD)			\
+template<class T, std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME<T, POD >,					\
+    MatrixConstReference<T, Rows, Cols>,			\
+    XprLiteral<POD >						\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (const Matrix<T, Rows, Cols>& lhs, POD rhs) {	\
+  return NAME (lhs, rhs);					\
+}								\
+								\
+template<class T, std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME< POD, T>,					\
+    XprLiteral< POD >,						\
+    MatrixConstReference<T, Rows, Cols>				\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (POD lhs, const Matrix<T, Rows, Cols>& rhs) {	\
+  return NAME (lhs, rhs);					\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +, int)
+TVMET_IMPLEMENT_MACRO(sub, -, int)
+TVMET_IMPLEMENT_MACRO(mul, *, int)
+TVMET_IMPLEMENT_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, +, long long int)
+TVMET_IMPLEMENT_MACRO(sub, -, long long int)
+TVMET_IMPLEMENT_MACRO(mul, *, long long int)
+TVMET_IMPLEMENT_MACRO(div, /, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(add, +, float)
+TVMET_IMPLEMENT_MACRO(sub, -, float)
+TVMET_IMPLEMENT_MACRO(mul, *, float)
+TVMET_IMPLEMENT_MACRO(div, /, float)
+
+TVMET_IMPLEMENT_MACRO(add, +, double)
+TVMET_IMPLEMENT_MACRO(sub, -, double)
+TVMET_IMPLEMENT_MACRO(mul, *, double)
+TVMET_IMPLEMENT_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, +, long double)
+TVMET_IMPLEMENT_MACRO(sub, -, long double)
+TVMET_IMPLEMENT_MACRO(mul, *, long double)
+TVMET_IMPLEMENT_MACRO(div, /, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Matrix<T, Rows, Cols>, complex<T>)
+ * operator(complex<T>, Matrix<T, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				\
+template<class T, std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,		\
+    MatrixConstReference< std::complex<T>, Rows, Cols>,		\
+    XprLiteral<std::complex<T> >				\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (const Matrix< std::complex<T>, Rows, Cols>& lhs,	\
+	     const std::complex<T>& rhs) {			\
+  return NAME (lhs, rhs);					\
+}								\
+								\
+template<class T, std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,		\
+    XprLiteral< std::complex<T> >,				\
+    MatrixConstReference< std::complex<T>, Rows, Cols>		\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (const std::complex<T>& lhs,			\
+	     const Matrix< std::complex<T>, Rows, Cols>& rhs) {	\
+  return NAME (lhs, rhs);					\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)
+TVMET_IMPLEMENT_MACRO(sub, -)
+TVMET_IMPLEMENT_MACRO(mul, *)
+TVMET_IMPLEMENT_MACRO(div, /)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific operator*() = prod() operations
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn operator*(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ * \brief multiply two Matrices.
+ * \ingroup _binary_operator
+ * \note The rows2 has to be equal to cols1.
+ * \sa prod(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2
+>
+operator*(const Matrix<T1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/**
+ * \fn operator*(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of XprMatrix and Matrix.
+ * \ingroup _binary_operator
+ * \sa prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs)
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class T2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    MatrixConstReference<T2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2
+>
+operator*(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<T2, Cols1, Cols2>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/**
+ * \fn operator*(const Matrix<T1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of Matrix and XprMatrix.
+ * \ingroup _binary_operator
+ * \sa prod(const Matrix<T, Rows1, Cols1>& lhs, const XprMatrix<E, Cols1, Cols2>& rhs)
+ */
+template<class T1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<T1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2
+>
+operator*(const Matrix<T1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn operator*(const Matrix<T1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs)
+ * \brief multiply a Matrix with a Vector.
+ * \ingroup _binary_operator
+ * \note The length of the Vector has to be equal to the number of Columns.
+ * \sa prod(const Matrix<T1, Rows, Cols>& m, const Vector<T2, Cols>& v)
+ */
+template<class T1, std::size_t Rows, std::size_t Cols, class T2>
+inline
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Cols>
+  >,
+  Rows
+>
+operator*(const Matrix<T1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/**
+ * \fn operator*(const Matrix<T1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs)
+ * \brief Function for the matrix-vector-product
+ * \ingroup _binary_operator
+ * \sa prod(const Matrix<T, Rows, Cols>& lhs, const XprVector<E, Cols>& rhs)
+ */
+template<class T1, class E2, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMVProduct<
+    MatrixConstReference<T1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+operator*(const Matrix<T1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/**
+ * \fn operator*(const XprMatrix<E1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs)
+ * \brief Compute the product of an XprMatrix with a Vector.
+ * \ingroup _binary_operator
+ * \sa prod(const XprMatrix<E, Rows, Cols>& lhs, const Vector<T, Cols>& rhs)
+ */
+template<class E1, class T2, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    VectorConstReference<T2, Cols>
+  >,
+  Rows
+>
+operator*(const XprMatrix<E1, Rows, Cols>& lhs, const Vector<T2, Cols>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Matrix<T1, Rows, Cols>, Matrix<T2, Rows, Cols>)
+ * operator(XprMatrix<E>, Matrix<T, Rows, Cols>)
+ * operator(Matrix<T, Rows, Cols>, XprMatrix<E>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)							\
+template<class T1, std::size_t Rows, std::size_t Cols,					\
+	 class T2>									\
+inline											\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME<T1, T2>,								\
+    MatrixConstReference<T1, Rows, Cols>,						\
+    MatrixConstReference<T2, Rows, Cols>						\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const Matrix<T1, Rows, Cols>& lhs,						\
+	     const Matrix<T2, Rows, Cols>& rhs) {					\
+  typedef XprBinOp <									\
+    Fcnl_##NAME<T1, T2>,								\
+    MatrixConstReference<T1, Rows, Cols>,						\
+    MatrixConstReference<T2, Rows, Cols>						\
+  >							expr_type;			\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(lhs.const_ref(), rhs.const_ref()));	\
+}											\
+											\
+template<class E,									\
+	 class T, std::size_t Rows, std::size_t Cols>					\
+inline											\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME<typename E::value_type, T>,						\
+    XprMatrix<E, Rows, Cols>,								\
+    MatrixConstReference<T, Rows, Cols>							\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, const Matrix<T, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, T>,						\
+    XprMatrix<E, Rows, Cols>,								\
+    MatrixConstReference<T, Rows, Cols>							\
+  > 							 expr_type;			\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(lhs, rhs.const_ref()));		\
+}											\
+											\
+template<class T, std::size_t Rows, std::size_t Cols,					\
+	 class E>									\
+inline											\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME<typename E::value_type, T>,						\
+    MatrixConstReference<T, Rows, Cols>,						\
+    XprMatrix<E, Rows, Cols>								\
+  >,											\
+  Rows, Cols										\
+>											\
+operator OP (const Matrix<T, Rows, Cols>& lhs, const XprMatrix<E, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<									\
+    Fcnl_##NAME<T, typename E::value_type>,						\
+    MatrixConstReference<T, Rows, Cols>,						\
+    XprMatrix<E, Rows, Cols>								\
+  >	 						 expr_type;			\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(lhs.const_ref(), rhs));		\
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^)
+  TVMET_IMPLEMENT_MACRO(bitand, &)
+  TVMET_IMPLEMENT_MACRO(bitor, |)
+  TVMET_IMPLEMENT_MACRO(shl, <<)
+  TVMET_IMPLEMENT_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Matrix<T, Rows, Cols>, complex<T>)
+ * operator(complex<T>, Matrix<T, Rows, Cols>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				     \
+template<class T, std::size_t Rows, std::size_t Cols>		     \
+inline								     \
+XprMatrix<							     \
+  XprBinOp<							     \
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,		     \
+    MatrixConstReference< std::complex<T>, Rows, Cols>,		     \
+    XprLiteral<std::complex<T> >				     \
+  >,								     \
+  Rows, Cols							     \
+>								     \
+operator OP (const Matrix< std::complex<T>, Rows, Cols>& lhs,	     \
+	     const std::complex<T>& rhs) {			     \
+  typedef XprBinOp<						     \
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,		     \
+    MatrixConstReference< std::complex<T>, Rows, Cols>,		     \
+    XprLiteral< std::complex<T> >				     \
+  >							expr_type;   \
+  return XprMatrix<expr_type, Rows, Cols>(			     \
+    expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs))); \
+}								     \
+								     \
+template<class T, std::size_t Rows, std::size_t Cols>		     \
+inline								     \
+XprMatrix<							     \
+  XprBinOp<							     \
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,		     \
+    XprLiteral< std::complex<T> >,				     \
+    MatrixConstReference< std::complex<T>, Rows, Cols>		     \
+  >,								     \
+  Rows, Cols							     \
+>								     \
+operator OP (const std::complex<T>& lhs,			     \
+	     const Matrix< std::complex<T>, Rows, Cols>& rhs) {	     \
+  typedef XprBinOp<						     \
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,		     \
+    XprLiteral< std::complex<T> >,				     \
+    MatrixConstReference<T, Rows, Cols>				     \
+  >							expr_type;   \
+  return XprMatrix<expr_type, Rows, Cols>(			     \
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs.const_ref())); \
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*
+ * operator(Matrix<T, Rows, Cols>, POD)
+ * operator(POD, Matrix<T, Rows, Cols>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, TP)			   \
+template<class T, std::size_t Rows, std::size_t Cols>		   \
+inline								   \
+XprMatrix<							   \
+  XprBinOp<							   \
+    Fcnl_##NAME<T, TP >,					   \
+    MatrixConstReference<T, Rows, Cols>,			   \
+    XprLiteral<TP >						   \
+  >,								   \
+  Rows, Cols							   \
+>								   \
+operator OP (const Matrix<T, Rows, Cols>& lhs, TP rhs) {	   \
+  typedef XprBinOp<						   \
+    Fcnl_##NAME<T, TP >,					   \
+    MatrixConstReference<T, Rows, Cols>,			   \
+    XprLiteral< TP >						   \
+  >							expr_type; \
+  return XprMatrix<expr_type, Rows, Cols>(			   \
+    expr_type(lhs.const_ref(), XprLiteral< TP >(rhs)));		   \
+}								   \
+								   \
+template<class T, std::size_t Rows, std::size_t Cols>		   \
+inline								   \
+XprMatrix<							   \
+  XprBinOp<							   \
+    Fcnl_##NAME< TP, T>,					   \
+    XprLiteral< TP >,						   \
+    MatrixConstReference<T, Rows, Cols>				   \
+  >,								   \
+  Rows, Cols							   \
+>								   \
+operator OP (TP lhs, const Matrix<T, Rows, Cols>& rhs) {	   \
+  typedef XprBinOp<						   \
+    Fcnl_##NAME< TP, T>,					   \
+    XprLiteral< TP >,						   \
+    MatrixConstReference<T, Rows, Cols>				   \
+  >							expr_type; \
+  return XprMatrix<expr_type, Rows, Cols>(			   \
+    expr_type(XprLiteral< TP >(lhs), rhs.const_ref()));		   \
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, int)
+TVMET_IMPLEMENT_MACRO(less, <, int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, int)
+TVMET_IMPLEMENT_MACRO(eq, ==, int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, int)
+TVMET_IMPLEMENT_MACRO(and, &&, int)
+TVMET_IMPLEMENT_MACRO(or, ||, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, long long int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, long long int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, long long int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, long long int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, long long int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long long int)
+TVMET_IMPLEMENT_MACRO(less, <, long long int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long long int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long long int)
+TVMET_IMPLEMENT_MACRO(eq, ==, long long int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long long int)
+TVMET_IMPLEMENT_MACRO(and, &&, long long int)
+TVMET_IMPLEMENT_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, float)
+TVMET_IMPLEMENT_MACRO(less, <, float)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, float)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, float)
+TVMET_IMPLEMENT_MACRO(eq, ==, float)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, float)
+TVMET_IMPLEMENT_MACRO(and, &&, float)
+TVMET_IMPLEMENT_MACRO(or, ||, float)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, double)
+TVMET_IMPLEMENT_MACRO(less, <, double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, double)
+TVMET_IMPLEMENT_MACRO(eq, ==, double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, double)
+TVMET_IMPLEMENT_MACRO(and, &&, double)
+TVMET_IMPLEMENT_MACRO(or, ||, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long double)
+TVMET_IMPLEMENT_MACRO(less, <, long double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long double)
+TVMET_IMPLEMENT_MACRO(eq, ==, long double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long double)
+TVMET_IMPLEMENT_MACRO(and, &&, long double)
+TVMET_IMPLEMENT_MACRO(or, ||, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * unary_operator(Matrix<T, Rows, Cols>)
+ * Note: per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				       \
+template <class T, std::size_t Rows, std::size_t Cols>		       \
+inline								       \
+XprMatrix<							       \
+  XprUnOp<							       \
+    Fcnl_##NAME<T>,						       \
+    MatrixConstReference<T, Rows, Cols>				       \
+  >,								       \
+  Rows, Cols							       \
+>								       \
+operator OP (const Matrix<T, Rows, Cols>& rhs) {		       \
+  typedef XprUnOp<						       \
+    Fcnl_##NAME<T>,						       \
+    MatrixConstReference<T, Rows, Cols>				       \
+  >  							 expr_type;    \
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(rhs.const_ref())); \
+}
+
+TVMET_IMPLEMENT_MACRO(not, !)
+TVMET_IMPLEMENT_MACRO(compl, ~)
+TVMET_IMPLEMENT_MACRO(neg, -)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_MATRIX_OPERATORS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h b/tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h
new file mode 100644
index 0000000..ff42c39
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h
@@ -0,0 +1,231 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixUnaryFunctions.h,v 1.9 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_MATRIX_UNARY_FUNCTIONS_H
+#define TVMET_MATRIX_UNARY_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+/*
+ * unary_function(Matrix<T, Rows, Cols>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class T, std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprUnOp<							\
+    Fcnl_##NAME<T>,						\
+    MatrixConstReference<T, Rows, Cols>				\
+  >,								\
+  Rows, Cols							\
+>								\
+NAME(const Matrix<T, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(abs)
+TVMET_DECLARE_MACRO(cbrt)
+TVMET_DECLARE_MACRO(ceil)
+TVMET_DECLARE_MACRO(floor)
+TVMET_DECLARE_MACRO(rint)
+TVMET_DECLARE_MACRO(sin)
+TVMET_DECLARE_MACRO(cos)
+TVMET_DECLARE_MACRO(tan)
+TVMET_DECLARE_MACRO(sinh)
+TVMET_DECLARE_MACRO(cosh)
+TVMET_DECLARE_MACRO(tanh)
+TVMET_DECLARE_MACRO(asin)
+TVMET_DECLARE_MACRO(acos)
+TVMET_DECLARE_MACRO(atan)
+TVMET_DECLARE_MACRO(exp)
+TVMET_DECLARE_MACRO(log)
+TVMET_DECLARE_MACRO(log10)
+TVMET_DECLARE_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_DECLARE_MACRO(asinh)
+TVMET_DECLARE_MACRO(acosh)
+TVMET_DECLARE_MACRO(atanh)
+TVMET_DECLARE_MACRO(expm1)
+TVMET_DECLARE_MACRO(log1p)
+TVMET_DECLARE_MACRO(erf)
+TVMET_DECLARE_MACRO(erfc)
+TVMET_DECLARE_MACRO(j0)
+TVMET_DECLARE_MACRO(j1)
+TVMET_DECLARE_MACRO(y0)
+TVMET_DECLARE_MACRO(y1)
+TVMET_DECLARE_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_DECLARE_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_DECLARE_MACRO(isinf)
+#endif
+TVMET_DECLARE_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * unary_function(Matrix<std::complex<T>, Rows, Cols>)
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+#define TVMET_DECLARE_MACRO(NAME)						\
+template<class T, std::size_t Rows, std::size_t Cols>				\
+inline										\
+XprMatrix<									\
+  XprUnOp<									\
+    Fcnl_##NAME< std::complex<T> >,						\
+    MatrixConstReference<std::complex<T>, Rows, Cols>				\
+  >,										\
+  Rows, Cols									\
+>										\
+NAME(const Matrix<std::complex<T>, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(real)
+TVMET_DECLARE_MACRO(imag)
+TVMET_DECLARE_MACRO(arg)
+TVMET_DECLARE_MACRO(norm)
+TVMET_DECLARE_MACRO(conj)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * unary_function(Matrix<T, Rows, Cols>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprUnOp<								\
+    Fcnl_##NAME<T>,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const Matrix<T, Rows, Cols>& rhs) {				\
+  typedef XprUnOp<							\
+    Fcnl_##NAME<T>,							\
+    MatrixConstReference<T, Rows, Cols>					\
+  > 							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(rhs.const_ref()));	\
+}
+
+TVMET_IMPLEMENT_MACRO(abs)
+TVMET_IMPLEMENT_MACRO(cbrt)
+TVMET_IMPLEMENT_MACRO(ceil)
+TVMET_IMPLEMENT_MACRO(floor)
+TVMET_IMPLEMENT_MACRO(rint)
+TVMET_IMPLEMENT_MACRO(sin)
+TVMET_IMPLEMENT_MACRO(cos)
+TVMET_IMPLEMENT_MACRO(tan)
+TVMET_IMPLEMENT_MACRO(sinh)
+TVMET_IMPLEMENT_MACRO(cosh)
+TVMET_IMPLEMENT_MACRO(tanh)
+TVMET_IMPLEMENT_MACRO(asin)
+TVMET_IMPLEMENT_MACRO(acos)
+TVMET_IMPLEMENT_MACRO(atan)
+TVMET_IMPLEMENT_MACRO(exp)
+TVMET_IMPLEMENT_MACRO(log)
+TVMET_IMPLEMENT_MACRO(log10)
+TVMET_IMPLEMENT_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_IMPLEMENT_MACRO(asinh)
+TVMET_IMPLEMENT_MACRO(acosh)
+TVMET_IMPLEMENT_MACRO(atanh)
+TVMET_IMPLEMENT_MACRO(expm1)
+TVMET_IMPLEMENT_MACRO(log1p)
+TVMET_IMPLEMENT_MACRO(erf)
+TVMET_IMPLEMENT_MACRO(erfc)
+TVMET_IMPLEMENT_MACRO(j0)
+TVMET_IMPLEMENT_MACRO(j1)
+TVMET_IMPLEMENT_MACRO(y0)
+TVMET_IMPLEMENT_MACRO(y1)
+TVMET_IMPLEMENT_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_IMPLEMENT_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_IMPLEMENT_MACRO(isinf)
+#endif
+TVMET_IMPLEMENT_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * unary_function(Matrix<std::complex<T>, Rows, Cols>)
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprUnOp<								\
+    Fcnl_##NAME< std::complex<T> >,					\
+    MatrixConstReference<std::complex<T>, Rows, Cols>			\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const Matrix<std::complex<T>, Rows, Cols>& rhs) {			\
+  typedef XprUnOp<							\
+    Fcnl_##NAME< std::complex<T> >,					\
+    MatrixConstReference<std::complex<T>, Rows, Cols>			\
+  > 							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(rhs.const_ref()));	\
+}
+
+TVMET_IMPLEMENT_MACRO(real)
+TVMET_IMPLEMENT_MACRO(imag)
+TVMET_IMPLEMENT_MACRO(arg)
+TVMET_IMPLEMENT_MACRO(norm)
+TVMET_IMPLEMENT_MACRO(conj)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+#endif // TVMET_MATRIX_UNARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/NumericTraits.h b/tvmet-1.7.1/include/tvmet/NumericTraits.h
new file mode 100644
index 0000000..955b189
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/NumericTraits.h
@@ -0,0 +1,1362 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: NumericTraits.h,v 1.11 2004/11/04 18:10:35 opetzold Exp $
+ */
+
+#ifndef TVMET_NUMERIC_TRAITS_H
+#define TVMET_NUMERIC_TRAITS_H
+
+#if defined(TVMET_HAVE_COMPLEX)
+#  include <complex>
+#endif
+#include <cmath>
+#include <limits>
+
+#include <tvmet/CompileTimeError.h>
+
+
+namespace tvmet {
+
+
+/**
+ * \class NumericTraits NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits for integral types for operations.
+ *
+ * For each type we have to specialize this traits.
+ *
+ * \note Keep in mind that the long types long long and long double doesn't
+ *       have traits. This is due to the sum_type. We can't give a guarantee
+ *       that there is a type of holding the sum. Therefore using this traits
+ *       is only safe if you have long long resp. long double types by
+ *       working on long ints and doubles. Otherwise you will get not expected
+ *       result for some circumstances. Anyway, you can use big integer/float
+ *       libraries and specialize the traits by your own.
+ *
+ * \todo The abs function of complex<non_float_type> can have an
+ *       overrun due to numeric computation. Solve it (someone
+ *       using value_type=long here?)
+ */
+template<class T>
+struct NumericTraits {
+  typedef T					base_type;
+  typedef T					value_type;
+  typedef value_type				sum_type;
+  typedef value_type				diff_type;
+  typedef value_type				float_type;
+  typedef value_type				signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type x);
+
+  static inline
+  base_type imag(argument_type x);
+
+  static inline
+  value_type conj(argument_type x);
+
+  static inline
+  base_type abs(argument_type x);
+
+  static inline
+  value_type sqrt(argument_type x);
+
+  static inline
+  base_type norm_1(argument_type x) {
+    return NumericTraits<base_type>::abs(traits_type::real(x))
+         + NumericTraits<base_type>::abs(traits_type::imag(x));
+  }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(x)),
+		    NumericTraits<base_type>::abs(traits_type::imag(x)));
+   }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+};
+
+
+/*
+ * numeric traits for standard types
+ */
+
+
+/**
+ * \class NumericTraits<char> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for char.
+ */
+template<>
+struct NumericTraits<char> {
+  typedef char					value_type;
+  typedef value_type				base_type;
+  typedef long					sum_type;
+  typedef int					diff_type;
+  typedef float					float_type;
+  typedef char					signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<unsigned char> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for unsigned char.
+ *
+ * \note Normally it doesn't make sense to call <tt>conj</tt>
+ *       for an unsigned type! An unary minus operator
+ *       applied to unsigned type will result unsigned. Therefore
+ *       this function is missing here.
+ */
+template<>
+struct NumericTraits<unsigned char> {
+  typedef unsigned char 			value_type;
+  typedef value_type				base_type;
+  typedef unsigned long	 			sum_type;
+  typedef int		 			diff_type;
+  typedef float		 			float_type;
+  typedef int					signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<short int> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for short int.
+ */
+template<>
+struct NumericTraits<short int> {
+  typedef short int 				value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef long long		 		sum_type;
+#else
+  typedef long 					sum_type;
+#endif
+  typedef int			 		diff_type;
+  typedef float 				float_type;
+  typedef short int				signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<short unsigned int> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for short unsigned int.
+ *
+ * \note Normally it doesn't make sense to call <tt>conj</tt>
+ *       for an unsigned type! An unary minus operator
+ *       applied to unsigned type will result unsigned. Therefore
+ *       this function is missing here.
+ */
+template<>
+struct NumericTraits<short unsigned int> {
+  typedef short unsigned int			value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef unsigned long long			sum_type;
+#else
+  typedef unsigned long 			sum_type;
+#endif
+  typedef int 					diff_type;
+  typedef float 				float_type;
+  typedef int					signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<int> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for int.
+ */
+template<>
+struct NumericTraits<int> {
+  typedef int 					value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef long long		 		sum_type;
+#else
+  typedef long 					sum_type;
+#endif
+  typedef int			 		diff_type;
+  typedef double			 	float_type;
+  typedef int					signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<unsigned int> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for unsigned int.
+ *
+ * \note Normally it doesn't make sense to call <tt>conj</tt>
+ *       for an unsigned type! An unary minus operator
+ *       applied to unsigned type will result unsigned. Therefore
+ *       this function is missing here.
+ */
+template<>
+struct NumericTraits<unsigned int> {
+  typedef unsigned int 		 		value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef unsigned long long			sum_type;
+#else
+  typedef unsigned long 			sum_type;
+#endif
+  typedef int 			 		diff_type;
+  typedef double 				float_type;
+  typedef long			 		signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  base_type abs(argument_type x) { return x; }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<long> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for long.
+ */
+template<>
+struct NumericTraits<long> {
+  typedef long 			 		value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef long long		 		sum_type;
+#else
+  typedef long			  		sum_type;
+#endif
+  typedef long 		 			diff_type;
+  typedef double 				float_type;
+  typedef long		 	 		signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<unsigned long> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for unsigned long.
+ *
+ * \note Normally it doesn't make sense to call <tt>conj</tt>
+ *       for an unsigned type! An unary minus operator
+ *       applied to unsigned type will result unsigned. Therefore
+ *       this function is missing here.
+ */
+template<>
+struct NumericTraits<unsigned long> {
+  typedef unsigned long 			value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef unsigned long long 			sum_type;
+#else
+  typedef unsigned long 			sum_type;
+#endif
+  typedef unsigned long 			diff_type;
+  typedef double 				float_type;
+  typedef long					signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  base_type abs(argument_type x) { return x; }
+
+  static inline
+  value_type sqrt(argument_type x) {
+    return static_cast<value_type>(std::sqrt(static_cast<float_type>(x)));
+  }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) { return lhs == rhs; }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<float> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for float.
+ */
+template<>
+struct NumericTraits<float> {
+  typedef float					value_type;
+  typedef value_type				base_type;
+  typedef double 				sum_type;
+  typedef float 				diff_type;
+  typedef float 				float_type;
+  typedef float					signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) { return std::sqrt(x); }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits<double> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for double.
+ */
+template<>
+struct NumericTraits<double> {
+  typedef double 				value_type;
+  typedef value_type				base_type;
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+  typedef long double		 		sum_type;
+#else
+  typedef double 				sum_type;
+#endif
+  typedef double				diff_type;
+  typedef double 				float_type;
+  typedef double				signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) { return std::sqrt(x); }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+/**
+ * \class NumericTraits<long double> NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for long double.
+ */
+template<>
+struct NumericTraits<long double> {
+  typedef long double 				value_type;
+  typedef value_type				base_type;
+  typedef long double		 		sum_type;
+  typedef long double				diff_type;
+  typedef long double 				float_type;
+  typedef long double				signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef value_type				argument_type;
+
+  static inline
+  base_type real(argument_type x) { return x; }
+
+  static inline
+  base_type imag(argument_type x) { return 0; }
+
+  static inline
+  value_type conj(argument_type x) { return x; }
+
+  static inline
+  base_type abs(argument_type x) { return std::abs(x); }
+
+  static inline
+  value_type sqrt(argument_type x) { return std::sqrt(x); }
+
+  static inline
+  base_type norm_1(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_2(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  base_type norm_inf(argument_type x) { return traits_type::abs(x); }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+
+  enum { is_complex = false };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 1,	/**< Complexity on plus/minus ops. */
+    ops_muls = 1	/**< Complexity on multiplications. */
+  };
+};
+#endif // TVMET_HAVE_LONG_DOUBLE
+
+
+/*
+ * numeric traits for complex types
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+
+/**
+ * \class NumericTraits< std::complex<int> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<int>.
+ */
+template<>
+struct NumericTraits< std::complex<int> > {
+  typedef int					base_type;
+  typedef std::complex<int>			value_type;
+  typedef std::complex<long> 			sum_type;
+  typedef std::complex<int>			diff_type;
+  typedef std::complex<float>			float_type;
+  typedef std::complex<int>			signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  value_type conj(argument_type z) { return std::conj(z); }
+
+  static inline
+  base_type abs(argument_type z) {
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    // XXX probably case of overrun; header complex uses scaling
+    return static_cast<base_type>(NumericTraits<base_type>::sqrt(x * x + y * y));
+  }
+
+  static /* inline */
+  value_type sqrt(argument_type z) {
+    // borrowed and adapted from header complex
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    if(x == base_type()) {
+	base_type t = NumericTraits<base_type>::sqrt(
+                        NumericTraits<base_type>::abs(y) / 2);
+	return value_type(t, y < base_type() ? -t : t);
+    }
+    else {
+      base_type t = NumericTraits<base_type>::sqrt(
+		      2 * (traits_type::abs(z)
+		            + NumericTraits<base_type>::abs(x)));
+      base_type u = t / 2;
+      return x > base_type()
+	? value_type(u, y / t)
+	: value_type(NumericTraits<base_type>::abs(y) / t, y < base_type() ? -u : u);
+    }
+  }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+		    NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    return (traits_type::real(lhs) == traits_type::real(rhs))
+        && (traits_type::imag(lhs) == traits_type::imag(rhs));
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits< std::complex<unsigned int> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<unsigned int>.
+ *
+ * \note Normally it doesn't make sense to call <tt>conj</tt>
+ *       for an unsigned type! An unary minus operator
+ *       applied to unsigned type will result unsigned. Therefore
+ *       this function is missing here.
+ */
+template<>
+struct NumericTraits< std::complex<unsigned int> > {
+  typedef unsigned int				base_type;
+  typedef std::complex<unsigned int> 		value_type;
+  typedef std::complex<unsigned long> 		sum_type;
+  typedef std::complex<int>			diff_type;
+  typedef std::complex<float>			float_type;
+  typedef std::complex<int>			signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  base_type abs(argument_type z) {
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    // XXX probably case of overrun; header complex uses scaling
+    return static_cast<base_type>(NumericTraits<base_type>::sqrt(x * x + y * y));
+  }
+
+  static /* inline */
+  value_type sqrt(argument_type z) {
+    // borrowed and adapted from header complex
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    if(x == base_type()) {
+	base_type t = NumericTraits<base_type>::sqrt(
+                        NumericTraits<base_type>::abs(y) / 2);
+	return value_type(t, t);
+    }
+    else {
+      base_type t = NumericTraits<base_type>::sqrt(
+		      2 * (traits_type::abs(z)
+		            + NumericTraits<base_type>::abs(x)));
+      return value_type(t / 2, y / t);
+    }
+  }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+		    NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    return (traits_type::real(lhs) == traits_type::real(rhs))
+        && (traits_type::imag(lhs) == traits_type::imag(rhs));
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits< std::complex<long> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<long>.
+ */
+template<>
+struct NumericTraits< std::complex<long> > {
+  typedef long					base_type;
+  typedef std::complex<long>			value_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef std::complex<long long>		sum_type;
+#else
+  typedef std::complex<long>			sum_type;
+#endif
+  typedef std::complex<int>			diff_type;
+  typedef std::complex<float>			float_type;
+  typedef std::complex<int>			signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  value_type conj(argument_type z) { return std::conj(z); }
+
+  static inline
+  base_type abs(argument_type z) {
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    // XXX probably case of overrun; header complex uses scaling
+    return static_cast<base_type>(NumericTraits<base_type>::sqrt(x * x + y * y));
+  }
+
+  static /* inline */
+  value_type sqrt(argument_type z) {
+    // borrowed and adapted from header complex
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    if(x == base_type()) {
+	base_type t = NumericTraits<base_type>::sqrt(
+                        NumericTraits<base_type>::abs(y) / 2);
+	return value_type(t, y < base_type() ? -t : t);
+    }
+    else {
+      base_type t = NumericTraits<base_type>::sqrt(
+		      2 * (traits_type::abs(z)
+		            + NumericTraits<base_type>::abs(x)));
+      base_type u = t / 2;
+      return x > base_type()
+	? value_type(u, y / t)
+	: value_type(NumericTraits<base_type>::abs(y) / t, y < base_type() ? -u : u);
+    }
+  }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+		    NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    return (traits_type::real(lhs) == traits_type::real(rhs))
+        && (traits_type::imag(lhs) == traits_type::imag(rhs));
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits< std::complex<unsigned long> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<unsigned long>.
+ *
+ * \note Normally it doesn't make sense to call <tt>conj</tt>
+ *       for an unsigned type! An unary minus operator
+ *       applied to unsigned type will result unsigned. Therefore
+ *       this function is missing here.
+ */
+template<>
+struct NumericTraits< std::complex<unsigned long> > {
+  typedef unsigned long				base_type;
+  typedef std::complex<unsigned long>		value_type;
+#if defined(TVMET_HAVE_LONG_LONG)
+  typedef std::complex<unsigned long long>	sum_type;
+#else
+  typedef std::complex<unsigned long>		sum_type;
+#endif
+  typedef std::complex<long>			diff_type;
+  typedef std::complex<float>			float_type;
+  typedef std::complex<long>			signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  base_type abs(argument_type z) {
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    // XXX probably case of overrun; header complex uses scaling
+    return static_cast<base_type>(NumericTraits<base_type>::sqrt(x * x + y * y));
+  }
+
+  static /* inline */
+  value_type sqrt(argument_type z) {
+    // borrowed and adapted from header complex
+    base_type x = z.real();
+    base_type y = z.imag();
+
+    if(x == base_type()) {
+	base_type t = NumericTraits<base_type>::sqrt(
+                        NumericTraits<base_type>::abs(y) / 2);
+	return value_type(t, t);
+    }
+    else {
+      base_type t = NumericTraits<base_type>::sqrt(
+		      2 * (traits_type::abs(z)
+		            + NumericTraits<base_type>::abs(x)));
+      return value_type(t / 2, y / t);
+    }
+  }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+		    NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    return (traits_type::real(lhs) == traits_type::real(rhs))
+        && (traits_type::imag(lhs) == traits_type::imag(rhs));
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity  on operations.*/
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits< std::complex<float> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<float>.
+ */
+template<>
+struct NumericTraits< std::complex<float> > {
+  typedef float					base_type;
+  typedef std::complex<float>			value_type;
+  typedef std::complex<double>			sum_type;
+  typedef std::complex<float>			diff_type;
+  typedef std::complex<float>			float_type;
+  typedef std::complex<float>			signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  value_type conj(argument_type z) { return std::conj(z); }
+
+  static inline
+  base_type abs(argument_type z) { return std::abs(z); }
+
+  static inline
+  value_type sqrt(argument_type z) { return std::sqrt(z); }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+	            NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+ static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+
+
+/**
+ * \class NumericTraits< std::complex<double> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<double>.
+ */
+template<>
+struct NumericTraits< std::complex<double> > {
+  typedef double				base_type;
+  typedef std::complex<double>			value_type;
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+  typedef std::complex<long double> 		sum_type;
+#else
+  typedef std::complex<double>			sum_type;
+#endif
+  typedef std::complex<double>			diff_type;
+  typedef std::complex<double>			float_type;
+  typedef std::complex<double>			signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  value_type conj(argument_type z) { return std::conj(z); }
+
+  static inline
+  base_type abs(argument_type z) { return std::abs(z); }
+
+  static inline
+  value_type sqrt(argument_type z) { return std::sqrt(z); }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+	            NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+ static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+/**
+ * \class NumericTraits< std::complex<long double> > NumericTraits.h "tvmet/NumericTraits.h"
+ * \brief Traits specialized for std::complex<double>.
+ */
+template<>
+struct NumericTraits< std::complex<long double> > {
+  typedef long double				base_type;
+  typedef std::complex<long double>		value_type;
+  typedef std::complex<long double> 		sum_type;
+  typedef std::complex<long double>		diff_type;
+  typedef std::complex<long double>		float_type;
+  typedef std::complex<long double>		signed_type;
+
+  typedef NumericTraits<value_type>		traits_type;
+  typedef const value_type&			argument_type;
+
+  static inline
+  base_type real(argument_type z) { return std::real(z); }
+
+  static inline
+  base_type imag(argument_type z) { return std::imag(z); }
+
+  static inline
+  value_type conj(argument_type z) { return std::conj(z); }
+
+  static inline
+  base_type abs(argument_type z) { return std::abs(z); }
+
+  static inline
+  value_type sqrt(argument_type z) { return std::sqrt(z); }
+
+  static inline
+  base_type norm_1(argument_type z) {
+    return NumericTraits<base_type>::abs((traits_type::real(z)))
+         + NumericTraits<base_type>::abs((traits_type::imag(z)));
+  }
+
+  static inline
+  base_type norm_2(argument_type z) { return traits_type::abs(z); }
+
+  static inline
+  base_type norm_inf(argument_type z) {
+    return std::max(NumericTraits<base_type>::abs(traits_type::real(z)),
+	            NumericTraits<base_type>::abs(traits_type::imag(z)));
+  }
+
+  static inline
+  bool equals(argument_type lhs, argument_type rhs) {
+    static base_type sqrt_epsilon(
+      NumericTraits<base_type>::sqrt(
+        std::numeric_limits<base_type>::epsilon()));
+
+    return traits_type::norm_inf(lhs - rhs) < sqrt_epsilon *
+      std::max(std::max(traits_type::norm_inf(lhs),
+			traits_type::norm_inf(rhs)),
+	       std::numeric_limits<base_type>::min());
+  }
+
+  enum { is_complex = true };
+
+  /** Complexity on operations. */
+  enum {
+    ops_plus = 2,	/**< Complexity on plus/minus ops. */
+    ops_muls = 6	/**< Complexity on multiplications. */
+  };
+};
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+
+#endif //  TVMET_NUMERIC_TRAITS_H
+
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/RunTimeError.h b/tvmet-1.7.1/include/tvmet/RunTimeError.h
new file mode 100644
index 0000000..2ce4269
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/RunTimeError.h
@@ -0,0 +1,65 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: RunTimeError.h,v 1.9 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#ifndef TVMET_RUN_TIME_ERROR_H
+#define TVMET_RUN_TIME_ERROR_H
+
+#include <cassert>
+
+
+namespace tvmet {
+
+
+/**
+ * \def TVMET_RT_CONDITION(XPR, MSG)
+ * \brief If TVMET_DEBUG is defined it checks the condition XPR and prints
+ * an error message MSG at runtime.
+ */
+#if defined(TVMET_DEBUG)
+
+#define TVMET_RT_CONDITION(XPR, MSG) {					\
+  if(!(XPR)) {								\
+    std::cerr << "[tvmet] Precondition failure in " << __FILE__		\
+              << ", line " << __LINE__ << ": "				\
+              << MSG << std::endl;					\
+    std::cerr.flush();							\
+    assert(0);								\
+  }									\
+}
+
+#else
+
+#define TVMET_RT_CONDITION(XPR, MSG)
+
+#endif
+
+
+} // namespace tvmet
+
+
+#endif // TVMET_RUN_TIME_ERROR_H
+
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/TvmetBase.h b/tvmet-1.7.1/include/tvmet/TvmetBase.h
new file mode 100644
index 0000000..b5a6fd4
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/TvmetBase.h
@@ -0,0 +1,101 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TvmetBase.h,v 1.11 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_BASE_H
+#define TVMET_BASE_H
+
+#include <iosfwd>				// io streams forward declaration
+#include <typeinfo>				// rtti: used by Xpr.h level printing
+#include <cmath>				// unary and binary math
+#include <cstdlib>				// labs
+
+namespace tvmet {
+
+
+/**
+ * \class TvmetBase TvmetBase.h "tvmet/TvmetBase.h"
+ * \brief Base class
+ * Used for static polymorph call of print_xpr
+ */
+template<class E> class TvmetBase { };
+
+
+/**
+ * \class IndentLevel TvmetBase.h "tvmet/TvmetBase.h"
+ * \brief Prints the level indent.
+ */
+class IndentLevel : public TvmetBase< IndentLevel >
+{
+public:
+  IndentLevel(std::size_t level) : m_level(level) { }
+
+  std::ostream& print_xpr(std::ostream& os) const {
+    for(std::size_t i = 0; i != m_level; ++i) os << "   ";
+    return os;
+  }
+
+private:
+  std::size_t 					m_level;
+};
+
+
+/**
+ * \fn operator<<(std::ostream& os, const TvmetBase<E>& e)
+ * \brief overloaded ostream operator using static polymorphic.
+ * \ingroup _binary_operator
+ */
+template<class E>
+inline
+std::ostream& operator<<(std::ostream& os, const TvmetBase<E>& e) {
+  static_cast<const E&>(e).print_xpr(os);
+  return os;
+}
+
+
+/**
+ * \class dispatch TvmetBase.h "tvmet/TvmetBase.h"
+ * \brief Class helper to distuingish between e.g. meta
+ *        and loop strategy used.
+ */
+template<bool> struct dispatch;
+
+/**
+ * \class dispatch<true> TvmetBase.h "tvmet/TvmetBase.h"
+ * \brief specialized.
+ */
+template<> struct dispatch<true>  { };
+
+/**
+ * \class dispatch<false> TvmetBase.h "tvmet/TvmetBase.h"
+ * \brief specialized.
+ */
+template<> struct dispatch<false> { };
+
+
+} // namespace tvmet
+
+#endif // TVMET_BASE_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/TypePromotion.h b/tvmet-1.7.1/include/tvmet/TypePromotion.h
new file mode 100644
index 0000000..5255879
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/TypePromotion.h
@@ -0,0 +1,231 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TypePromotion.h,v 1.6 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#ifndef TVMET_TYPE_PROMOTION_H
+#define TVMET_TYPE_PROMOTION_H
+
+namespace tvmet {
+
+
+/**
+ * \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h"
+ * \brief Declaring ranks of types to avoid specializing
+ *
+ * All possible promoted types. For example, bool=1, int=2, float=3, double=4,
+ * etc. We can use a traits class to map from a type such as float onto its
+ * "precision rank". We will promote to whichever type has a higher
+ * "precision rank". f there is no "precision rank" for a type, we'll
+ * promote to whichever type requires more storage space
+ * (and hopefully more precision).
+ */
+template<class T>
+struct PrecisionTraits {
+  enum {
+    rank = 0,			/**< the rank of type. */
+    known = 0 			/**< true, if the rank is specialized = known. */
+  };
+};
+
+
+#define TVMET_PRECISION(T,R)      					\
+template<>                          					\
+struct PrecisionTraits< T > {        					\
+  enum {                          					\
+    rank = R,                   					\
+    known = 1                   					\
+  };                              					\
+};
+
+
+/*
+ * pod types
+ */
+TVMET_PRECISION(int, 100)
+TVMET_PRECISION(unsigned int, 200)
+TVMET_PRECISION(long, 300)
+TVMET_PRECISION(unsigned long, 400)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_PRECISION(long long, 500)
+TVMET_PRECISION(unsigned long long, 600)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_PRECISION(float, 700)
+TVMET_PRECISION(double, 800)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_PRECISION(long double, 900)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+
+/*
+ * complex types
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_PRECISION(std::complex<int>, 1000)
+TVMET_PRECISION(std::complex<unsigned int>, 1100)
+TVMET_PRECISION(std::complex<long>, 1200)
+TVMET_PRECISION(std::complex<unsigned long>, 1300)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_PRECISION(std::complex<long long>, 1400)
+TVMET_PRECISION(std::complex<unsigned long long>, 1500)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_PRECISION(std::complex<float>, 1600)
+TVMET_PRECISION(std::complex<double>, 1700)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_PRECISION(std::complex<long double>, 1800)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/** \class PrecisionTraits<int>				TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<unsigned int> 		TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<long>			TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<unsigned long> 		TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<long long>			TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<unsigned long long> 		TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<float>			TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<double>			TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits<long double>			TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<int> >		TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<unsigned int> > TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<long> >	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<unsigned long> > TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<long long> >	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<unsigned long long> > TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<float> >	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<double> >	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class PrecisionTraits< std::complex<long double> >	TypePromotion.h "tvmet/TypePromotion.h" */
+
+#undef TVMET_PRECISION
+
+
+/**
+ * \class AutopromoteTraits TypePromotion.h "tvmet/TypePromotion.h"
+ * \brief The promoted types traits.
+ */
+template<class T>
+struct AutopromoteTraits {
+  typedef T value_type;
+};
+
+
+/*
+ * Defines a macro for specializing/defining
+ * the promotion traits. bool, char, unsigned char, short int, etc. will
+ * be autopromote to int, as in C and C++.
+ */
+#define TVMET_AUTOPROMOTE(T1,T2)   					\
+template<>                          				 	\
+struct AutopromoteTraits<T1> {     					\
+  typedef T2 value_type;          					\
+};
+
+TVMET_AUTOPROMOTE(bool, int)
+TVMET_AUTOPROMOTE(char, int)
+TVMET_AUTOPROMOTE(unsigned char, int)
+TVMET_AUTOPROMOTE(short int, int)
+TVMET_AUTOPROMOTE(short unsigned int, unsigned int)
+
+/** \class AutopromoteTraits<bool>	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class AutopromoteTraits<char>	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class AutopromoteTraits<unsigned char> TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class AutopromoteTraits<short int>	TypePromotion.h "tvmet/TypePromotion.h" */
+/** \class AutopromoteTraits<short unsigned int> TypePromotion.h "tvmet/TypePromotion.h" */
+
+#undef TVMET_AUTOPROMOTE
+
+
+/**
+ * \class promoteTo TypePromotion.h "tvmet/TypePromotion.h"
+ * \brief Promote to T1.
+ */
+template<class T1, class T2, int promoteToT1>
+struct promoteTo {
+  typedef T1 value_type;
+};
+
+
+/**
+ * \class promoteTo<T1,T2,0> TypePromotion.h "tvmet/TypePromotion.h"
+ * \brief Promote to T2
+ */
+template<class T1, class T2>
+struct promoteTo<T1,T2,0> {
+  typedef T2 value_type;
+};
+
+
+/**
+ * \class PromoteTraits TypePromotion.h "tvmet/TypePromotion.h"
+ * \brief Promote type traits
+ */
+template<class T1org, class T2org>
+class PromoteTraits {
+  // Handle promotion of small integers to int/unsigned int
+  typedef typename AutopromoteTraits<T1org>::value_type T1;
+  typedef typename AutopromoteTraits<T2org>::value_type T2;
+
+  enum {
+    // True if T1 is higher ranked
+    T1IsBetter = int(PrecisionTraits<T1>::rank) > int(PrecisionTraits<T2>::rank),
+
+    // True if we know ranks for both T1 and T2
+    knowBothRanks = PrecisionTraits<T1>::known && PrecisionTraits<T2>::known,
+
+    // True if we know T1 but not T2
+    knowT1butNotT2 = PrecisionTraits<T1>::known && !(PrecisionTraits<T2>::known),
+
+    // True if we know T2 but not T1
+    knowT2butNotT1 =  PrecisionTraits<T2>::known && !(PrecisionTraits<T1>::known),
+
+    // True if T1 is bigger than T2
+    T1IsLarger = sizeof(T1) >= sizeof(T2),
+
+    // We know T1 but not T2: true
+    // We know T2 but not T1: false
+    // Otherwise, if T1 is bigger than T2: true
+    defaultPromotion = knowT1butNotT2 ? false : (knowT2butNotT1 ? true : T1IsLarger),
+
+    // If we have both ranks, then use them.
+    // If we have only one rank, then use the unknown type.
+    // If we have neither rank, then promote to the larger type.
+    promoteToT1 = (knowBothRanks ? T1IsBetter : defaultPromotion) ? 1 : 0
+  };
+
+ public:
+  typedef typename promoteTo<T1,T2,promoteToT1>::value_type value_type;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_TYPE_PROMOTION_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/UnaryFunctionals.h b/tvmet-1.7.1/include/tvmet/UnaryFunctionals.h
new file mode 100644
index 0000000..3268c12
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/UnaryFunctionals.h
@@ -0,0 +1,364 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: UnaryFunctionals.h,v 1.18 2004/10/04 11:44:42 opetzold Exp $
+ */
+
+#ifndef TVMET_UNARY_FUNCTIONAL_H
+#define TVMET_UNARY_FUNCTIONAL_H
+
+namespace tvmet {
+
+
+/**
+ * \class Fcnl_not	UnaryFunctionals.h "tvmet/UnaryFunctionals.h"
+ * \brief unary functional for logical not.
+ */
+template <class T>
+struct Fcnl_not : public UnaryFunctional {
+  static inline
+  bool apply_on(T rhs) {
+    return !rhs;
+  }
+
+  static
+  void print_xpr(std::ostream& os, std::size_t l=0) {
+    os << IndentLevel(l) << "Fcnl_not<T="
+       << typeid(T).name() << ">,"
+       << std::endl;
+  }
+};
+
+
+/** \class Fcnl_compl	UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_neg		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class T>							\
+struct Fcnl_##NAME : public UnaryFunctional {				\
+  typedef T						value_type;	\
+									\
+  static inline 							\
+  value_type apply_on(value_type rhs) {					\
+    return OP rhs;							\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(T).name() << ">,"					\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(compl, ~)
+TVMET_IMPLEMENT_MACRO(neg, -)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/** \class Fcnl_abs		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_ceil		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_floor		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_sin		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_cos		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_tan		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_sinh		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_cosh		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_tanh		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_asin		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_acos		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_atan		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_exp		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_log		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_log10		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_sqrt		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template <class T>							\
+struct Fcnl_##NAME : public UnaryFunctional {				\
+  typedef T						value_type;	\
+  									\
+  static inline 							\
+  value_type apply_on(value_type rhs) {					\
+    return TVMET_STD_SCOPE(NAME)(rhs);					\
+  }									\
+  									\
+ static 								\
+ void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(value_type).name() << ">,"				\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(abs)	// specialized later, see below
+TVMET_IMPLEMENT_MACRO(ceil)
+TVMET_IMPLEMENT_MACRO(floor)
+TVMET_IMPLEMENT_MACRO(sin)
+TVMET_IMPLEMENT_MACRO(cos)
+TVMET_IMPLEMENT_MACRO(tan)
+TVMET_IMPLEMENT_MACRO(sinh)
+TVMET_IMPLEMENT_MACRO(cosh)
+TVMET_IMPLEMENT_MACRO(tanh)
+TVMET_IMPLEMENT_MACRO(asin)
+TVMET_IMPLEMENT_MACRO(acos)
+TVMET_IMPLEMENT_MACRO(atan)
+TVMET_IMPLEMENT_MACRO(exp)
+TVMET_IMPLEMENT_MACRO(log)
+TVMET_IMPLEMENT_MACRO(log10)
+TVMET_IMPLEMENT_MACRO(sqrt)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/** \class Fcnl_cbrt		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_rint		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template <class T>							\
+struct Fcnl_##NAME : public UnaryFunctional {				\
+  typedef T						value_type;	\
+									\
+  static inline								\
+  value_type apply_on(value_type rhs) {					\
+    return TVMET_GLOBAL_SCOPE(NAME)(rhs);				\
+  }									\
+									\
+ static									\
+ void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(value_type).name() << ">,"				\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(cbrt)
+TVMET_IMPLEMENT_MACRO(rint)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+
+/** \class Fcnl_asinh		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_acosh		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_atanh		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_expm1		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_log1p		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_erf		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_erfc		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_j0		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_j1		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_y0		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_y1		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_lgamma		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template <class T>							\
+struct Fcnl_##NAME : public UnaryFunctional {				\
+  typedef T						value_type;	\
+									\
+  static inline 							\
+  value_type apply_on(value_type rhs) {					\
+    return TVMET_GLOBAL_SCOPE(NAME)(rhs);				\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(value_type).name() << ">,"				\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(asinh)
+TVMET_IMPLEMENT_MACRO(acosh)
+TVMET_IMPLEMENT_MACRO(atanh)
+TVMET_IMPLEMENT_MACRO(expm1)
+TVMET_IMPLEMENT_MACRO(log1p)
+TVMET_IMPLEMENT_MACRO(erf)
+TVMET_IMPLEMENT_MACRO(erfc)
+TVMET_IMPLEMENT_MACRO(j0)
+TVMET_IMPLEMENT_MACRO(j1)
+TVMET_IMPLEMENT_MACRO(y0)
+TVMET_IMPLEMENT_MACRO(y1)
+TVMET_IMPLEMENT_MACRO(lgamma)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+
+/** \class Fcnl_abs<long int>		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_abs<long long int>	UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_abs<float>		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_abs<double>		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_abs<long double> 	UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME, POD)				\
+template <class T> struct Fcnl_##NAME;					\
+template <>								\
+struct Fcnl_##NAME< POD > : public UnaryFunctional {			\
+  typedef POD						value_type;	\
+									\
+  static inline 							\
+  value_type apply_on(value_type rhs) {					\
+    return TVMET_STD_SCOPE(NAME)(rhs);					\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(value_type).name() << ">,"				\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(labs, long int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(labs, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(fabs, float)
+TVMET_IMPLEMENT_MACRO(fabs, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(fabs, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * complex support
+ */
+
+#if defined(TVMET_HAVE_COMPLEX)
+/**
+ * \class Fcnl_abs< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h"
+ */
+template <class T>
+struct Fcnl_abs< std::complex<T> > : public UnaryFunctional {
+  typedef T						value_type;
+
+  static inline
+  value_type apply_on(const std::complex<T>& rhs) {
+    return std::abs(rhs);
+  }
+
+  static
+  void print_xpr(std::ostream& os, std::size_t l=0) {
+    os << IndentLevel(l) << "Fcnl_abs<T="
+       << typeid(std::complex<T>).name() << ">,"
+       << std::endl;
+  }
+};
+
+
+/**
+ * \class Fcnl_conj< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h"
+ * \brief %Functional for conj.
+ */
+template <class T> struct Fcnl_conj : public UnaryFunctional { };
+
+
+/** \class Fcnl_conj< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+template <class T>
+struct Fcnl_conj< std::complex<T> > : public UnaryFunctional {
+  typedef std::complex<T>                               value_type;
+
+  static inline
+  value_type apply_on(const std::complex<T>& rhs) {
+    return std::conj(rhs);
+  }
+
+  static
+  void print_xpr(std::ostream& os, std::size_t l=0) {
+    os << IndentLevel(l) << "Fcnl_conj<T="
+       << typeid(std::complex<T>).name() << ">,"
+       << std::endl;
+  }
+};
+
+
+/** \class Fcnl_real< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_imag< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_arg< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_norm< std::complex<T> > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template <class T> struct Fcnl_##NAME;					\
+template <class T>							\
+struct Fcnl_##NAME< std::complex<T> > : public UnaryFunctional {	\
+  typedef T						value_type;	\
+									\
+  static inline 							\
+  value_type apply_on(const std::complex<T>& rhs) {			\
+    return TVMET_STD_SCOPE(NAME)(rhs);					\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(std::complex<T>).name() << ">,"			\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(real)
+TVMET_IMPLEMENT_MACRO(imag)
+TVMET_IMPLEMENT_MACRO(arg)
+TVMET_IMPLEMENT_MACRO(norm)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/** \class Fcnl_isnan		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_isinf		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+/** \class Fcnl_finite		UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */
+#define TVMET_IMPLEMENT_MACRO(NAME, POD)				\
+template <class T>							\
+struct Fcnl_##NAME : public UnaryFunctional {				\
+  typedef T						value_type;	\
+									\
+  static inline 							\
+  POD apply_on(T rhs) {							\
+    return TVMET_GLOBAL_SCOPE(NAME)(rhs);				\
+  }									\
+  									\
+  static 								\
+  void print_xpr(std::ostream& os, std::size_t l=0) {			\
+    os << IndentLevel(l) << "Fcnl_" << #NAME << "<T="			\
+       << typeid(POD).name() << ">,"					\
+       << std::endl;							\
+  }									\
+};
+
+TVMET_IMPLEMENT_MACRO(isnan, int)
+TVMET_IMPLEMENT_MACRO(isinf, int)
+TVMET_IMPLEMENT_MACRO(finite, int)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_UNARY_FUNCTIONAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/Vector.h b/tvmet-1.7.1/include/tvmet/Vector.h
new file mode 100644
index 0000000..0ea4861
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/Vector.h
@@ -0,0 +1,562 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Vector.h,v 1.44 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_H
+#define TVMET_VECTOR_H
+
+#include <iterator>					// reverse_iterator
+
+#include <tvmet/tvmet.h>
+#include <tvmet/TypePromotion.h>
+#include <tvmet/CommaInitializer.h>
+#include <tvmet/RunTimeError.h>
+
+#include <tvmet/xpr/Vector.h>
+
+namespace tvmet {
+
+
+/* forwards */
+template<class T, std::size_t Sz> class Vector;
+
+
+/**
+ * \class VectorConstReference Vector.h "tvmet/Vector.h"
+ * \brief Const value iterator for ET
+ */
+template<class T, std::size_t Sz>
+class VectorConstReference
+  : public TvmetBase< VectorConstReference<T, Sz> >
+{
+public: // types
+  typedef T 						value_type;
+  typedef T*						pointer;
+  typedef const T*					const_pointer;
+
+public:
+  /** Dimensions. */
+  enum {
+    Size = Sz			/**< The size of the vector. */
+  };
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops        = Size
+  };
+
+private:
+  VectorConstReference();
+  VectorConstReference& operator=(const VectorConstReference&);
+
+public:
+  /** Constructor. */
+  explicit VectorConstReference(const Vector<T, Size>& rhs)
+    : m_data(rhs.data())
+  { }
+
+  /** Constructor by a given memory pointer. */
+  explicit VectorConstReference(const_pointer data)
+    : m_data(data)
+  { }
+
+public: // access operators
+  /** access by index. */
+  value_type operator()(std::size_t i) const {
+    TVMET_RT_CONDITION(i < Size, "VectorConstReference Bounce Violation")
+    return m_data[i];
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l)
+       << "VectorConstReference[O=" << ops << "]<"
+       << "T=" << typeid(T).name() << ">,"
+       << std::endl;
+  }
+
+private:
+  const_pointer _tvmet_restrict 			m_data;
+};
+
+
+/**
+ * \class Vector Vector.h "tvmet/Vector.h"
+ * \brief Compile time fixed length vector with evaluation on compile time.
+ */
+template<class T, std::size_t Sz>
+class Vector
+{
+public:
+  /** Data type of the tvmet::Vector. */
+  typedef T     					value_type;
+
+  /** Reference type of the tvmet::Vector data elements. */
+  typedef T&     					reference;
+
+  /** const reference type of the tvmet::Vector data elements. */
+  typedef const T&     					const_reference;
+
+  /** STL iterator interface. */
+  typedef T*     					iterator;
+
+  /** STL const_iterator interface. */
+  typedef const T*     					const_iterator;
+
+  /** STL reverse iterator interface. */
+  typedef std::reverse_iterator<iterator> 		reverse_iterator;
+
+  /** STL const reverse iterator interface. */
+  typedef std::reverse_iterator<const_iterator> 	const_reverse_iterator;
+
+public:
+  /** Dimensions. */
+  enum {
+    Size = Sz			/**< The size of the vector. */
+  };
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_assign = Size,
+    ops        = ops_assign,
+    use_meta   = ops < TVMET_COMPLEXITY_V_ASSIGN_TRIGGER ? true : false
+  };
+
+public: // STL  interface
+  /** STL iterator interface. */
+  iterator begin() { return m_data; }
+
+  /** STL iterator interface. */
+  iterator end() { return m_data + Size; }
+
+  /** STL const_iterator interface. */
+  const_iterator begin() const { return m_data; }
+
+  /** STL const_iterator interface. */
+  const_iterator end() const { return m_data + Size; }
+
+  /** STL reverse iterator interface reverse begin. */
+  reverse_iterator rbegin() { return reverse_iterator( end() ); }
+
+  /** STL const reverse iterator interface reverse begin. */
+  const_reverse_iterator rbegin() const {
+    return const_reverse_iterator( end() );
+  }
+
+  /** STL reverse iterator interface reverse end. */
+  reverse_iterator rend() { return reverse_iterator( begin() ); }
+
+  /** STL const reverse iterator interface reverse end. */
+  const_reverse_iterator rend() const {
+    return const_reverse_iterator( begin() );
+  }
+
+  /** STL vector front element. */
+  value_type front() { return m_data[0]; }
+
+  /** STL vector const front element. */
+  const_reference front() const { return m_data[0]; }
+
+  /** STL vector back element. */
+  value_type back() { return m_data[Size-1]; }
+
+  /** STL vector const back element. */
+  const_reference back() const { return m_data[Size-1]; }
+
+  /** STL vector empty() - returns allways false. */
+  static bool empty() { return false; }
+
+  /** The size of the vector. */
+  static std::size_t size() { return Size; }
+
+  /** STL vector max_size() - returns allways Size. */
+  static std::size_t max_size() { return Size; }
+
+public:
+  /** Default Destructor */
+  ~Vector() {
+#if defined(TVMET_DYNAMIC_MEMORY)
+    delete [] m_data;
+#endif
+  }
+
+  /** Default Constructor. The allocated memory region isn't cleared. If you want
+   a clean use the constructor argument zero. */
+  explicit Vector()
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  { }
+
+  /** Copy Constructor, not explicit! */
+  Vector(const Vector& rhs)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    *this = XprVector<ConstReference, Size>(rhs.const_ref());
+  }
+
+  /**
+   * Constructor with STL iterator interface. The data will be copied into the
+   * vector self, there isn't any stored reference to the array pointer.
+   */
+  template<class InputIterator>
+  explicit Vector(InputIterator first, InputIterator last)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_RT_CONDITION( static_cast<std::size_t>(std::distance(first, last)) <= Size,
+			"InputIterator doesn't fits in size" )
+    std::copy(first, last, m_data);
+  }
+
+  /**
+   * Constructor with STL iterator interface. The data will be copied into the
+   * vector self, there isn't any stored reference to the array pointer.
+   */
+  template<class InputIterator>
+  explicit Vector(InputIterator first, std::size_t sz)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_RT_CONDITION( sz <= Size, "InputIterator doesn't fits in size" )
+    std::copy(first, first + sz, m_data);
+  }
+
+  /** Constructor with initializer for all elements.  */
+  explicit Vector(value_type rhs)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    typedef XprLiteral<value_type> expr_type;
+    *this = XprVector<expr_type, Size>(expr_type(rhs));
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(2 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(3 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(4 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3,
+		  value_type x4)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(5 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3; m_data[4] = x4;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3,
+		  value_type x4, value_type x5)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(6 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3; m_data[4] = x4;
+    m_data[5] = x5;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3,
+		  value_type x4, value_type x5, value_type x6)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(7 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3; m_data[4] = x4;
+    m_data[5] = x5; m_data[6] = x6;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3,
+		  value_type x4, value_type x5, value_type x6, value_type x7)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(8 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3; m_data[4] = x4;
+    m_data[5] = x5; m_data[6] = x6; m_data[7] = x7;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3,
+		  value_type x4, value_type x5, value_type x6, value_type x7,
+		  value_type x8)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(9 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3; m_data[4] = x4;
+    m_data[5] = x5; m_data[6] = x6; m_data[7] = x7; m_data[8] = x8;
+  }
+
+  /** Default Constructor with initializer list. */
+  explicit Vector(value_type x0, value_type x1, value_type x2, value_type x3,
+		  value_type x4, value_type x5, value_type x6, value_type x7,
+		  value_type x8, value_type x9)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    TVMET_CT_CONDITION(10 <= Size, ArgumentList_is_too_long)
+    m_data[0] = x0; m_data[1] = x1; m_data[2] = x2; m_data[3] = x3; m_data[4] = x4;
+    m_data[5] = x5; m_data[6] = x6; m_data[7] = x7; m_data[8] = x8; m_data[9] = x9;
+  }
+
+  /** Construct a vector by expression. */
+  template <class E>
+  explicit Vector(const XprVector<E, Size>& e)
+#if defined(TVMET_DYNAMIC_MEMORY)
+    : m_data( new value_type[Size] )
+#endif
+  {
+    *this = e;
+  }
+
+  /** Assign a value_type on array, this can be used for a single value
+      or a comma separeted list of values. */
+  CommaInitializer<Vector, Size> operator=(value_type rhs) {
+    return CommaInitializer<Vector, Size>(*this, rhs);
+  }
+
+public: // access operators
+  value_type* _tvmet_restrict data() { return m_data; }
+  const value_type* _tvmet_restrict data() const { return m_data; }
+
+public: // index access operators
+  value_type& _tvmet_restrict operator()(std::size_t i) {
+    // Note: g++-2.95.3 does have problems on typedef reference
+    TVMET_RT_CONDITION(i < Size, "Vector Bounce Violation")
+    return m_data[i];
+  }
+
+  value_type operator()(std::size_t i) const {
+    TVMET_RT_CONDITION(i < Size, "Vector Bounce Violation")
+    return m_data[i];
+  }
+
+  value_type& _tvmet_restrict operator[](std::size_t i) {
+    // Note: g++-2.95.3 does have problems on typedef reference
+    return this->operator()(i);
+  }
+
+  value_type operator[](std::size_t i) const {
+    return this->operator()(i);
+  }
+
+public: // ET interface
+  typedef VectorConstReference<T, Size>    		ConstReference;
+
+  /** Return a const Reference of the internal data */
+  ConstReference const_ref() const { return ConstReference(*this); }
+
+  /** Return the vector as const expression. */
+  XprVector<ConstReference, Size> as_expr() const {
+    return XprVector<ConstReference, Size>(this->const_ref());
+  }
+
+private:
+  /** Wrapper for meta assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<true>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    meta::Vector<Size, 0>::assign(dest, src, assign_fn);
+  }
+
+  /** Wrapper for loop assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<false>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    loop::Vector<Size>::assign(dest, src, assign_fn);
+  }
+
+public:
+  /** assign this to a vector expression using the functional assign_fn. */
+  template<class T2, class Assign>
+  void assign_to(Vector<T2, Size>& dest, const Assign& assign_fn) const {
+    do_assign(dispatch<use_meta>(), dest, *this, assign_fn);
+  }
+
+public:   // assign operations
+  /** assign a given Vector element wise to this vector.
+      The operator=(const Vector&) is compiler generated. */
+  template<class T2>
+  Vector& operator=(const Vector<T2, Size>& rhs) {
+    rhs.assign_to(*this, Fcnl_assign<value_type, T2>());
+    return *this;
+  }
+
+  /** assign a given XprVector element wise to this vector. */
+  template<class E>
+  Vector& operator=(const XprVector<E, Size>& rhs) {
+    rhs.assign_to(*this, Fcnl_assign<value_type, typename E::value_type>());
+    return *this;
+  }
+
+private:
+  template<class Obj, std::size_t LEN> friend class CommaInitializer;
+
+  /** This is a helper for assigning a comma separated initializer
+      list. It's equal to Vector& operator=(value_type) which does
+      replace it. */
+  Vector& assign_value(value_type rhs) {
+    typedef XprLiteral<value_type> 			expr_type;
+    *this = XprVector<expr_type, Size>(expr_type(rhs));
+    return *this;
+  }
+
+public: // math operators with scalars
+  // NOTE: this meaning is clear - element wise ops even if not in ns element_wise
+  Vector& operator+=(value_type) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator-=(value_type) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator*=(value_type) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator/=(value_type) TVMET_CXX_ALWAYS_INLINE;
+
+  Vector& operator%=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator^=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator&=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator|=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator<<=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+  Vector& operator>>=(std::size_t) TVMET_CXX_ALWAYS_INLINE;
+
+public: // math assign operators with vectors
+  // NOTE: access using the operators in ns element_wise, since that's what is does
+  template <class T2> Vector& M_add_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_sub_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_mul_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_div_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_mod_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_xor_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_and_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_or_eq (const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_shl_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& M_shr_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+
+public: // math operators with expressions
+  // NOTE: access using the operators in ns element_wise, since that's what is does
+  template <class E> Vector& M_add_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_sub_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_mul_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_div_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_mod_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_xor_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_and_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_or_eq (const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_shl_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& M_shr_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+
+public: // aliased math operators with expressions, used with proxy
+  template <class T2> Vector& alias_assign(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& alias_add_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& alias_sub_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& alias_mul_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class T2> Vector& alias_div_eq(const Vector<T2, Size>&) TVMET_CXX_ALWAYS_INLINE;
+
+  template <class E> Vector& alias_assign(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& alias_add_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& alias_sub_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& alias_mul_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+  template <class E> Vector& alias_div_eq(const XprVector<E, Size>&) TVMET_CXX_ALWAYS_INLINE;
+
+public: // io
+  /** Structure for info printing as Vector<T, Size>. */
+  struct Info : public TvmetBase<Info> {
+    std::ostream& print_xpr(std::ostream& os) const {
+      os << "Vector<T=" << typeid(value_type).name()
+	 << ", Sz=" << Size << ">";
+      return os;
+    }
+  };
+
+  /** Get an info object of this vector. */
+  static Info info() { return Info(); }
+
+  /** Member function for expression level printing. */
+  std::ostream& print_xpr(std::ostream& os, std::size_t l=0) const;
+
+  /** Member function for printing internal data. */
+  std::ostream& print_on(std::ostream& os) const;
+
+private:
+  /** The data of vector self. */
+
+#if defined(TVMET_DYNAMIC_MEMORY)
+  value_type*						m_data;
+#else
+  value_type 						m_data[Size];
+#endif
+};
+
+
+} // namespace tvmet
+
+#include <tvmet/VectorImpl.h>
+#include <tvmet/VectorFunctions.h>
+#include <tvmet/VectorBinaryFunctions.h>
+#include <tvmet/VectorUnaryFunctions.h>
+#include <tvmet/VectorOperators.h>
+#include <tvmet/VectorEval.h>
+#include <tvmet/AliasProxy.h>
+
+#endif // TVMET_VECTOR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/VectorBinaryFunctions.h b/tvmet-1.7.1/include/tvmet/VectorBinaryFunctions.h
new file mode 100644
index 0000000..08d5397
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/VectorBinaryFunctions.h
@@ -0,0 +1,530 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorBinaryFunctions.h,v 1.13 2005/04/26 15:05:06 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_BINARY_FUNCTIONS_H
+#define TVMET_VECTOR_BINARY_FUNCTIONS_H
+
+#include <tvmet/NumericTraits.h>
+#include <tvmet/Extremum.h>
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+/*
+ * binary_function(Vector<T1, Sz>, Vector<T1, Sz>)
+ * binary_function(Vector<T, Sz>, XprVector<E>)
+ * binary_function(XprVector<E>, Vector<T, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class T1, class T2, std::size_t Sz>			\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<T1, T2>,					\
+    VectorConstReference<T1, Sz>,				\
+    VectorConstReference<T2, Sz>				\
+  >,								\
+  Sz								\
+>								\
+NAME(const Vector<T1, Sz>& lhs, 				\
+     const Vector<T2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+								\
+template<class E, class T, std::size_t Sz>			\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, T>,			\
+    VectorConstReference<T, Sz>,				\
+    XprVector<E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+NAME(const XprVector<E, Sz>& lhs, 				\
+     const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+								\
+template<class E, class T, std::size_t Sz>			\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<T, typename E::value_type>,			\
+    VectorConstReference<T, Sz>,				\
+    XprVector<E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+NAME(const Vector<T, Sz>& lhs, 					\
+     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2)
+TVMET_DECLARE_MACRO(drem)
+TVMET_DECLARE_MACRO(fmod)
+TVMET_DECLARE_MACRO(hypot)
+TVMET_DECLARE_MACRO(jn)
+TVMET_DECLARE_MACRO(yn)
+TVMET_DECLARE_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_DECLARE_MACRO(polar)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * binary_function(Vector<T, Sz>, POD)
+ */
+#define TVMET_DECLARE_MACRO(NAME, TP)				\
+template<class T, std::size_t Sz>				\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<T, TP >,					\
+    VectorConstReference<T, Sz>,				\
+    XprLiteral< TP >						\
+  >,								\
+  Sz								\
+>								\
+NAME(const Vector<T, Sz>& lhs, TP rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2, int)
+TVMET_DECLARE_MACRO(drem, int)
+TVMET_DECLARE_MACRO(fmod, int)
+TVMET_DECLARE_MACRO(hypot, int)
+TVMET_DECLARE_MACRO(jn, int)
+TVMET_DECLARE_MACRO(yn, int)
+TVMET_DECLARE_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(atan2, long long int)
+TVMET_DECLARE_MACRO(drem, long long int)
+TVMET_DECLARE_MACRO(fmod, long long int)
+TVMET_DECLARE_MACRO(hypot, long long int)
+TVMET_DECLARE_MACRO(jn, long long int)
+TVMET_DECLARE_MACRO(yn, long long int)
+TVMET_DECLARE_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_DECLARE_MACRO(atan2, float)
+TVMET_DECLARE_MACRO(drem, float)
+TVMET_DECLARE_MACRO(fmod, float)
+TVMET_DECLARE_MACRO(hypot, float)
+TVMET_DECLARE_MACRO(jn, float)
+TVMET_DECLARE_MACRO(yn, float)
+TVMET_DECLARE_MACRO(pow, float)
+
+TVMET_DECLARE_MACRO(atan2, double)
+TVMET_DECLARE_MACRO(drem, double)
+TVMET_DECLARE_MACRO(fmod, double)
+TVMET_DECLARE_MACRO(hypot, double)
+TVMET_DECLARE_MACRO(jn, double)
+TVMET_DECLARE_MACRO(yn, double)
+TVMET_DECLARE_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(atan2, long double)
+TVMET_DECLARE_MACRO(drem, long double)
+TVMET_DECLARE_MACRO(fmod, long double)
+TVMET_DECLARE_MACRO(hypot, long double)
+TVMET_DECLARE_MACRO(jn, long double)
+TVMET_DECLARE_MACRO(yn, long double)
+TVMET_DECLARE_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * complex support
+ */
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+template<class T, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_pow<T, std::complex<T> >,
+    VectorConstReference<T, Sz>,
+    XprLiteral< std::complex<T> >
+  >,
+  Sz
+>
+pow(const Vector<T, Sz>& lhs,
+    const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, std::complex<T> >,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral< std::complex<T> >
+  >,
+  Sz
+>
+pow(const Vector<std::complex<T>, Sz>& lhs,
+    const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, T>,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral<T>
+  >,
+  Sz
+>
+pow(const Vector<std::complex<T>, Sz>& lhs,
+    const T& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, int>,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral<int>
+  >,
+  Sz
+>
+pow(const Vector<std::complex<T>, Sz>& lhs,
+    int rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_polar<T, T>,
+    VectorConstReference<T, Sz>,
+    XprLiteral<T>
+  >,
+  Sz
+>
+polar(const Vector<T, Sz>& lhs, const T& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+// to be written (atan2)
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+/*
+ * binary_function(Vector<T1, Sz>, Vector<T1, Sz>)
+ * binary_function(Vector<T, Sz>, XprVector<E>)
+ * binary_function(XprVector<E>, Vector<T, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T1, class T2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >,									\
+  Sz									\
+>									\
+NAME(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs) {		\
+  typedef XprBinOp <							\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), rhs.const_ref()));			\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  > 							 expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, rhs.const_ref()));					\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  > 						 	expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), rhs));					\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+TVMET_IMPLEMENT_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_IMPLEMENT_MACRO(polar)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * binary_function(Vector<T, Sz>, POD)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, TP)					\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, TP >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< TP >							\
+  >,									\
+  Sz									\
+>									\
+NAME(const Vector<T, Sz>& lhs, TP rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, TP >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), XprLiteral< TP >(rhs)));			\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2, int)
+TVMET_IMPLEMENT_MACRO(drem, int)
+TVMET_IMPLEMENT_MACRO(fmod, int)
+TVMET_IMPLEMENT_MACRO(hypot, int)
+TVMET_IMPLEMENT_MACRO(jn, int)
+TVMET_IMPLEMENT_MACRO(yn, int)
+TVMET_IMPLEMENT_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(atan2, long long int)
+TVMET_IMPLEMENT_MACRO(drem, long long int)
+TVMET_IMPLEMENT_MACRO(fmod, long long int)
+TVMET_IMPLEMENT_MACRO(hypot, long long int)
+TVMET_IMPLEMENT_MACRO(jn, long long int)
+TVMET_IMPLEMENT_MACRO(yn, long long int)
+TVMET_IMPLEMENT_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(atan2, float)
+TVMET_IMPLEMENT_MACRO(drem, float)
+TVMET_IMPLEMENT_MACRO(fmod, float)
+TVMET_IMPLEMENT_MACRO(hypot, float)
+TVMET_IMPLEMENT_MACRO(jn, float)
+TVMET_IMPLEMENT_MACRO(yn, float)
+TVMET_IMPLEMENT_MACRO(pow, float)
+
+TVMET_IMPLEMENT_MACRO(atan2, double)
+TVMET_IMPLEMENT_MACRO(drem, double)
+TVMET_IMPLEMENT_MACRO(fmod, double)
+TVMET_IMPLEMENT_MACRO(hypot, double)
+TVMET_IMPLEMENT_MACRO(jn, double)
+TVMET_IMPLEMENT_MACRO(yn, double)
+TVMET_IMPLEMENT_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(atan2, long double)
+TVMET_IMPLEMENT_MACRO(drem, long double)
+TVMET_IMPLEMENT_MACRO(fmod, long double)
+TVMET_IMPLEMENT_MACRO(hypot, long double)
+TVMET_IMPLEMENT_MACRO(jn, long double)
+TVMET_IMPLEMENT_MACRO(yn, long double)
+TVMET_IMPLEMENT_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * complex support
+ */
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+/**
+ * \fn pow(const Vector<T, Sz>& lhs, const std::complex<T>& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_pow<T, std::complex<T> >,
+    VectorConstReference<T, Sz>,
+    XprLiteral< std::complex<T> >
+  >,
+  Sz
+>
+pow(const Vector<T, Sz>& lhs, const std::complex<T>& rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<T, std::complex<T> >,
+    VectorConstReference<T, Sz>,
+    XprLiteral< std::complex<T> >
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+      expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));
+}
+
+
+/**
+ * \fn pow(const Vector<std::complex<T>, Sz>& lhs, const std::complex<T>& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, std::complex<T> >,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral< std::complex<T> >
+  >,
+  Sz
+>
+pow(const Vector<std::complex<T>, Sz>& lhs, const std::complex<T>& rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<std::complex<T>, std::complex<T> >,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral< std::complex<T> >
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+      expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));
+}
+
+
+/**
+ * \fn pow(const Vector<std::complex<T>, Sz>& lhs, const T& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, T>,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral<T>
+  >,
+  Sz
+>
+pow(const Vector<std::complex<T>, Sz>& lhs, const T& rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<std::complex<T>, T>,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral<T>
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+      expr_type(lhs.const_ref(), XprLiteral<T>(rhs)));
+}
+
+
+/**
+ * \fn pow(const Vector<std::complex<T>, Sz>& lhs, int rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_pow<std::complex<T>, int>,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral<int>
+  >,
+  Sz
+>
+pow(const Vector<std::complex<T>, Sz>& lhs, int rhs) {
+  typedef XprBinOp<
+    Fcnl_pow<std::complex<T>, int>,
+    VectorConstReference<std::complex<T>, Sz>,
+    XprLiteral<int>
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+      expr_type(lhs.const_ref(), XprLiteral<int>(rhs)));
+}
+
+
+/**
+ * \fn polar(const Vector<T, Sz>& lhs, const T& rhs)
+ * \ingroup _binary_function
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_polar<T, T>,
+    VectorConstReference<T, Sz>,
+    XprLiteral<T>
+  >,
+  Sz
+>
+polar(const Vector<T, Sz>& lhs, const T& rhs) {
+  typedef XprBinOp<
+    Fcnl_polar<T, T>,
+    VectorConstReference<T, Sz>,
+    XprLiteral<T>
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+      expr_type(lhs.const_ref(), XprLiteral<T>(rhs)));
+}
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH1)
+
+#if defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+// to be written (atan2)
+#endif // defined(TVMET_HAVE_COMPLEX) && defined(TVMET_HAVE_COMPLEX_MATH2)
+
+
+} // namespace tvmet
+
+#endif // TVMET_VECTOR_BINARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/VectorEval.h b/tvmet-1.7.1/include/tvmet/VectorEval.h
new file mode 100644
index 0000000..4043100
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/VectorEval.h
@@ -0,0 +1,381 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorEval.h,v 1.14 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_EVAL_H
+#define TVMET_VECTOR_EVAL_H
+
+namespace tvmet {
+
+
+/********************************************************************
+ * functions all_elements/any_elements
+ ********************************************************************/
+
+
+/**
+ * \fn bool all_elements(const XprVector<E, Sz>& e)
+ * \brief check on statements for all elements
+ * \ingroup _unary_function
+ * This is for use with boolean operators like
+ * \par Example:
+ * \code
+ * all_elements(vector > 0) {
+ *     // true branch
+ * } else {
+ *     // false branch
+ * }
+ * \endcode
+ * \sa \ref compare
+ */
+template<class E, std::size_t Sz>
+inline
+bool all_elements(const XprVector<E, Sz>& e) {
+  return meta::Vector<Sz>::all_elements(e);
+}
+
+
+/**
+ * \fn bool any_elements(const XprVector<E, Sz>& e)
+ * \brief check on statements for any elements
+ * \ingroup _unary_function
+ * This is for use with boolean operators like
+ * \par Example:
+ * \code
+ * any_elements(vector > 0) {
+ *     // true branch
+ * } else {
+ *     // false branch
+ * }
+ * \endcode
+ * \sa \ref compare
+ */
+template<class E, std::size_t Sz>
+inline
+bool any_elements(const XprVector<E, Sz>& e) {
+  return meta::Vector<Sz>::any_elements(e);
+}
+
+
+/*
+ * trinary evaluation functions with vectors and xpr of
+ * XprVector<E1, Sz> ? Vector<T2, Sz> : Vector<T3, Sz>
+ * XprVector<E1, Sz> ? Vector<T2, Sz> : XprVector<E3, Sz>
+ * XprVector<E1, Sz> ? XprVector<E2, Sz> : Vector<T3, Sz>
+ * XprVector<E1, Sz> ? XprVector<E2, Sz> : XprVector<E3, Sz>
+ */
+
+/**
+ * eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const Vector<T3, Sz>& v3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class T2, class T3, std::size_t Sz>
+inline
+XprVector<
+  XprEval<
+    XprVector<E1, Sz>,
+    VectorConstReference<T2, Sz>,
+    VectorConstReference<T3, Sz>
+  >,
+  Sz
+>
+eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const Vector<T3, Sz>& v3) {
+  typedef XprEval<
+    XprVector<E1, Sz>,
+    VectorConstReference<T2, Sz>,
+    VectorConstReference<T3, Sz>
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(e1, v2.const_ref(), v3.const_ref()));
+}
+
+
+/**
+ * eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const XprVector<E3, Sz>& e3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class T2, class E3, std::size_t Sz>
+inline
+XprVector<
+  XprEval<
+    XprVector<E1, Sz>,
+    VectorConstReference<T2, Sz>,
+    XprVector<E3, Sz>
+  >,
+  Sz
+>
+eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const XprVector<E3, Sz>& e3) {
+  typedef XprEval<
+    XprVector<E1, Sz>,
+    VectorConstReference<T2, Sz>,
+    XprVector<E3, Sz>
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(e1, v2.const_ref(), e3));
+}
+
+
+/**
+ * eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const Vector<T3, Sz>& v3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E2, class T3, std::size_t Sz>
+inline
+XprVector<
+  XprEval<
+    XprVector<E1, Sz>,
+    XprVector<E2, Sz>,
+    VectorConstReference<T3, Sz>
+  >,
+  Sz
+>
+eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const Vector<T3, Sz>& v3) {
+  typedef XprEval<
+    XprVector<E1, Sz>,
+    XprVector<E2, Sz>,
+    VectorConstReference<T3, Sz>
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(e1, e2, v3.const_ref()));
+}
+
+
+/**
+ * eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const XprVector<E3, Sz>& e3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E2, class E3, std::size_t Sz>
+inline
+XprVector<
+  XprEval<
+    XprVector<E1, Sz>,
+    XprVector<E2, Sz>,
+    XprVector<E3, Sz>
+  >,
+  Sz
+>
+eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const XprVector<E3, Sz>& e3) {
+  typedef XprEval<
+    XprVector<E1, Sz>,
+    XprVector<E2, Sz>,
+    XprVector<E3, Sz>
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(expr_type(e1, e2, e3));
+}
+
+
+/*
+ * trinary evaluation functions with vectors, xpr of and POD
+ *
+ * XprVector<E, Sz> ? POD1 : POD2
+ * XprVector<E1, Sz> ? POD : XprVector<E3, Sz>
+ * XprVector<E1, Sz> ? XprVector<E2, Sz> : POD
+ */
+#define TVMET_IMPLEMENT_MACRO(POD)         				\
+template<class E, std::size_t Sz>      					\
+inline               							\
+XprVector<               						\
+  XprEval<               						\
+    XprVector<E, Sz>,               					\
+    XprLiteral< POD >,               					\
+    XprLiteral< POD >               					\
+  >,                							\
+  Sz									\
+>               							\
+eval(const XprVector<E, Sz>& e, POD x2, POD x3) {      			\
+  typedef XprEval<               					\
+    XprVector<E, Sz>,               					\
+    XprLiteral< POD >,                					\
+    XprLiteral< POD >                					\
+  > 							expr_type; 	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(e, XprLiteral< POD >(x2), XprLiteral< POD >(x3))); 	\
+}               							\
+               								\
+template<class E1, class E3, std::size_t Sz>   				\
+inline               							\
+XprVector<               						\
+  XprEval<               						\
+    XprVector<E1, Sz>,               					\
+    XprLiteral< POD >,               					\
+    XprVector<E3, Sz>               					\
+  >,                							\
+  Sz									\
+>               							\
+eval(const XprVector<E1, Sz>& e1, POD x2, const XprVector<E3, Sz>& e3) { \
+  typedef XprEval<               					\
+    XprVector<E1, Sz>,               					\
+    XprLiteral< POD >,                					\
+    XprVector<E3, Sz>               					\
+  > 							expr_type; 	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(e1, XprLiteral< POD >(x2), e3)); 				\
+}               							\
+               								\
+template<class E1, class E2, std::size_t Sz>   				\
+inline               							\
+XprVector<               						\
+  XprEval<               						\
+    XprVector<E1, Sz>,               					\
+    XprVector<E2, Sz>,               					\
+    XprLiteral< POD >               					\
+  >,                							\
+  Sz									\
+>               							\
+eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, POD x3) { \
+  typedef XprEval<               					\
+    XprVector<E1, Sz>,               					\
+    XprVector<E2, Sz>,               					\
+    XprLiteral< POD >                					\
+  > 							expr_type; 	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(e1, e2, XprLiteral< POD >(x3))); 				\
+}
+
+TVMET_IMPLEMENT_MACRO(int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(float)
+TVMET_IMPLEMENT_MACRO(double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * trinary evaluation functions with vectors, xpr of and complex<> types
+ *
+ * XprVector<E, Sz> e, std::complex<T> z2, std::complex<T> z3
+ * XprVector<E1, Sz> e1, std::complex<T> z2, XprVector<E3, Sz> e3
+ * XprVector<E1, Sz> e1, XprVector<E2, Sz> e2, std::complex<T> z3
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+
+
+/**
+ * eval(const XprVector<E, Sz>& e, std::complex<T> z2, std::complex<T> z3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E, std::size_t Sz, class T>
+inline
+XprVector<
+  XprEval<
+    XprVector<E, Sz>,
+    XprLiteral< std::complex<T> >,
+    XprLiteral< std::complex<T> >
+  >,
+  Sz
+>
+eval(const XprVector<E, Sz>& e, std::complex<T> z2, std::complex<T> z3) {
+  typedef XprEval<
+    XprVector<E, Sz>,
+    XprLiteral< std::complex<T> >,
+    XprLiteral< std::complex<T> >
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(e, XprLiteral< std::complex<T> >(z2), XprLiteral< std::complex<T> >(z3)));
+}
+
+/**
+ * eval(const XprVector<E1, Sz>& e1, std::complex<T> z2, const XprVector<E3, Sz>& e3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E3, std::size_t Sz, class T>
+inline
+XprVector<
+  XprEval<
+    XprVector<E1, Sz>,
+    XprLiteral< std::complex<T> >,
+    XprVector<E3, Sz>
+  >,
+  Sz
+>
+eval(const XprVector<E1, Sz>& e1, std::complex<T> z2, const XprVector<E3, Sz>& e3) {
+  typedef XprEval<
+    XprVector<E1, Sz>,
+    XprLiteral< std::complex<T> >,
+    XprVector<E3, Sz>
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(e1, XprLiteral< std::complex<T> >(z2), e3));
+}
+
+/**
+ * eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, std::complex<T> z3)
+ * \brief Evals the vector expressions.
+ * \ingroup _trinary_function
+ * This eval is for the a?b:c syntax, since it's not allowed to overload
+ * these operators.
+ */
+template<class E1, class E2, std::size_t Sz, class T>
+inline
+XprVector<
+  XprEval<
+    XprVector<E1, Sz>,
+    XprVector<E2, Sz>,
+    XprLiteral< std::complex<T> >
+  >,
+  Sz
+>
+eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, std::complex<T> z3) {
+  typedef XprEval<
+    XprVector<E1, Sz>,
+    XprVector<E2, Sz>,
+    XprLiteral< std::complex<T> >
+  > 							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(e1, e2, XprLiteral< std::complex<T> >(z3)));
+}
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+#endif // TVMET_VECTOR_EVAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/VectorFunctions.h b/tvmet-1.7.1/include/tvmet/VectorFunctions.h
new file mode 100644
index 0000000..d0b3342
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/VectorFunctions.h
@@ -0,0 +1,882 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorFunctions.h,v 1.32 2004/07/06 09:45:54 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_FUNCTIONS_H
+#define TVMET_VECTOR_FUNCTIONS_H
+
+#include <tvmet/Extremum.h>
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(Vector<T1, Sz>, Vector<T2, Sz>)
+ * function(Vector<T, Sz>, XprVector<E, Sz>)
+ * function(XprVector<E, Sz>, Vector<T, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class T1, class T2, std::size_t Sz>			\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<T1, T2>,					\
+    VectorConstReference<T1, Sz>,				\
+    VectorConstReference<T2, Sz>				\
+  >,								\
+  Sz								\
+>								\
+NAME (const Vector<T1, Sz>& lhs,				\
+      const Vector<T2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+								\
+template<class E, class T, std::size_t Sz>			\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, T>,			\
+    XprVector<E, Sz>,						\
+    VectorConstReference<T, Sz>					\
+  >,								\
+  Sz								\
+>								\
+NAME (const XprVector<E, Sz>& lhs,				\
+      const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+								\
+template<class E, class T, std::size_t Sz>			\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<T, typename E::value_type>,			\
+    VectorConstReference<T, Sz>,				\
+    XprVector<E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+NAME (const Vector<T, Sz>& lhs,					\
+      const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)		// per se element wise
+TVMET_DECLARE_MACRO(sub)		// per se element wise
+TVMET_DECLARE_MACRO(mul)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(div)		// not defined for vectors
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * function(Vector<T, Sz>, POD)
+ * function(POD, Vector<T, Sz>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, POD)				\
+template<class T, std::size_t Sz>				\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< T, POD >,					\
+    VectorConstReference<T, Sz>,				\
+    XprLiteral< POD >						\
+  >,								\
+  Sz								\
+>								\
+NAME (const Vector<T, Sz>& lhs, 				\
+      POD rhs) TVMET_CXX_ALWAYS_INLINE;				\
+								\
+template<class T, std::size_t Sz>				\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< POD, T>,					\
+    XprLiteral< POD >,						\
+    VectorConstReference<T, Sz>					\
+  >,								\
+  Sz								\
+>								\
+NAME (POD lhs, 							\
+      const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, int)
+TVMET_DECLARE_MACRO(sub, int)
+TVMET_DECLARE_MACRO(mul, int)
+TVMET_DECLARE_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, long long int)
+TVMET_DECLARE_MACRO(sub, long long int)
+TVMET_DECLARE_MACRO(mul, long long int)
+TVMET_DECLARE_MACRO(div, long long int)
+#endif
+
+TVMET_DECLARE_MACRO(add, float)
+TVMET_DECLARE_MACRO(sub, float)
+TVMET_DECLARE_MACRO(mul, float)
+TVMET_DECLARE_MACRO(div, float)
+
+TVMET_DECLARE_MACRO(add, double)
+TVMET_DECLARE_MACRO(sub, double)
+TVMET_DECLARE_MACRO(mul, double)
+TVMET_DECLARE_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, long double)
+TVMET_DECLARE_MACRO(sub, long double)
+TVMET_DECLARE_MACRO(mul, long double)
+TVMET_DECLARE_MACRO(div, long double)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * function(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class T, std::size_t Sz>					\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,			\
+    VectorConstReference< std::complex<T>, Sz>,				\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Sz									\
+>									\
+NAME (const Vector<std::complex<T>, Sz>& lhs,				\
+      const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+									\
+template<class T, std::size_t Sz>					\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,			\
+    XprLiteral< std::complex<T> >,					\
+    VectorConstReference< std::complex<T>, Sz>				\
+  >,									\
+  Sz									\
+>									\
+NAME (const std::complex<T>& lhs,					\
+      const Vector< std::complex<T>, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)
+TVMET_DECLARE_MACRO(sub)
+TVMET_DECLARE_MACRO(mul)
+TVMET_DECLARE_MACRO(div)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * vector specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class T, std::size_t Sz>
+typename NumericTraits<T>::sum_type
+sum(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+typename NumericTraits<T>::sum_type
+product(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, class T2, std::size_t Sz>
+typename PromoteTraits<T1, T2>::value_type
+dot(const Vector<T1, Sz>& lhs,
+    const Vector<T2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T1, class T2>
+Vector<typename PromoteTraits<T1, T2>::value_type, 3>
+cross(const Vector<T1, 3>& lhs,
+      const Vector<T2, 3>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+typename NumericTraits<T>::sum_type
+norm1(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+typename NumericTraits<T>::sum_type
+norm2(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_div<T, T>,
+    VectorConstReference<T, Sz>,
+    XprLiteral< T >
+  >,
+  Sz
+>
+normalize(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * min/max unary functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+template<class E, std::size_t Sz>
+Extremum<typename E::value_type, std::size_t, vector_tag>
+maximum(const XprVector<E, Sz>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+Extremum<T, std::size_t, vector_tag>
+maximum(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+Extremum<typename E::value_type, std::size_t, vector_tag>
+minimum(const XprVector<E, Sz>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+Extremum<T, std::size_t, vector_tag>
+minimum(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+typename E::value_type
+max(const XprVector<E, Sz>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+T max(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+typename E::value_type
+min(const XprVector<E, Sz>& e); // NOT TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+T min(const Vector<T, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, std::size_t Sz>
+XprVector<
+  VectorConstReference<T, Sz>,
+  Sz
+>
+cvector_ref(const T* mem) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(Vector<T1, Sz>, Vector<T2, Sz>)
+ * function(Vector<T, Sz>, XprVector<E, Sz>)
+ * function(XprVector<E, Sz>, Vector<T, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T1, class T2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >,									\
+  Sz									\
+>									\
+NAME (const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs) {		\
+  typedef XprBinOp <							\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), rhs.const_ref()));			\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+NAME (const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs) {		\
+  typedef XprBinOp<							\
+     Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  > 							 expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, rhs.const_ref()));					\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME (const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  > 						 	expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), rhs));					\
+}
+
+TVMET_IMPLEMENT_MACRO(add)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(div)		// not defined for vectors
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * function(Vector<T, Sz>, POD)
+ * function(POD, Vector<T, Sz>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, POD)				\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< T, POD >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< POD >							\
+  >,									\
+  Sz									\
+>									\
+NAME (const Vector<T, Sz>& lhs, POD rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, POD >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< POD >							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), XprLiteral< POD >(rhs)));		\
+}									\
+									\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, T>,						\
+    XprLiteral< POD >,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+NAME (POD lhs, const Vector<T, Sz>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< POD, T>,						\
+    XprLiteral< POD >,							\
+    VectorConstReference<T, Sz>						\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(XprLiteral< POD >(lhs), rhs.const_ref()));		\
+}
+
+TVMET_IMPLEMENT_MACRO(add, int)
+TVMET_IMPLEMENT_MACRO(sub, int)
+TVMET_IMPLEMENT_MACRO(mul, int)
+TVMET_IMPLEMENT_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, long long int)
+TVMET_IMPLEMENT_MACRO(sub, long long int)
+TVMET_IMPLEMENT_MACRO(mul, long long int)
+TVMET_IMPLEMENT_MACRO(div, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(add, float)
+TVMET_IMPLEMENT_MACRO(sub, float)
+TVMET_IMPLEMENT_MACRO(mul, float)
+TVMET_IMPLEMENT_MACRO(div, float)
+
+TVMET_IMPLEMENT_MACRO(add, double)
+TVMET_IMPLEMENT_MACRO(sub, double)
+TVMET_IMPLEMENT_MACRO(mul, double)
+TVMET_IMPLEMENT_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, long double)
+TVMET_IMPLEMENT_MACRO(sub, long double)
+TVMET_IMPLEMENT_MACRO(mul, long double)
+TVMET_IMPLEMENT_MACRO(div, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * function(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)						\
+template<class T, std::size_t Sz>						\
+inline										\
+XprVector<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    VectorConstReference< std::complex<T>, Sz>,					\
+    XprLiteral< std::complex<T> >						\
+  >,										\
+  Sz										\
+>										\
+NAME (const Vector<std::complex<T>, Sz>& lhs, const std::complex<T>& rhs) {	\
+  typedef XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    VectorConstReference< std::complex<T>, Sz>,					\
+    XprLiteral< std::complex<T> >						\
+  >							expr_type;		\
+  return XprVector<expr_type, Sz>(						\
+    expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));		\
+}										\
+										\
+template<class T, std::size_t Sz>						\
+inline										\
+XprVector<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    XprLiteral< std::complex<T> >,						\
+    VectorConstReference< std::complex<T>, Sz>					\
+  >,										\
+  Sz										\
+>										\
+NAME (const std::complex<T>& lhs, const Vector< std::complex<T>, Sz>& rhs) {	\
+  typedef XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    XprLiteral< std::complex<T> >,						\
+    VectorConstReference< std::complex<T>, Sz>					\
+  >							expr_type;		\
+  return XprVector<expr_type, Sz>(						\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs.const_ref()));		\
+}
+
+TVMET_IMPLEMENT_MACRO(add)
+TVMET_IMPLEMENT_MACRO(sub)
+TVMET_IMPLEMENT_MACRO(mul)
+TVMET_IMPLEMENT_MACRO(div)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * vector specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn sum(const Vector<T, Sz>& v)
+ * \brief Compute the sum of the vector.
+ * \ingroup _unary_function
+ *
+ * Simply compute the sum of the given vector as:
+ * \f[
+ * \sum_{i = 0}^{Sz-1} v[i]
+ * \f]
+ */
+template<class T, std::size_t Sz>
+inline
+typename NumericTraits<T>::sum_type
+sum(const Vector<T, Sz>& v) {
+  return meta::Vector<Sz>::sum(v);
+}
+
+
+/**
+ * \fn product(const Vector<T, Sz>& v)
+ * \brief Compute the product of the vector elements.
+ * \ingroup _unary_function
+ *
+ * Simply computer the product of the given vector as:
+ * \f[
+ * \prod_{i = 0}^{Sz - 1} v[i]
+ * \f]
+ */
+template<class T, std::size_t Sz>
+inline
+typename NumericTraits<T>::sum_type
+product(const Vector<T, Sz>& v) {
+  return meta::Vector<Sz>::product(v);
+}
+
+
+/**
+ * \fn dot(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs)
+ * \brief Compute the dot/inner product
+ * \ingroup _binary_function
+ *
+ * Compute the dot product as:
+ * \f[
+ * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] )
+ * \f]
+ * where lhs is a column vector and rhs is a row vector, both vectors
+ * have the same dimension.
+ */
+template<class T1, class T2, std::size_t Sz>
+inline
+typename PromoteTraits<T1, T2>::value_type
+dot(const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs) {
+  return meta::Vector<Sz>::dot(lhs, rhs);
+}
+
+
+/**
+ * \fn cross(const Vector<T1, 3>& lhs, const Vector<T2, 3>& rhs)
+ * \brief Compute the cross/outer product
+ * \ingroup _binary_function
+ * \note working only for vectors of size = 3
+ * \todo Implement vector outer product as ET and MT, returning a XprVector
+ */
+template<class T1, class T2>
+inline
+Vector<typename PromoteTraits<T1, T2>::value_type, 3>
+cross(const Vector<T1, 3>& lhs, const Vector<T2, 3>& rhs) {
+  typedef typename PromoteTraits<T1, T2>::value_type	value_type;
+  return Vector<value_type, 3>(lhs(1)*rhs(2) - rhs(1)*lhs(2),
+			       rhs(0)*lhs(2) - lhs(0)*rhs(2),
+			       lhs(0)*rhs(1) - rhs(0)*lhs(1));
+}
+
+
+/**
+ * \fn norm1(const Vector<T, Sz>& v)
+ * \brief The \f$l_1\f$ norm of a vector v.
+ * \ingroup _unary_function
+ * The norm of any vector is just the square root of the dot product of
+ * a vector with itself, or
+ *
+ * \f[
+ * |Vector<T, Sz> v| = |v| = \sum_{i=0}^{Sz-1}\,|v[i]|
+ * \f]
+ */
+template<class T, std::size_t Sz>
+inline
+typename NumericTraits<T>::sum_type
+norm1(const Vector<T, Sz>& v) {
+  return sum(abs(v));
+}
+
+
+/**
+ * \fn norm2(const Vector<T, Sz>& v)
+ * \brief The euklidian norm (or \f$l_2\f$ norm) of a vector v.
+ * \ingroup _unary_function
+ * The norm of any vector is just the square root of the dot product of
+ * a vector with itself, or
+ *
+ * \f[
+ * |Vector<T, Sz> v| = |v| = \sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 }
+ * \f]
+ *
+ * \note The internal cast for Vector<int> avoids warnings on sqrt.
+ */
+template<class T, std::size_t Sz>
+inline
+typename NumericTraits<T>::sum_type
+norm2(const Vector<T, Sz>& v) {
+  return static_cast<T>( std::sqrt(static_cast<typename NumericTraits<T>::float_type>(dot(v, v))) );
+}
+
+
+/**
+ * \fn normalize(const Vector<T, Sz>& v)
+ * \brief Normalize the given vector.
+ * \ingroup _unary_function
+ * \sa norm2
+ *
+ * using the equation:
+ * \f[
+ * \frac{Vector<T, Sz> v}{\sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 }}
+ * \f]
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_div<T, T>,
+    VectorConstReference<T, Sz>,
+    XprLiteral< T >
+  >,
+  Sz
+>
+normalize(const Vector<T, Sz>& v) {
+  typedef XprBinOp<
+    Fcnl_div<T, T>,
+    VectorConstReference<T, Sz>,
+    XprLiteral< T >
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(v.const_ref(), XprLiteral< T >(norm2(v))));
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * min/max unary functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn maximum(const XprVector<E, Sz>& e)
+ * \brief Find the maximum of a vector expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Sz>
+inline
+Extremum<typename E::value_type, std::size_t, vector_tag>
+maximum(const XprVector<E, Sz>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						m_max(e(0));
+  std::size_t 						m_idx(0);
+
+  // this loop is faster than meta templates!
+  for(std::size_t i = 1; i != Sz; ++i) {
+    if(e(i) > m_max) {
+      m_max = e(i);
+      m_idx = i;
+    }
+  }
+
+  return Extremum<value_type, std::size_t, vector_tag>(m_max, m_idx);
+}
+
+
+/**
+ * \fn maximum(const Vector<T, Sz>& v)
+ * \brief Find the maximum of a vector
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Sz>
+inline
+Extremum<T, std::size_t, vector_tag>
+maximum(const Vector<T, Sz>& v) { return maximum(v.as_expr()); }
+
+
+/**
+ * \fn minimum(const XprVector<E, Sz>& e)
+ * \brief Find the minimum of a vector expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Sz>
+inline
+Extremum<typename E::value_type, std::size_t, vector_tag>
+minimum(const XprVector<E, Sz>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						m_min(e(0));
+  std::size_t 						m_idx(0);
+
+  // this loop is faster than meta templates!
+  for(std::size_t i = 1; i != Sz; ++i) {
+    if(e(i) < m_min) {
+      m_min = e(i);
+      m_idx = i;
+    }
+  }
+
+  return Extremum<value_type, std::size_t, vector_tag>(m_min, m_idx);
+}
+
+
+/**
+ * \fn minimum(const Vector<T, Sz>& v)
+ * \brief Find the minimum of a vector
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Sz>
+inline
+Extremum<T, std::size_t, vector_tag>
+minimum(const Vector<T, Sz>& v) { return minimum(v.as_expr()); }
+
+
+/**
+ * \fn max(const XprVector<E, Sz>& e)
+ * \brief Find the maximum of a vector expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Sz>
+inline
+typename E::value_type
+max(const XprVector<E, Sz>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						m_max(e(0));
+
+  // this loop is faster than meta templates!
+  for(std::size_t i = 1; i != Sz; ++i)
+    if(e(i) > m_max)
+      m_max = e(i);
+
+  return m_max;
+}
+
+
+/**
+ * \fn max(const Vector<T, Sz>& v)
+ * \brief Find the maximum of a vector
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Sz>
+inline
+T max(const Vector<T, Sz>& v) {
+  typedef T			 			value_type;
+  typedef typename Vector<T, Sz>::const_iterator	const_iterator;
+
+  const_iterator					iter(v.begin());
+  const_iterator					last(v.end());
+  value_type 						temp(*iter);
+
+  for( ; iter != last; ++iter)
+    if(*iter > temp)
+      temp = *iter;
+
+  return temp;
+}
+
+
+/**
+ * \fn min(const XprVector<E, Sz>& e)
+ * \brief Find the minimum of a vector expression
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Sz>
+inline
+typename E::value_type
+min(const XprVector<E, Sz>& e) {
+  typedef typename E::value_type 			value_type;
+
+  value_type 						m_min(e(0));
+
+  // this loop is faster than meta templates!
+  for(std::size_t i = 1; i != Sz; ++i)
+    if(e(i) < m_min)
+      m_min = e(i);
+
+  return m_min;
+}
+
+
+/**
+ * \fn min(const Vector<T, Sz>& v)
+ * \brief Find the minimum of a vector
+ * \ingroup _unary_function
+ */
+template<class T, std::size_t Sz>
+inline
+T min(const Vector<T, Sz>& v) {
+  typedef T			 			value_type;
+  typedef typename Vector<T, Sz>::const_iterator	const_iterator;
+
+  const_iterator					iter(v.begin());
+  const_iterator					last(v.end());
+  value_type 						temp(*iter);
+
+  for( ; iter != last; ++iter)
+    if(*iter < temp)
+      temp = *iter;
+
+  return temp;
+}
+
+
+/**
+ * \fn cvector_ref(const T* mem)
+ * \brief Creates an expression wrapper for a C like vector arrays.
+ * \ingroup _unary_function
+ *
+ * This is like creating a vector of external data, as described
+ * at \ref construct. With this function you wrap an expression
+ * around a C style vector array and you can operate directly with it
+ * as usual.
+ *
+ * \par Example:
+ * \code
+ * static float vertices[N][3] = {
+ *   {-1,  0,  1}, { 1,  0,  1}, ...
+ * };
+ * ...
+ * typedef Vector<float, 3>			vector_type;
+ * ...
+ * vector_type V( cross(cvector_ref<float, 3>(&vertices[0][0]),
+ *                      cvector_ref<float, 3>(&vertices[1][0])) );
+ * \endcode
+ *
+ * \since release 1.6.0
+ */
+template<class T, std::size_t Sz>
+inline
+XprVector<
+  VectorConstReference<T, Sz>,
+  Sz
+>
+cvector_ref(const T* mem) {
+  typedef VectorConstReference<T, Sz>		expr_type;
+
+  return XprVector<expr_type, Sz>(expr_type(mem));
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_VECTOR_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/VectorImpl.h b/tvmet-1.7.1/include/tvmet/VectorImpl.h
new file mode 100644
index 0000000..75a6c44
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/VectorImpl.h
@@ -0,0 +1,209 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorImpl.h,v 1.27 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_IMPL_H
+#define TVMET_VECTOR_IMPL_H
+
+#include <iomanip>			// setw
+
+#include <tvmet/Functional.h>
+#include <tvmet/Io.h>
+
+
+namespace tvmet {
+
+
+/*
+ * member operators for i/o
+ */
+template<class T, std::size_t Sz>
+std::ostream& Vector<T, Sz>::print_xpr(std::ostream& os, std::size_t l) const
+{
+  os << IndentLevel(l++) << "Vector[" << ops << "]<"
+     << typeid(T).name() << ", " << Size << ">,"
+     << IndentLevel(--l)
+     << std::endl;
+
+  return os;
+}
+
+
+template<class T, std::size_t Sz>
+std::ostream& Vector<T, Sz>::print_on(std::ostream& os) const
+{
+  enum {
+    complex_type = NumericTraits<value_type>::is_complex
+  };
+
+  std::streamsize w = IoPrintHelper<Vector>::width(dispatch<complex_type>(), *this);
+
+  os << std::setw(0) << "[\n  ";
+  for(std::size_t i = 0; i < (Size - 1); ++i) {
+    os << std::setw(w) << m_data[i] << ", ";
+  }
+  os << std::setw(w) << m_data[Size - 1] << "\n]";
+
+  return os;
+}
+
+
+/*
+ * member operators with scalars, per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class T, std::size_t Sz>					\
+inline									\
+Vector<T, Sz>& Vector<T, Sz>::operator OP (value_type rhs) {		\
+  typedef XprLiteral<value_type> 			expr_type;	\
+  this->M_##NAME(XprVector<expr_type, Size>(expr_type(rhs)));		\
+  return *this;								\
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq, +=)
+TVMET_IMPLEMENT_MACRO(sub_eq, -=)
+TVMET_IMPLEMENT_MACRO(mul_eq, *=)
+TVMET_IMPLEMENT_MACRO(div_eq, /=)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class T, std::size_t Sz>					\
+inline									\
+Vector<T, Sz>& Vector<T, Sz>::operator OP (std::size_t rhs) {		\
+  typedef XprLiteral<value_type> 			expr_type;	\
+  this->M_##NAME(XprVector<expr_type, Size>(expr_type(rhs)));		\
+  return *this;								\
+}
+
+TVMET_IMPLEMENT_MACRO(mod_eq, %=)
+TVMET_IMPLEMENT_MACRO(xor_eq,^=)
+TVMET_IMPLEMENT_MACRO(and_eq, &=)
+TVMET_IMPLEMENT_MACRO(or_eq, |=)
+TVMET_IMPLEMENT_MACRO(shl_eq, <<=)
+TVMET_IMPLEMENT_MACRO(shr_eq, >>=)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * member functions (operators) with vectors, for use with +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)									\
+template<class T1, std::size_t Sz>									\
+template <class T2>											\
+inline Vector<T1, Sz>&											\
+Vector<T1, Sz>::M_##NAME (const Vector<T2, Size>& rhs) {						\
+  this->M_##NAME( XprVector<typename Vector<T2, Size>::ConstReference, Size>(rhs.const_ref()) );	\
+  return *this;												\
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+TVMET_IMPLEMENT_MACRO(mod_eq)
+TVMET_IMPLEMENT_MACRO(xor_eq)
+TVMET_IMPLEMENT_MACRO(and_eq)
+TVMET_IMPLEMENT_MACRO(or_eq)
+TVMET_IMPLEMENT_MACRO(shl_eq)
+TVMET_IMPLEMENT_MACRO(shr_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * member functions (operators) with expressions, for use width +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					   \
+template<class T, std::size_t Sz>					   \
+template <class E>							   \
+inline 									   \
+Vector<T, Sz>&								   \
+Vector<T, Sz>::M_##NAME (const XprVector<E, Size>& rhs) {		   \
+  rhs.assign_to(*this, Fcnl_##NAME<value_type, typename E::value_type>()); \
+  return *this;								   \
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+TVMET_IMPLEMENT_MACRO(mod_eq)
+TVMET_IMPLEMENT_MACRO(xor_eq)
+TVMET_IMPLEMENT_MACRO(and_eq)
+TVMET_IMPLEMENT_MACRO(or_eq)
+TVMET_IMPLEMENT_MACRO(shl_eq)
+TVMET_IMPLEMENT_MACRO(shr_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * aliased member functions (operators) with vectors,
+ * for use with +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)								     \
+template<class T1, std::size_t Sz>								     \
+template <class T2>										     \
+inline 												     \
+Vector<T1, Sz>&											     \
+Vector<T1, Sz>::alias_##NAME (const Vector<T2, Size>& rhs) {					     \
+  this->alias_##NAME( XprVector<typename Vector<T2, Size>::ConstReference, Size>(rhs.const_ref()) ); \
+  return *this;											     \
+}
+
+TVMET_IMPLEMENT_MACRO(assign)
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * aliased member functions (operators) with expressions,
+ * for use width +=,-= ... <<=
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)						      \
+template<class T, std::size_t Sz>						      \
+template <class E>								      \
+inline 										      \
+Vector<T, Sz>&									      \
+Vector<T, Sz>::alias_##NAME (const XprVector<E, Size>& rhs) {			      \
+  typedef Vector<T, Sz>					temp_type;		      \
+  temp_type(rhs).assign_to(*this, Fcnl_##NAME<value_type, typename E::value_type>()); \
+  return *this;									      \
+}
+
+TVMET_IMPLEMENT_MACRO(assign)
+TVMET_IMPLEMENT_MACRO(add_eq)
+TVMET_IMPLEMENT_MACRO(sub_eq)
+TVMET_IMPLEMENT_MACRO(mul_eq)
+TVMET_IMPLEMENT_MACRO(div_eq)
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_VECTOR_IMPL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/VectorOperators.h b/tvmet-1.7.1/include/tvmet/VectorOperators.h
new file mode 100644
index 0000000..7eb17b4
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/VectorOperators.h
@@ -0,0 +1,1054 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorOperators.h,v 1.14 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_OPERATORS_H
+#define TVMET_VECTOR_OPERATORS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+template<class T, std::size_t Sz>
+inline
+std::ostream& operator<<(std::ostream& os,
+			 const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Member operators (arithmetic and bit ops)
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * update_operator(Vector<T1, Sz>,  Vector<T2, Sz>)
+ * update_operator(Vector<T1, Sz>,  XprVector<E, Sz>)
+ * Note: per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class T1, class T2, std::size_t Sz>				\
+Vector<T1, Sz>&								\
+operator OP (Vector<T1, Sz>& lhs,					\
+	     const Vector<T2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class T, class E, std::size_t Sz>				\
+Vector<T, Sz>&								\
+operator OP (Vector<T, Sz>& lhs,					\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add_eq, +=)		// per se element wise
+TVMET_DECLARE_MACRO(sub_eq, -=)		// per se element wise
+TVMET_DECLARE_MACRO(mul_eq, *=)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(div_eq, /=)		// not defined for vectors
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod_eq, %=)
+  TVMET_DECLARE_MACRO(xor_eq, ^=)
+  TVMET_DECLARE_MACRO(and_eq, &=)
+  TVMET_DECLARE_MACRO(or_eq, |=)
+  TVMET_DECLARE_MACRO(shl_eq, <<=)
+  TVMET_DECLARE_MACRO(shr_eq, >>=)
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Vector<T1, Sz>, Vector<T2, Sz>)
+ * operator(Vector<T1, Sz>, XprVector<E, Sz>)
+ * operator(XprVector<E, Sz>, Vector<T1, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class T1, class T2, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T1, Sz>& lhs, 				\
+	     const Vector<T2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class E, class T, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs,				\
+	     const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+									\
+template<class E, class T, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& lhs, 					\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)		// per se element wise
+TVMET_DECLARE_MACRO(sub, -)		// per se element wise
+TVMET_DECLARE_MACRO(mul, *)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(div, /)		// not defined for vectors
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * operator(Vector<T, Sz>, POD)
+ * operator(POD, Vector<T, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, POD)			\
+template<class T, std::size_t Sz>				\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< T, POD >,					\
+    VectorConstReference<T, Sz>,				\
+    XprLiteral< POD >						\
+  >,								\
+  Sz								\
+>								\
+operator OP (const Vector<T, Sz>& lhs, 				\
+	     POD rhs) TVMET_CXX_ALWAYS_INLINE;			\
+								\
+template<class T, std::size_t Sz>				\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< POD, T>,					\
+    XprLiteral< POD >,						\
+    VectorConstReference<T, Sz>					\
+  >,								\
+  Sz								\
+>								\
+operator OP (POD lhs, 						\
+	     const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +, int)
+TVMET_DECLARE_MACRO(sub, -, int)
+TVMET_DECLARE_MACRO(mul, *, int)
+TVMET_DECLARE_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, +, long long int)
+TVMET_DECLARE_MACRO(sub, -, long long int)
+TVMET_DECLARE_MACRO(mul, *, long long int)
+TVMET_DECLARE_MACRO(div, /, long long int)
+#endif
+
+TVMET_DECLARE_MACRO(add, +, float)
+TVMET_DECLARE_MACRO(sub, -, float)
+TVMET_DECLARE_MACRO(mul, *, float)
+TVMET_DECLARE_MACRO(div, /, float)
+
+TVMET_DECLARE_MACRO(add, +, double)
+TVMET_DECLARE_MACRO(sub, -, double)
+TVMET_DECLARE_MACRO(mul, *, double)
+TVMET_DECLARE_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, +, long double)
+TVMET_DECLARE_MACRO(sub, -, long double)
+TVMET_DECLARE_MACRO(mul, *, long double)
+TVMET_DECLARE_MACRO(div, /, long double)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * operator(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class T, std::size_t Sz>						\
+XprVector<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    VectorConstReference< std::complex<T>, Sz>,					\
+    XprLiteral< std::complex<T> >						\
+  >,										\
+  Sz										\
+>										\
+operator OP (const Vector<std::complex<T>, Sz>& lhs, 				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+										\
+template<class T, std::size_t Sz>						\
+XprVector<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    XprLiteral< std::complex<T> >,						\
+    VectorConstReference< std::complex<T>, Sz>					\
+  >,										\
+  Sz										\
+>										\
+operator OP (const std::complex<T>& lhs, 					\
+	     const Vector< std::complex<T>, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)		// per se element wise
+TVMET_DECLARE_MACRO(sub, -)		// per se element wise
+TVMET_DECLARE_MACRO(mul, *)		// per se element wise
+TVMET_DECLARE_MACRO(div, /)		// per se element wise
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Vector<T1, Sz>, Vector<T2, Sz>)
+ * operator(XprVector<E, Sz>, Vector<T, Sz>)
+ * operator(Vector<T, Sz>, XprVector<E, Sz>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class T1, class T2, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T1, Sz>& lhs, 				\
+	     const Vector<T2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class E, class T, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs, 				\
+	     const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+									\
+template<class E, class T, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& lhs, 					\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %)
+  TVMET_DECLARE_MACRO(bitxor, ^)
+  TVMET_DECLARE_MACRO(bitand, &)
+  TVMET_DECLARE_MACRO(bitor, |)
+  TVMET_DECLARE_MACRO(shl, <<)
+  TVMET_DECLARE_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * operator(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class T, std::size_t Sz>						\
+XprVector<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    VectorConstReference< std::complex<T>, Sz>,					\
+    XprLiteral< std::complex<T> >						\
+  >,										\
+  Sz										\
+>										\
+operator OP (const Vector<std::complex<T>, Sz>& lhs, 				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+										\
+template<class T, std::size_t Sz>						\
+XprVector<									\
+  XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,				\
+    XprLiteral< std::complex<T> >,						\
+    VectorConstReference< std::complex<T>, Sz>					\
+  >,										\
+  Sz										\
+>										\
+operator OP (const std::complex<T>& lhs, 					\
+	     const Vector< std::complex<T>, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*
+ * operator(Vector<T, Sz>, POD)
+ * operator(POD, Vector<T, Sz>)
+ * Note: operations are per se element_wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, TP)				\
+template<class T, std::size_t Sz>					\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< T, TP >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< TP >							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& lhs, TP rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class T, std::size_t Sz>					\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< TP, T>,						\
+    XprLiteral< TP >,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (TP lhs, const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, int)
+  TVMET_DECLARE_MACRO(bitxor, ^, int)
+  TVMET_DECLARE_MACRO(bitand, &, int)
+  TVMET_DECLARE_MACRO(bitor, |, int)
+  TVMET_DECLARE_MACRO(shl, <<, int)
+  TVMET_DECLARE_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, int)
+TVMET_DECLARE_MACRO(less, <, int)
+TVMET_DECLARE_MACRO(greater_eq, >=, int)
+TVMET_DECLARE_MACRO(less_eq, <=, int)
+TVMET_DECLARE_MACRO(eq, ==, int)
+TVMET_DECLARE_MACRO(not_eq, !=, int)
+TVMET_DECLARE_MACRO(and, &&, int)
+TVMET_DECLARE_MACRO(or, ||, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, long long int)
+  TVMET_DECLARE_MACRO(bitxor, ^, long long int)
+  TVMET_DECLARE_MACRO(bitand, &, long long int)
+  TVMET_DECLARE_MACRO(bitor, |, long long int)
+  TVMET_DECLARE_MACRO(shl, <<, long long int)
+  TVMET_DECLARE_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long long int)
+TVMET_DECLARE_MACRO(less, <, long long int)
+TVMET_DECLARE_MACRO(greater_eq, >=, long long int)
+TVMET_DECLARE_MACRO(less_eq, <=, long long int)
+TVMET_DECLARE_MACRO(eq, ==, long long int)
+TVMET_DECLARE_MACRO(not_eq, !=, long long int)
+TVMET_DECLARE_MACRO(and, &&, long long int)
+TVMET_DECLARE_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, float)
+TVMET_DECLARE_MACRO(less, <, float)
+TVMET_DECLARE_MACRO(greater_eq, >=, float)
+TVMET_DECLARE_MACRO(less_eq, <=, float)
+TVMET_DECLARE_MACRO(eq, ==, float)
+TVMET_DECLARE_MACRO(not_eq, !=, float)
+TVMET_DECLARE_MACRO(and, &&, float)
+TVMET_DECLARE_MACRO(or, ||, float)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, double)
+TVMET_DECLARE_MACRO(less, <, double)
+TVMET_DECLARE_MACRO(greater_eq, >=, double)
+TVMET_DECLARE_MACRO(less_eq, <=, double)
+TVMET_DECLARE_MACRO(eq, ==, double)
+TVMET_DECLARE_MACRO(not_eq, !=, double)
+TVMET_DECLARE_MACRO(and, &&, double)
+TVMET_DECLARE_MACRO(or, ||, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long double)
+TVMET_DECLARE_MACRO(less, <, long double)
+TVMET_DECLARE_MACRO(greater_eq, >=, long double)
+TVMET_DECLARE_MACRO(less_eq, <=, long double)
+TVMET_DECLARE_MACRO(eq, ==, long double)
+TVMET_DECLARE_MACRO(not_eq, !=, long double)
+TVMET_DECLARE_MACRO(and, &&, long double)
+TVMET_DECLARE_MACRO(or, ||, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * unary_operator(Vector<T, Sz>)
+ * Note: per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)				\
+template <class T, std::size_t Sz>				\
+XprVector<							\
+  XprUnOp<							\
+    Fcnl_##NAME<T>,						\
+    VectorConstReference<T, Sz>					\
+  >,								\
+  Sz								\
+>								\
+operator OP (const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(not, !)
+TVMET_DECLARE_MACRO(compl, ~)
+TVMET_DECLARE_MACRO(neg, -)
+#undef TVMET_DECLARE_MACRO
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/**
+ * \fn operator<<(std::ostream& os, const Vector<T, Sz>& rhs)
+ * \brief Overload operator for i/o
+ * \ingroup _binary_operator
+ */
+template<class T, std::size_t Sz>
+inline
+std::ostream& operator<<(std::ostream& os, const Vector<T, Sz>& rhs) {
+  return rhs.print_on(os);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Member operators (arithmetic and bit ops)
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * update_operator(Vector<T1, Sz>,  Vector<T2, Sz>)
+ * update_operator(Vector<T1, Sz>,  XprVector<E, Sz>)
+ * Note: per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				\
+template<class T1, class T2, std::size_t Sz>			\
+inline Vector<T1, Sz>&						\
+operator OP (Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs) {	\
+  return lhs.M_##NAME(rhs);					\
+}								\
+								\
+template<class T, class E, std::size_t Sz>			\
+inline Vector<T, Sz>&						\
+operator OP (Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs) {	\
+  return lhs.M_##NAME(rhs);					\
+}
+
+TVMET_IMPLEMENT_MACRO(add_eq, +=)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub_eq, -=)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul_eq, *=)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(div_eq, /=)		// not defined for vectors
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod_eq, %=)
+  TVMET_IMPLEMENT_MACRO(xor_eq, ^=)
+  TVMET_IMPLEMENT_MACRO(and_eq, &=)
+  TVMET_IMPLEMENT_MACRO(or_eq, |=)
+  TVMET_IMPLEMENT_MACRO(shl_eq, <<=)
+  TVMET_IMPLEMENT_MACRO(shr_eq, >>=)
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Vector<T1, Sz>, Vector<T2, Sz>)
+ * operator(Vector<T1, Sz>, XprVector<E, Sz>)
+ * operator(XprVector<E, Sz>, Vector<T1, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class T1, class T2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs) {	\
+  return NAME (lhs, rhs);						\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs) {	\
+  return NAME (lhs, rhs);						\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs) {	\
+  return NAME (lhs, rhs);						\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub, -)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul, *)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(div, /)		// not defined for vectors
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * operator(Vector<T, Sz>, POD)
+ * operator(POD, Vector<T, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD)		\
+template<class T, std::size_t Sz>			\
+inline							\
+XprVector<						\
+  XprBinOp<						\
+    Fcnl_##NAME< T, POD >,				\
+    VectorConstReference<T, Sz>,			\
+    XprLiteral< POD >					\
+  >,							\
+  Sz							\
+>							\
+operator OP (const Vector<T, Sz>& lhs, POD rhs) {	\
+  return NAME (lhs, rhs);				\
+}							\
+							\
+template<class T, std::size_t Sz>			\
+inline							\
+XprVector<						\
+  XprBinOp<						\
+    Fcnl_##NAME< POD, T>,				\
+    XprLiteral< POD >,					\
+    VectorConstReference<T, Sz>				\
+  >,							\
+  Sz							\
+>							\
+operator OP (POD lhs, const Vector<T, Sz>& rhs) {	\
+  return NAME (lhs, rhs);				\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +, int)
+TVMET_IMPLEMENT_MACRO(sub, -, int)
+TVMET_IMPLEMENT_MACRO(mul, *, int)
+TVMET_IMPLEMENT_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, +, long long int)
+TVMET_IMPLEMENT_MACRO(sub, -, long long int)
+TVMET_IMPLEMENT_MACRO(mul, *, long long int)
+TVMET_IMPLEMENT_MACRO(div, /, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(add, +, float)
+TVMET_IMPLEMENT_MACRO(sub, -, float)
+TVMET_IMPLEMENT_MACRO(mul, *, float)
+TVMET_IMPLEMENT_MACRO(div, /, float)
+
+TVMET_IMPLEMENT_MACRO(add, +, double)
+TVMET_IMPLEMENT_MACRO(sub, -, double)
+TVMET_IMPLEMENT_MACRO(mul, *, double)
+TVMET_IMPLEMENT_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, +, long double)
+TVMET_IMPLEMENT_MACRO(sub, -, long double)
+TVMET_IMPLEMENT_MACRO(mul, *, long double)
+TVMET_IMPLEMENT_MACRO(div, /, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * operator(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)			\
+template<class T, std::size_t Sz>			\
+inline							\
+XprVector<						\
+  XprBinOp<						\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,	\
+    VectorConstReference< std::complex<T>, Sz>,		\
+    XprLiteral< std::complex<T> >			\
+  >,							\
+  Sz							\
+>							\
+operator OP (const Vector<std::complex<T>, Sz>& lhs, 	\
+	     const std::complex<T>& rhs) {		\
+  return NAME (lhs, rhs);				\
+}							\
+							\
+template<class T, std::size_t Sz>			\
+inline							\
+XprVector<						\
+  XprBinOp<						\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,	\
+    XprLiteral< std::complex<T> >,			\
+    VectorConstReference< std::complex<T>, Sz>		\
+  >,							\
+  Sz							\
+>							\
+operator OP (const std::complex<T>& lhs, 		\
+	     const Vector< std::complex<T>, Sz>& rhs) {	\
+  return NAME (lhs, rhs);				\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub, -)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul, *)		// per se element wise
+TVMET_IMPLEMENT_MACRO(div, /)		// per se element wise
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(Vector<T1, Sz>, Vector<T2, Sz>)
+ * operator(XprVector<E, Sz>, Vector<T, Sz>)
+ * operator(Vector<T, Sz>, XprVector<E, Sz>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class T1, class T2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T1, Sz>& lhs, const Vector<T2, Sz>& rhs) {	\
+  typedef XprBinOp <							\
+    Fcnl_##NAME<T1, T2>,						\
+    VectorConstReference<T1, Sz>,					\
+    VectorConstReference<T2, Sz>					\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), rhs.const_ref()));			\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, T>,				\
+    XprVector<E, Sz>,							\
+    VectorConstReference<T, Sz>						\
+  > 							 expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, rhs.const_ref()));					\
+}									\
+									\
+template<class E, class T, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, typename E::value_type>,				\
+    VectorConstReference<T, Sz>,					\
+    XprVector<E, Sz>							\
+  > 						 	expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), rhs));					\
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^)
+  TVMET_IMPLEMENT_MACRO(bitand, &)
+  TVMET_IMPLEMENT_MACRO(bitor, |)
+  TVMET_IMPLEMENT_MACRO(shl, <<)
+  TVMET_IMPLEMENT_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * operator(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)							\
+template<class T, std::size_t Sz>							\
+inline											\
+XprVector<										\
+  XprBinOp<										\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    VectorConstReference< std::complex<T>, Sz>,						\
+    XprLiteral< std::complex<T> >							\
+  >,											\
+  Sz											\
+>											\
+operator OP (const Vector<std::complex<T>, Sz>& lhs, const std::complex<T>& rhs) {	\
+  typedef XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    VectorConstReference< std::complex<T>, Sz>,						\
+    XprLiteral< std::complex<T> >							\
+  >							expr_type;			\
+  return XprVector<expr_type, Sz>(							\
+    expr_type(lhs.const_ref(), XprLiteral< std::complex<T> >(rhs)));			\
+}											\
+											\
+template<class T, std::size_t Sz>							\
+inline											\
+XprVector<										\
+  XprBinOp<										\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    XprLiteral< std::complex<T> >,							\
+    VectorConstReference< std::complex<T>, Sz>						\
+  >,											\
+  Sz											\
+>											\
+operator OP (const std::complex<T>& lhs, const Vector< std::complex<T>, Sz>& rhs) {	\
+  typedef XprBinOp<									\
+    Fcnl_##NAME< std::complex<T>, std::complex<T> >,					\
+    XprLiteral< std::complex<T> >,							\
+    VectorConstReference< std::complex<T>, Sz>						\
+  >							expr_type;			\
+  return XprVector<expr_type, Sz>(							\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs.const_ref()));			\
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*
+ * operator(Vector<T, Sz>, POD)
+ * operator(POD, Vector<T, Sz>)
+ * Note: operations are per se element_wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, TP)				\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< T, TP >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< TP >							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& lhs, TP rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<T, TP >,						\
+    VectorConstReference<T, Sz>,					\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs.const_ref(), XprLiteral< TP >(rhs)));			\
+}									\
+									\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< TP, T>,						\
+    XprLiteral< TP >,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (TP lhs, const Vector<T, Sz>& rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< TP, T>,						\
+    XprLiteral< TP >,							\
+    VectorConstReference<T, Sz>						\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(XprLiteral< TP >(lhs), rhs.const_ref()));			\
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, int)
+TVMET_IMPLEMENT_MACRO(less, <, int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, int)
+TVMET_IMPLEMENT_MACRO(eq, ==, int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, int)
+TVMET_IMPLEMENT_MACRO(and, &&, int)
+TVMET_IMPLEMENT_MACRO(or, ||, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, long long int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, long long int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, long long int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, long long int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, long long int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long long int)
+TVMET_IMPLEMENT_MACRO(less, <, long long int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long long int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long long int)
+TVMET_IMPLEMENT_MACRO(eq, ==, long long int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long long int)
+TVMET_IMPLEMENT_MACRO(and, &&, long long int)
+TVMET_IMPLEMENT_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, float)
+TVMET_IMPLEMENT_MACRO(less, <, float)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, float)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, float)
+TVMET_IMPLEMENT_MACRO(eq, ==, float)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, float)
+TVMET_IMPLEMENT_MACRO(and, &&, float)
+TVMET_IMPLEMENT_MACRO(or, ||, float)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, double)
+TVMET_IMPLEMENT_MACRO(less, <, double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, double)
+TVMET_IMPLEMENT_MACRO(eq, ==, double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, double)
+TVMET_IMPLEMENT_MACRO(and, &&, double)
+TVMET_IMPLEMENT_MACRO(or, ||, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long double)
+TVMET_IMPLEMENT_MACRO(less, <, long double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long double)
+TVMET_IMPLEMENT_MACRO(eq, ==, long double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long double)
+TVMET_IMPLEMENT_MACRO(and, &&, long double)
+TVMET_IMPLEMENT_MACRO(or, ||, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * unary_operator(Vector<T, Sz>)
+ * Note: per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME<T>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+operator OP (const Vector<T, Sz>& rhs) {				\
+  typedef XprUnOp<							\
+    Fcnl_##NAME<T>,							\
+    VectorConstReference<T, Sz>						\
+  >  							 expr_type;	\
+  return XprVector<expr_type, Sz>(expr_type(rhs.const_ref()));		\
+}
+
+TVMET_IMPLEMENT_MACRO(not, !)
+TVMET_IMPLEMENT_MACRO(compl, ~)
+TVMET_IMPLEMENT_MACRO(neg, -)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_VECTOR_OPERATORS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h b/tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h
new file mode 100644
index 0000000..b556ac7
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h
@@ -0,0 +1,229 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorUnaryFunctions.h,v 1.9 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_VECTOR_UNARY_FUNCTIONS_H
+#define TVMET_VECTOR_UNARY_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+/*
+ * unary_function(Vector<T, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)			\
+template<class T, std::size_t Sz>			\
+XprVector<						\
+  XprUnOp<						\
+    Fcnl_##NAME<T>,					\
+    VectorConstReference<T, Sz>				\
+  >,							\
+  Sz							\
+>							\
+NAME(const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(abs)
+TVMET_DECLARE_MACRO(cbrt)
+TVMET_DECLARE_MACRO(ceil)
+TVMET_DECLARE_MACRO(floor)
+TVMET_DECLARE_MACRO(rint)
+TVMET_DECLARE_MACRO(sin)
+TVMET_DECLARE_MACRO(cos)
+TVMET_DECLARE_MACRO(tan)
+TVMET_DECLARE_MACRO(sinh)
+TVMET_DECLARE_MACRO(cosh)
+TVMET_DECLARE_MACRO(tanh)
+TVMET_DECLARE_MACRO(asin)
+TVMET_DECLARE_MACRO(acos)
+TVMET_DECLARE_MACRO(atan)
+TVMET_DECLARE_MACRO(exp)
+TVMET_DECLARE_MACRO(log)
+TVMET_DECLARE_MACRO(log10)
+TVMET_DECLARE_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_DECLARE_MACRO(asinh)
+TVMET_DECLARE_MACRO(acosh)
+TVMET_DECLARE_MACRO(atanh)
+TVMET_DECLARE_MACRO(expm1)
+TVMET_DECLARE_MACRO(log1p)
+TVMET_DECLARE_MACRO(erf)
+TVMET_DECLARE_MACRO(erfc)
+TVMET_DECLARE_MACRO(j0)
+TVMET_DECLARE_MACRO(j1)
+TVMET_DECLARE_MACRO(y0)
+TVMET_DECLARE_MACRO(y1)
+TVMET_DECLARE_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_DECLARE_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_DECLARE_MACRO(isinf)
+#endif
+TVMET_DECLARE_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * unary_function(Vector<std::complex<T>, Sz>)
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class T, std::size_t Sz>					\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME< std::complex<T> >,					\
+    VectorConstReference<std::complex<T>, Sz>				\
+  >,									\
+  Sz									\
+>									\
+NAME(const Vector<std::complex<T>, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(real)
+TVMET_DECLARE_MACRO(imag)
+TVMET_DECLARE_MACRO(arg)
+TVMET_DECLARE_MACRO(norm)
+TVMET_DECLARE_MACRO(conj)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * unary_function(Vector<T, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME<T>,							\
+    VectorConstReference<T, Sz>						\
+  >,									\
+  Sz									\
+>									\
+NAME(const Vector<T, Sz>& rhs) {					\
+  typedef XprUnOp<							\
+      Fcnl_##NAME<T>,							\
+      VectorConstReference<T, Sz>					\
+    > 							expr_type;	\
+    return XprVector<expr_type, Sz>(expr_type(rhs.const_ref()));	\
+}
+
+TVMET_IMPLEMENT_MACRO(abs)
+TVMET_IMPLEMENT_MACRO(cbrt)
+TVMET_IMPLEMENT_MACRO(ceil)
+TVMET_IMPLEMENT_MACRO(floor)
+TVMET_IMPLEMENT_MACRO(rint)
+TVMET_IMPLEMENT_MACRO(sin)
+TVMET_IMPLEMENT_MACRO(cos)
+TVMET_IMPLEMENT_MACRO(tan)
+TVMET_IMPLEMENT_MACRO(sinh)
+TVMET_IMPLEMENT_MACRO(cosh)
+TVMET_IMPLEMENT_MACRO(tanh)
+TVMET_IMPLEMENT_MACRO(asin)
+TVMET_IMPLEMENT_MACRO(acos)
+TVMET_IMPLEMENT_MACRO(atan)
+TVMET_IMPLEMENT_MACRO(exp)
+TVMET_IMPLEMENT_MACRO(log)
+TVMET_IMPLEMENT_MACRO(log10)
+TVMET_IMPLEMENT_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_IMPLEMENT_MACRO(asinh)
+TVMET_IMPLEMENT_MACRO(acosh)
+TVMET_IMPLEMENT_MACRO(atanh)
+TVMET_IMPLEMENT_MACRO(expm1)
+TVMET_IMPLEMENT_MACRO(log1p)
+TVMET_IMPLEMENT_MACRO(erf)
+TVMET_IMPLEMENT_MACRO(erfc)
+TVMET_IMPLEMENT_MACRO(j0)
+TVMET_IMPLEMENT_MACRO(j1)
+TVMET_IMPLEMENT_MACRO(y0)
+TVMET_IMPLEMENT_MACRO(y1)
+TVMET_IMPLEMENT_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_IMPLEMENT_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_IMPLEMENT_MACRO(isinf)
+#endif
+TVMET_IMPLEMENT_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * unary_function(Vector<std::complex<T>, Sz>)
+ */
+#if defined(TVMET_HAVE_COMPLEX)
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class T, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME< std::complex<T> >,					\
+    VectorConstReference<std::complex<T>, Sz>				\
+  >,									\
+  Sz									\
+>									\
+NAME(const Vector<std::complex<T>, Sz>& rhs) {				\
+  typedef XprUnOp<							\
+      Fcnl_##NAME< std::complex<T> >,					\
+      VectorConstReference<std::complex<T>, Sz>				\
+    > 							expr_type;	\
+    return XprVector<expr_type, Sz>(expr_type(rhs.const_ref()));	\
+}
+
+TVMET_IMPLEMENT_MACRO(real)
+TVMET_IMPLEMENT_MACRO(imag)
+TVMET_IMPLEMENT_MACRO(arg)
+TVMET_IMPLEMENT_MACRO(norm)
+TVMET_IMPLEMENT_MACRO(conj)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+#endif // TVMET_VECTOR_UNARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/config/Makefile.am b/tvmet-1.7.1/include/tvmet/config/Makefile.am
new file mode 100644
index 0000000..4295c1d
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/Makefile.am
@@ -0,0 +1,12 @@
+# $Id: Makefile.am,v 1.4 2004/10/31 09:49:03 opetzold Exp $
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)/config
+
+libtvmetinclude_HEADERS = \
+	config-gcc.h \
+	config-icc.h \
+	config-kcc.h \
+	config-pgi.h \
+	config-vc71.h.in config-vc71.h
+
+config-vc71.h: config-vc71.h.in
diff --git a/tvmet-1.7.1/include/tvmet/config/Makefile.in b/tvmet-1.7.1/include/tvmet/config/Makefile.in
new file mode 100644
index 0000000..d21f951
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/Makefile.in
@@ -0,0 +1,419 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.4 2004/10/31 09:49:03 opetzold Exp $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/tvmet/config
+DIST_COMMON = $(libtvmetinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config-vc71.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES = config-vc71.h
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(libtvmetincludedir)"
+libtvmetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtvmetinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+libtvmetincludedir = $(includedir)/$(PACKAGE)/config
+libtvmetinclude_HEADERS = \
+	config-gcc.h \
+	config-icc.h \
+	config-kcc.h \
+	config-pgi.h \
+	config-vc71.h.in config-vc71.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/tvmet/config/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/tvmet/config/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+config-vc71.h: $(top_builddir)/config.status $(srcdir)/config-vc71.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-libtvmetincludeHEADERS: $(libtvmetinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libtvmetincludedir)" || $(mkdir_p) "$(DESTDIR)$(libtvmetincludedir)"
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(libtvmetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  $(libtvmetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+uninstall-libtvmetincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libtvmetincludedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libtvmetincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libtvmetincludeHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool ctags distclean 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-exec install-exec-am install-info \
+	install-info-am install-libtvmetincludeHEADERS install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libtvmetincludeHEADERS
+
+
+config-vc71.h: config-vc71.h.in
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/config/config-gcc.h b/tvmet-1.7.1/include/tvmet/config/config-gcc.h
new file mode 100644
index 0000000..6e12d7a
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/config-gcc.h
@@ -0,0 +1,43 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: config-gcc.h,v 1.6 2004/06/08 16:19:32 opetzold Exp $
+ */
+
+#ifndef TVMET_CONFIG_GCC_H
+#define TVMET_CONFIG_GCC_H
+
+#if defined(__GNUC__)
+
+   // force inline
+#  define TVMET_CXX_ALWAYS_INLINE __attribute__((always_inline))
+
+#else // !defined(__GNUC__)
+
+   // paranoia
+#  warning "config header for gnuc included without defined __GNUC__"
+
+#endif
+
+#endif // TVMET_CONFIG_GCC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/config/config-icc.h b/tvmet-1.7.1/include/tvmet/config/config-icc.h
new file mode 100644
index 0000000..a9d7be8
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/config-icc.h
@@ -0,0 +1,68 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: config-icc.h,v 1.8 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_CONFIG_ICC_H
+#define TVMET_CONFIG_ICC_H
+
+#if defined(__INTEL_COMPILER)
+
+  /* isnan/isinf hack
+   *
+   * The problem is related intel's 8.0 macros isnan and isinf,
+   * they are expanded in this version and they are not compileable
+   * therefore. We use a small hack here - disabling. This is
+   * not an real solution, nor forever.
+   * For a list of all defined symbols use icpc -E -dM prog1.cpp
+   * or read /opt/intel/compiler80/doc/c_ug/index.htm.
+   */
+#  if (__INTEL_COMPILER == 800) || (__INTEL_COMPILER > 800)
+#    define TVMET_NO_IEEE_MATH_ISNAN
+#    define TVMET_NO_IEEE_MATH_ISINF
+#  endif
+
+
+   /*
+    * disable compiler warnings
+    */
+#  pragma warning(disable:981) // operands are evaluated in unspecified order
+
+
+   /*
+    * force inline using gcc's compatibility mode
+    */
+#  if (__INTEL_COMPILER == 800) || (__INTEL_COMPILER > 800)
+#    define TVMET_CXX_ALWAYS_INLINE __attribute__((always_inline))
+#  endif
+
+#else // !defined(__INTEL_COMPILER)
+
+   // paranoia
+#  warning "config header included without defined __INTEL_COMPILER"
+
+#endif
+
+#endif // TVMET_CONFIG_ICC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/config/config-kcc.h b/tvmet-1.7.1/include/tvmet/config/config-kcc.h
new file mode 100644
index 0000000..8fe8130
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/config-kcc.h
@@ -0,0 +1,40 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: config-kcc.h,v 1.5 2003/11/30 08:26:25 opetzold Exp $
+ */
+
+#ifndef TVMET_CONFIG_KCC_H
+#define TVMET_CONFIG_KCC_H
+
+#if defined(__KCC)
+
+#else // !defined(__KCC)
+
+   // paranoia
+#  warning "config header included without defined __KCC"
+
+#endif
+
+#endif // TVMET_CONFIG_KCC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/config/config-pgi.h b/tvmet-1.7.1/include/tvmet/config/config-pgi.h
new file mode 100644
index 0000000..a503978
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/config-pgi.h
@@ -0,0 +1,47 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: config-pgi.h,v 1.6 2004/06/10 17:11:46 opetzold Exp $
+ */
+
+#ifndef TVMET_CONFIG_PGI_H
+#define TVMET_CONFIG_PGI_H
+
+#if defined(__PGI)
+
+
+   // obviously does have pgCC 5.1 (trial) no long double on sqrt
+#  if defined(TVMET_HAVE_LONG_DOUBLE)
+#    undef TVMET_HAVE_LONG_DOUBLE
+#  endif
+
+
+#else // !defined(__PGI)
+
+   // paranoia
+#  warning "config header included without defined __PGI"
+
+#endif
+
+#endif // TVMET_CONFIG_PGI_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/config/config-vc71.h b/tvmet-1.7.1/include/tvmet/config/config-vc71.h
new file mode 100644
index 0000000..b86ad9d
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/config-vc71.h
@@ -0,0 +1,249 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: config-vc71.h.in,v 1.2 2004/11/04 16:47:12 opetzold Exp $
+ */
+
+#ifndef TVMET_CONFIG_VC71_H
+#define TVMET_CONFIG_VC71_H
+
+
+/*******************************************************************
+ * equivalent hand made header to configure.ac's autoheader.
+ ******************************************************************/
+
+
+/* define if the compiler has complex<T> */
+#ifndef TVMET_HAVE_COMPLEX
+#define TVMET_HAVE_COMPLEX 1
+#endif
+
+/* define if the compiler has complex math functions */
+#ifndef TVMET_HAVE_COMPLEX_MATH1
+#define TVMET_HAVE_COMPLEX_MATH1 1
+#endif
+
+/* define if the compiler has more complex math functions */
+/* #undef TVMET_HAVE_COMPLEX_MATH2 */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#ifdef TVMET_HAVE_DLFCN_H
+#undef TVMET_HAVE_DLFCN_H
+#endif
+
+/* Define to 1 if you have the `floor' function. */
+#ifndef TVMET_HAVE_FLOOR
+#define TVMET_HAVE_FLOOR  1
+#endif
+
+/* Define if the compiler supports IEEE math library */
+#ifndef TVMET_HAVE_IEEE_MATH
+#define TVMET_HAVE_IEEE_MATH 1
+#endif
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#ifdef TVMET_HAVE_INTTYPES_H
+#undef TVMET_HAVE_INTTYPES_H
+#endif
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+#ifdef TVMET_HAVE_LIBDL
+#undef TVMET_HAVE_LIBDL
+#endif
+
+/* Define to 1 if long double works and has more range or precision than
+   double. */
+#ifndef TVMET_HAVE_LONG_DOUBLE
+#define TVMET_HAVE_LONG_DOUBLE  1
+#endif
+
+/* Define if the compiler supports the long_long type */
+// enable MS extension for long long
+#ifndef TVMET_HAVE_LONG_LONG
+#define TVMET_HAVE_LONG_LONG 1
+#endif
+
+/* Define to 1 if you have the <memory.h> header file. */
+#ifndef TVMET_HAVE_MEMORY_H
+#define TVMET_HAVE_MEMORY_H  1
+#endif
+
+/* Define if the compiler supports the mutable keyword */
+#ifndef TVMET_HAVE_MUTABLE
+#define TVMET_HAVE_MUTABLE 1
+#endif
+
+/* Define if the compiler implements namespaces */
+#ifndef TVMET_HAVE_NAMESPACES
+#define TVMET_HAVE_NAMESPACES 1
+#endif
+
+/* Define if the compiler supports partial specialization */
+#ifndef TVMET_HAVE_PARTIAL_SPECIALIZATION
+#define TVMET_HAVE_PARTIAL_SPECIALIZATION 1
+#endif
+
+/* Define to 1 if you have the `pow' function. */
+#ifndef TVMET_HAVE_POW
+#define TVMET_HAVE_POW  1
+#endif
+
+/* Define to 1 if you have the `rint' function. */
+
+#ifdef TVMET_HAVE_RINT
+#undef TVMET_HAVE_RINT
+#endif
+
+/* Define to 1 if you have the `sqrt' function. */
+#ifndef TVMET_HAVE_SQRT
+#define TVMET_HAVE_SQRT  1
+#endif
+
+/* Define to 1 if stdbool.h conforms to C99. */
+/* #undef TVMET_HAVE_STDBOOL_H */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#ifdef TVMET_HAVE_STDINT_H
+#undef TVMET_HAVE_STDINT_H
+#endif
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#ifndef TVMET_HAVE_STDLIB_H
+#define TVMET_HAVE_STDLIB_H  1
+#endif
+
+/* Define to 1 if you have the <strings.h> header file. */
+#ifdef TVMET_HAVE_STRINGS_H
+#undef TVMET_HAVE_STRINGS_H
+#endif
+
+/* Define to 1 if you have the <string.h> header file. */
+#ifndef TVMET_HAVE_STRING_H
+#define TVMET_HAVE_STRING_H  1
+#endif
+
+/* Define if the compiler supports SYSV math library */
+/* #undef TVMET_HAVE_SYSV_MATH */
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#ifdef TVMET_HAVE_SYS_STAT_H
+#undef TVMET_HAVE_SYS_STAT_H
+#endif
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#ifdef TVMET_HAVE_SYS_TIME_H
+#undef TVMET_HAVE_SYS_TIME_H
+#endif
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#ifdef TVMET_HAVE_SYS_TYPES_H
+#undef TVMET_HAVE_SYS_TYPES_H
+#endif
+
+/* Define if the compiler recognizes typename */
+#ifndef TVMET_HAVE_TYPENAME
+#define TVMET_HAVE_TYPENAME 1
+#endif
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#ifdef TVMET_HAVE_UNISTD_H
+#undef TVMET_HAVE_UNISTD_H
+#endif
+
+/* Define to 1 if the system has the type `_Bool'. */
+/* #undef TVMET_HAVE__BOOL */
+
+/* Define to the address where bug reports for this package should be sent. */
+#ifndef TVMET_PACKAGE_BUGREPORT
+#define TVMET_PACKAGE_BUGREPORT  "opetzold@users.sourceforge.net"
+#endif
+
+/* Define to the full name of this package. */
+#ifndef TVMET_PACKAGE_NAME
+#define TVMET_PACKAGE_NAME  "tvmet"
+#endif
+
+/* Define to the full name and version of this package. */
+#ifndef TVMET_PACKAGE_STRING
+#define TVMET_PACKAGE_STRING  "tvmet 1.7.1"
+#endif
+
+/* Define to the one symbol short name of this package. */
+#ifndef TVMET_PACKAGE_TARNAME
+#define TVMET_PACKAGE_TARNAME  "tvmet"
+#endif
+
+/* Define to the version of this package. */
+#ifndef TVMET_PACKAGE_VERSION
+#define TVMET_PACKAGE_VERSION  "1.7.1"
+#endif
+
+/* Define to 1 if you have the ANSI C header files. */
+#ifndef TVMET_STDC_HEADERS
+#define TVMET_STDC_HEADERS  1
+#endif
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TVMET_TM_IN_SYS_TIME */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef _tvmet_const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef _tvmet_inline */
+#endif
+
+/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
+   supported. Do not define if restrict is supported directly. */
+// unfortunally, VC++ 7.1 doesn't have restrict.
+#ifndef _tvmet_restrict
+#define _tvmet_restrict
+#endif
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+/* #undef _tvmet_size_t */
+
+
+
+/*******************************************************************
+ * tvmet's config for special handling on MS VC
+ ******************************************************************/
+
+
+#if defined(_MSC_VER)
+
+/* The undefined case of TVMET_CXX_ALWAYS_INLINE is handled inside
+ * tvmet.h, so there there is no need to do this here! */
+
+#else // !defined(_MSC_VER)
+
+   // paranoia
+#  warning "config header for MS VC 7.1 included without defined _MSC_VER"
+
+#endif
+
+#endif // TVMET_CONFIG_VC71_H
+
+// Local Variables:
+// mode:C++
+// End:
+//  LocalWords:  autoheader
diff --git a/tvmet-1.7.1/include/tvmet/config/config-vc71.h.in b/tvmet-1.7.1/include/tvmet/config/config-vc71.h.in
new file mode 100644
index 0000000..e050999
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/config/config-vc71.h.in
@@ -0,0 +1,249 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: config-vc71.h.in,v 1.2 2004/11/04 16:47:12 opetzold Exp $
+ */
+
+#ifndef TVMET_CONFIG_VC71_H
+#define TVMET_CONFIG_VC71_H
+
+
+/*******************************************************************
+ * equivalent hand made header to configure.ac's autoheader.
+ ******************************************************************/
+
+
+/* define if the compiler has complex<T> */
+#ifndef TVMET_HAVE_COMPLEX
+#define TVMET_HAVE_COMPLEX 1
+#endif
+
+/* define if the compiler has complex math functions */
+#ifndef TVMET_HAVE_COMPLEX_MATH1
+#define TVMET_HAVE_COMPLEX_MATH1 1
+#endif
+
+/* define if the compiler has more complex math functions */
+/* #undef TVMET_HAVE_COMPLEX_MATH2 */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#ifdef TVMET_HAVE_DLFCN_H
+#undef TVMET_HAVE_DLFCN_H
+#endif
+
+/* Define to 1 if you have the `floor' function. */
+#ifndef TVMET_HAVE_FLOOR
+#define TVMET_HAVE_FLOOR  1
+#endif
+
+/* Define if the compiler supports IEEE math library */
+#ifndef TVMET_HAVE_IEEE_MATH
+#define TVMET_HAVE_IEEE_MATH 1
+#endif
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#ifdef TVMET_HAVE_INTTYPES_H
+#undef TVMET_HAVE_INTTYPES_H
+#endif
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+#ifdef TVMET_HAVE_LIBDL
+#undef TVMET_HAVE_LIBDL
+#endif
+
+/* Define to 1 if long double works and has more range or precision than
+   double. */
+#ifndef TVMET_HAVE_LONG_DOUBLE
+#define TVMET_HAVE_LONG_DOUBLE  1
+#endif
+
+/* Define if the compiler supports the long_long type */
+// enable MS extension for long long
+#ifndef TVMET_HAVE_LONG_LONG
+#define TVMET_HAVE_LONG_LONG 1
+#endif
+
+/* Define to 1 if you have the <memory.h> header file. */
+#ifndef TVMET_HAVE_MEMORY_H
+#define TVMET_HAVE_MEMORY_H  1
+#endif
+
+/* Define if the compiler supports the mutable keyword */
+#ifndef TVMET_HAVE_MUTABLE
+#define TVMET_HAVE_MUTABLE 1
+#endif
+
+/* Define if the compiler implements namespaces */
+#ifndef TVMET_HAVE_NAMESPACES
+#define TVMET_HAVE_NAMESPACES 1
+#endif
+
+/* Define if the compiler supports partial specialization */
+#ifndef TVMET_HAVE_PARTIAL_SPECIALIZATION
+#define TVMET_HAVE_PARTIAL_SPECIALIZATION 1
+#endif
+
+/* Define to 1 if you have the `pow' function. */
+#ifndef TVMET_HAVE_POW
+#define TVMET_HAVE_POW  1
+#endif
+
+/* Define to 1 if you have the `rint' function. */
+
+#ifdef TVMET_HAVE_RINT
+#undef TVMET_HAVE_RINT
+#endif
+
+/* Define to 1 if you have the `sqrt' function. */
+#ifndef TVMET_HAVE_SQRT
+#define TVMET_HAVE_SQRT  1
+#endif
+
+/* Define to 1 if stdbool.h conforms to C99. */
+/* #undef TVMET_HAVE_STDBOOL_H */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#ifdef TVMET_HAVE_STDINT_H
+#undef TVMET_HAVE_STDINT_H
+#endif
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#ifndef TVMET_HAVE_STDLIB_H
+#define TVMET_HAVE_STDLIB_H  1
+#endif
+
+/* Define to 1 if you have the <strings.h> header file. */
+#ifdef TVMET_HAVE_STRINGS_H
+#undef TVMET_HAVE_STRINGS_H
+#endif
+
+/* Define to 1 if you have the <string.h> header file. */
+#ifndef TVMET_HAVE_STRING_H
+#define TVMET_HAVE_STRING_H  1
+#endif
+
+/* Define if the compiler supports SYSV math library */
+/* #undef TVMET_HAVE_SYSV_MATH */
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#ifdef TVMET_HAVE_SYS_STAT_H
+#undef TVMET_HAVE_SYS_STAT_H
+#endif
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#ifdef TVMET_HAVE_SYS_TIME_H
+#undef TVMET_HAVE_SYS_TIME_H
+#endif
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#ifdef TVMET_HAVE_SYS_TYPES_H
+#undef TVMET_HAVE_SYS_TYPES_H
+#endif
+
+/* Define if the compiler recognizes typename */
+#ifndef TVMET_HAVE_TYPENAME
+#define TVMET_HAVE_TYPENAME 1
+#endif
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#ifdef TVMET_HAVE_UNISTD_H
+#undef TVMET_HAVE_UNISTD_H
+#endif
+
+/* Define to 1 if the system has the type `_Bool'. */
+/* #undef TVMET_HAVE__BOOL */
+
+/* Define to the address where bug reports for this package should be sent. */
+#ifndef TVMET_PACKAGE_BUGREPORT
+#define TVMET_PACKAGE_BUGREPORT  "@PACKAGE_BUGREPORT@"
+#endif
+
+/* Define to the full name of this package. */
+#ifndef TVMET_PACKAGE_NAME
+#define TVMET_PACKAGE_NAME  "@PACKAGE_NAME@"
+#endif
+
+/* Define to the full name and version of this package. */
+#ifndef TVMET_PACKAGE_STRING
+#define TVMET_PACKAGE_STRING  "@PACKAGE_STRING@"
+#endif
+
+/* Define to the one symbol short name of this package. */
+#ifndef TVMET_PACKAGE_TARNAME
+#define TVMET_PACKAGE_TARNAME  "@PACKAGE_TARNAME@"
+#endif
+
+/* Define to the version of this package. */
+#ifndef TVMET_PACKAGE_VERSION
+#define TVMET_PACKAGE_VERSION  "@PACKAGE_VERSION@"
+#endif
+
+/* Define to 1 if you have the ANSI C header files. */
+#ifndef TVMET_STDC_HEADERS
+#define TVMET_STDC_HEADERS  1
+#endif
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TVMET_TM_IN_SYS_TIME */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef _tvmet_const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef _tvmet_inline */
+#endif
+
+/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
+   supported. Do not define if restrict is supported directly. */
+// unfortunally, VC++ 7.1 doesn't have restrict.
+#ifndef _tvmet_restrict
+#define _tvmet_restrict
+#endif
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+/* #undef _tvmet_size_t */
+
+
+
+/*******************************************************************
+ * tvmet's config for special handling on MS VC
+ ******************************************************************/
+
+
+#if defined(_MSC_VER)
+
+/* The undefined case of TVMET_CXX_ALWAYS_INLINE is handled inside
+ * tvmet.h, so there there is no need to do this here! */
+
+#else // !defined(_MSC_VER)
+
+   // paranoia
+#  warning "config header for MS VC 7.1 included without defined _MSC_VER"
+
+#endif
+
+#endif // TVMET_CONFIG_VC71_H
+
+// Local Variables:
+// mode:C++
+// End:
+//  LocalWords:  autoheader
diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemm.h b/tvmet-1.7.1/include/tvmet/loop/Gemm.h
new file mode 100644
index 0000000..8d8825a
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Gemm.h
@@ -0,0 +1,114 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemm.h,v 1.8 2004/06/16 09:30:07 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_GEMM_H
+#define TVMET_LOOP_GEMM_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class gemm Gemm.h "tvmet/loop/Gemm.h"
+ * \brief class for matrix-matrix product using loop unrolling.
+ *        using formula
+ *        \f[
+ *        M_1\,M_2
+ *        \f]
+ * \par Example:
+ * \code
+ * template<class T, std::size_t Rows1, std::size_t Cols1, std::size_t Cols2>
+ * inline
+ * void
+ * prod(const Matrix<T, Rows1, Cols1>& lhs, const Matrix<T, Cols1, Cols2>& rhs,
+ * 	Matrix<T, Rows1, Cols2>& dest)
+ * {
+ *   for (std::size_t i = 0; i != Rows1; ++i) {
+ *     for (std::size_t j = 0; j != Cols2; ++j) {
+ *       dest(i, j) = tvmet::loop::gemm<Rows1, Cols1, Cols2>().prod(lhs, rhs, i, j);
+ *     }
+ *   }
+ * }
+ * \endcode
+ * \note The number of rows of rhs matrix have to be equal to cols of lhs matrix.
+ *       The result is a (Rows1 x Cols2) matrix.
+ */
+template<std::size_t Rows1, std::size_t Cols1,
+	 std::size_t Cols2>
+class gemm
+{
+  gemm(const gemm&);
+  gemm& operator=(const gemm&);
+
+private:
+  enum {
+    count 	= Cols1,
+    N 		= (count+7)/8
+  };
+
+public:
+  gemm() { }
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+    >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    typename PromoteTraits<
+      typename E1::value_type,
+      typename E2::value_type
+    >::value_type  				sum(0);
+    std::size_t 				k(0);
+    std::size_t 				n(N);
+
+    // Duff's device
+    switch(count % 8) {
+    case 0: do { sum += lhs(i, k) * rhs(k, j); ++k;
+    case 7:      sum += lhs(i, k) * rhs(k, j); ++k;
+    case 6:      sum += lhs(i, k) * rhs(k, j); ++k;
+    case 5:      sum += lhs(i, k) * rhs(k, j); ++k;
+    case 4:      sum += lhs(i, k) * rhs(k, j); ++k;
+    case 3:      sum += lhs(i, k) * rhs(k, j); ++k;
+    case 2:      sum += lhs(i, k) * rhs(k, j); ++k;
+    case 1:      sum += lhs(i, k) * rhs(k, j); ++k;
+            } while(--n != 0);
+    }
+
+    return sum;
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_GEMM_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemmt.h b/tvmet-1.7.1/include/tvmet/loop/Gemmt.h
new file mode 100644
index 0000000..90e3382
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Gemmt.h
@@ -0,0 +1,114 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemmt.h,v 1.5 2004/06/16 09:30:07 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_GEMMT_H
+#define TVMET_LOOP_GEMMT_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class gemmt Gemmt.h "tvmet/loop/Gemmt.h"
+ * \brief class for for product matrix-transpose(matrix) operations.
+ *        using formula
+ *        \f[
+ *        M_1\,M_2^{T}
+ *        \f]
+ * \par Example:
+ * \code
+ * template<class T, std::size_t Rows1, std::size_t Cols1, std::size_t Cols2>
+ * inline
+ * void
+ * prod(const Matrix<T, Rows1, Cols1>& lhs, const Matrix<T, Rows2, Cols1>& rhs,
+ * 	Matrix<T, Rows1, Rows2>& dest)
+ * {
+ *   for (std::size_t i = 0; i != Rows1; ++i) {
+ *     for (std::size_t j = 0; j != Rows2; ++j) {
+ *       dest(i, j) = tvmet::loop::gemmt<Rows1, Cols1, Cols1>().prod(lhs, rhs, i, j);
+ *     }
+ *   }
+ * }
+ * \endcode
+ * \note The number of cols of rhs matrix have to be equal to cols of rhs matrix.
+ *       The result is a (Rows1 x Rows2) matrix.
+ */
+template<std::size_t Rows1, std::size_t Cols1,
+	 std::size_t Cols2 /* unused */>
+class gemmt
+{
+  gemmt(const gemmt&);
+  gemmt& operator=(const gemmt&);
+
+private:
+  enum {
+    count 	= Cols1,
+    N 		= (count+7)/8
+  };
+
+public:
+  gemmt() { }
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+    >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    typename PromoteTraits<
+      typename E1::value_type,
+      typename E2::value_type
+    >::value_type  				sum(0);
+    std::size_t 				k(0);
+    std::size_t 				n(N);
+
+    // Duff's device
+    switch(count % 8) {
+    case 0: do { sum += lhs(i, k) * rhs(j, k); ++k;
+    case 7:      sum += lhs(i, k) * rhs(j, k); ++k;
+    case 6:      sum += lhs(i, k) * rhs(j, k); ++k;
+    case 5:      sum += lhs(i, k) * rhs(j, k); ++k;
+    case 4:      sum += lhs(i, k) * rhs(j, k); ++k;
+    case 3:      sum += lhs(i, k) * rhs(j, k); ++k;
+    case 2:      sum += lhs(i, k) * rhs(j, k); ++k;
+    case 1:      sum += lhs(i, k) * rhs(j, k); ++k;
+            } while(--n != 0);
+    }
+
+    return sum;
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_GEMMT_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemtm.h b/tvmet-1.7.1/include/tvmet/loop/Gemtm.h
new file mode 100644
index 0000000..797954e
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Gemtm.h
@@ -0,0 +1,115 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemtm.h,v 1.5 2004/06/16 09:30:07 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_GEMTM_H
+#define TVMET_LOOP_GEMTM_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class gemtm Gemtm.h "tvmet/loop/Gemtm.h"
+ * \brief class for matrix-matrix product using loop unrolling.
+ *        using formula
+ *        \f[
+ *        M_1^{T}\,M_2
+ *        \f]
+ * \par Example:
+ * \code
+ * template<class T, std::size_t Rows1, std::size_t Cols1, std::size_t Cols2>
+ * inline
+ * void
+ * prod(const Matrix<T, Rows1, Cols1>& lhs, const Matrix<T, Rows1, Cols2>& rhs,
+ * 	Matrix<T, Cols2, Cols1>& dest)
+ * {
+ *   for (std::size_t i = 0; i != Cols1; ++i) {
+ *     for (std::size_t j = 0; j != Cols2; ++j) {
+ *       dest(i, j) = tvmet::loop::gemtm<Rows1, Cols1, Cols2>::prod(lhs, rhs, i, j);
+ *     }
+ *   }
+ * }
+ * \endcode
+ * \note The number of rows of rhs matrix have to be equal rows of rhs matrix,
+ *       since lhs matrix 1 is transposed.
+ *       The result is a (Cols1 x Cols2) matrix.
+ */
+template<std::size_t Rows1, std::size_t Cols1,
+	 std::size_t Cols2>
+class gemtm
+{
+  gemtm(const gemtm&);
+  gemtm& operator=(const gemtm&);
+
+private:
+  enum {
+    count 	= Cols1,
+    N 		= (count+7)/8
+  };
+
+public:
+  gemtm() { }
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+    >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    typename PromoteTraits<
+      typename E1::value_type,
+      typename E2::value_type
+    >::value_type  				sum(0);
+    std::size_t 				k(0);
+    std::size_t 				n(N);
+
+    // Duff's device
+    switch(count % 8) {
+    case 0: do { sum += lhs(k, i) * rhs(k, j); ++k;
+    case 7:      sum += lhs(k, i) * rhs(k, j); ++k;
+    case 6:      sum += lhs(k, i) * rhs(k, j); ++k;
+    case 5:      sum += lhs(k, i) * rhs(k, j); ++k;
+    case 4:      sum += lhs(k, i) * rhs(k, j); ++k;
+    case 3:      sum += lhs(k, i) * rhs(k, j); ++k;
+    case 2:      sum += lhs(k, i) * rhs(k, j); ++k;
+    case 1:      sum += lhs(k, i) * rhs(k, j); ++k;
+            } while(--n != 0);
+    }
+
+    return sum;
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_GEMTM_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemtv.h b/tvmet-1.7.1/include/tvmet/loop/Gemtv.h
new file mode 100644
index 0000000..6c60376
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Gemtv.h
@@ -0,0 +1,109 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemtv.h,v 1.3 2004/06/16 09:30:07 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_GEMTV_H
+#define TVMET_LOOP_GEMTV_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class gemtv Gemtv.h "tvmet/loop/Gemtv.h"
+ * \brief class for transposed(matrix)-vector product using loop unrolling.
+ *        using formula
+ *        \f[
+ *        M^T\,v
+ *        \f]
+ * \par Example:
+ * \code
+ * template<class T, std::size_t Rows, std::size_t Cols>
+ * inline
+ * void
+ * prod(const Matrix<T, Rows, Cols>& lhs, const Vector<T, Rows>& rhs,
+ * 	Vector<T, Cols>& dest)
+ * {
+ *   for (std::size_t i = 0; i != Cols; ++i) {
+ *     dest(i) = tvmet::loop::gemtv<Rows, Cols>().prod(lhs, rhs, i);
+ *   }
+ * }
+ * \endcode
+ */
+template<std::size_t Rows, std::size_t Cols>
+class gemtv
+{
+  gemtv(const gemtv&);
+  gemtv& operator=(const gemtv&);
+
+private:
+  enum {
+    count 	= Rows,
+    N 		= (count+7)/8
+  };
+
+public:
+  gemtv() { }
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+    >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i) {
+    typename PromoteTraits<
+      typename E1::value_type,
+      typename E2::value_type
+    >::value_type  				sum(0);
+    std::size_t 				j(0);
+    std::size_t 				n(N);
+
+    // Duff's device
+    switch(count % 8) {
+    case 0: do { sum += lhs(j, i) * rhs(j); ++j;
+    case 7:      sum += lhs(j, i) * rhs(j); ++j;
+    case 6:      sum += lhs(j, i) * rhs(j); ++j;
+    case 5:      sum += lhs(j, i) * rhs(j); ++j;
+    case 4:      sum += lhs(j, i) * rhs(j); ++j;
+    case 3:      sum += lhs(j, i) * rhs(j); ++j;
+    case 2:      sum += lhs(j, i) * rhs(j); ++j;
+    case 1:      sum += lhs(j, i) * rhs(j); ++j;
+            } while(--n != 0);
+    }
+
+    return sum;
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_GEMTV_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemv.h b/tvmet-1.7.1/include/tvmet/loop/Gemv.h
new file mode 100644
index 0000000..85bbba2
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Gemv.h
@@ -0,0 +1,109 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemv.h,v 1.3 2004/06/16 09:30:07 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_GEMV_H
+#define TVMET_LOOP_GEMV_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class gemv Gemv.h "tvmet/loop/Gemv.h"
+ * \brief class for matrix-vector product using loop unrolling.
+ *        using formula
+ *        \f[
+ *        M\,v
+ *        \f]
+ * \par Example:
+ * \code
+ * template<class T, std::size_t Rows, std::size_t Cols>
+ * inline
+ * void
+ * prod(const Matrix<T, Rows, Cols>& lhs, const Vector<T, Cols>& rhs,
+ * 	Vector<T, Rows>& dest)
+ * {
+ *   for (std::size_t i = 0; i != Rows; ++i) {
+ *     dest(i) = tvmet::loop::gemv<Rows, Cols>().prod(lhs, rhs, i);
+ *   }
+ * }
+ * \endcode
+ */
+template<std::size_t Rows, std::size_t Cols>
+class gemv
+{
+  gemv(const gemv&);
+  gemv& operator=(const gemv&);
+
+private:
+  enum {
+    count 	= Cols,
+    N 		= (count+7)/8
+  };
+
+public:
+  gemv() { }
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+    >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i) {
+    typename PromoteTraits<
+      typename E1::value_type,
+      typename E2::value_type
+    >::value_type  				sum(0);
+    std::size_t 				j(0);
+    std::size_t 				n(N);
+
+    // Duff's device
+    switch(count % 8) {
+    case 0: do { sum += lhs(i, j) * rhs(j); ++j;
+    case 7:      sum += lhs(i, j) * rhs(j); ++j;
+    case 6:      sum += lhs(i, j) * rhs(j); ++j;
+    case 5:      sum += lhs(i, j) * rhs(j); ++j;
+    case 4:      sum += lhs(i, j) * rhs(j); ++j;
+    case 3:      sum += lhs(i, j) * rhs(j); ++j;
+    case 2:      sum += lhs(i, j) * rhs(j); ++j;
+    case 1:      sum += lhs(i, j) * rhs(j); ++j;
+            } while(--n != 0);
+    }
+
+    return sum;
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_GEMV_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Makefile.am b/tvmet-1.7.1/include/tvmet/loop/Makefile.am
new file mode 100644
index 0000000..3321d62
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Makefile.am
@@ -0,0 +1,12 @@
+# $Id: Makefile.am,v 1.6 2004/04/12 21:50:35 opetzold Exp $
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)/loop
+
+libtvmetinclude_HEADERS = \
+	Gemm.h \
+	Gemtm.h \
+	Gemmt.h \
+	Gemv.h \
+	Gemtv.h \
+	Matrix.h \
+	Vector.h
diff --git a/tvmet-1.7.1/include/tvmet/loop/Makefile.in b/tvmet-1.7.1/include/tvmet/loop/Makefile.in
new file mode 100644
index 0000000..706fd27
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Makefile.in
@@ -0,0 +1,417 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.6 2004/04/12 21:50:35 opetzold Exp $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/tvmet/loop
+DIST_COMMON = $(libtvmetinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(libtvmetincludedir)"
+libtvmetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtvmetinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+libtvmetincludedir = $(includedir)/$(PACKAGE)/loop
+libtvmetinclude_HEADERS = \
+	Gemm.h \
+	Gemtm.h \
+	Gemmt.h \
+	Gemv.h \
+	Gemtv.h \
+	Matrix.h \
+	Vector.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/tvmet/loop/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/tvmet/loop/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-libtvmetincludeHEADERS: $(libtvmetinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libtvmetincludedir)" || $(mkdir_p) "$(DESTDIR)$(libtvmetincludedir)"
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(libtvmetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  $(libtvmetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+uninstall-libtvmetincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libtvmetincludedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libtvmetincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libtvmetincludeHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool ctags distclean 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-exec install-exec-am install-info \
+	install-info-am install-libtvmetincludeHEADERS install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libtvmetincludeHEADERS
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Matrix.h b/tvmet-1.7.1/include/tvmet/loop/Matrix.h
new file mode 100644
index 0000000..c3da3b6
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Matrix.h
@@ -0,0 +1,65 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Matrix.h,v 1.7 2004/06/27 20:32:55 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_MATRIX_H
+#define TVMET_LOOP_MATRIX_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class Matrix Matrix.h "tvmet/loop/Matrix.h"
+ * \brief Loop %Matrix class using expression and loop templates.
+ */
+template<std::size_t Rows, std::size_t Cols>
+class Matrix
+{
+  Matrix(const Matrix&);
+  Matrix& operator=(const Matrix&);
+
+public:
+  Matrix() { }
+
+public:
+  /** assign an expression on columns on given row using the functional fn. */
+  template<class E1, class E2, class Assign>
+  static inline
+  void assign(E1& lhs, const E2& rhs, const Assign& assign_fn) {
+    for(std::size_t i = 0; i != Rows; ++i)
+      for(std::size_t j = 0; j != Cols; ++j)
+	assign_fn.apply_on(lhs(i, j), rhs(i, j));
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_MATRIX_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/loop/Vector.h b/tvmet-1.7.1/include/tvmet/loop/Vector.h
new file mode 100644
index 0000000..73bd641
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/loop/Vector.h
@@ -0,0 +1,64 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Vector.h,v 1.5 2004/06/27 20:32:55 opetzold Exp $
+ */
+
+#ifndef TVMET_LOOP_VECTOR_H
+#define TVMET_LOOP_VECTOR_H
+
+namespace tvmet {
+
+namespace loop {
+
+
+/**
+ * \class Vector Vector.h "tvmet/loop/Vector.h"
+ * \brief Loop %Vector class using expression and loop templates.
+ */
+template<std::size_t Sz>
+class Vector
+{
+  Vector(const Vector&);
+  Vector& operator=(const Vector&);
+
+public:
+  Vector() { }
+
+public:
+  /** assign an expression on columns on given row using the functional fn. */
+  template<class E1, class E2, class Assign>
+  static inline
+  void assign(E1& lhs, const E2& rhs, const Assign& assign_fn) {
+    for(std::size_t i = 0; i != Sz; ++i)
+      assign_fn.apply_on(lhs(i), rhs(i));
+  }
+};
+
+
+} // namespace loop
+
+} // namespace tvmet
+
+#endif /* TVMET_LOOP_VECTOR_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemm.h b/tvmet-1.7.1/include/tvmet/meta/Gemm.h
new file mode 100644
index 0000000..8800d65
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Gemm.h
@@ -0,0 +1,101 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemm.h,v 1.11 2004/06/17 15:53:12 opetzold Exp $
+ */
+
+#ifndef TVMET_META_GEMM_H
+#define TVMET_META_GEMM_H
+
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+namespace meta {
+
+
+/**
+ * \class gemm Gemm.h "tvmet/meta/Gemm.h"
+ * \brief Meta class for matrix-matrix operations, like product
+ *        using formula
+ *        \f[
+ *        M_1\,M_2
+ *        \f]
+ * \note The rows of matrix 2 have to be equal to cols of matrix 1.
+ */
+template<std::size_t Rows1, std::size_t Cols1,
+	 std::size_t Cols2,
+	 std::size_t K>
+class gemm
+{
+  gemm();
+  gemm(const gemm&);
+  gemm& operator=(const gemm&);
+
+private:
+  enum {
+    doIt = (K != Cols1 - 1) 		/**< recursive counter */
+  };
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return lhs(i, K) * rhs(K, j)
+      + gemm<Rows1 * doIt, Cols1 * doIt,
+             Cols2 * doIt,
+             (K+1) * doIt>::prod(lhs, rhs, i, j);
+  }
+};
+
+
+/**
+ * \class gemm<0,0,0,0> Gemm.h "tvmet/meta/Gemm.h"
+ * \brief gemm Specialized for recursion.
+ */
+template<>
+class gemm<0,0,0,0>
+{
+  gemm();
+  gemm(const gemm&);
+  gemm& operator=(const gemm&);
+
+public:
+  template<class E1, class E2>
+  static inline
+  XprNull prod(const E1&, const E2&, std::size_t, std::size_t) {
+    return XprNull();
+  }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_GEMM_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemmt.h b/tvmet-1.7.1/include/tvmet/meta/Gemmt.h
new file mode 100644
index 0000000..d3c3d62
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Gemmt.h
@@ -0,0 +1,102 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemmt.h,v 1.9 2004/06/17 15:53:12 opetzold Exp $
+ */
+
+#ifndef TVMET_META_GEMMT_H
+#define TVMET_META_GEMMT_H
+
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+namespace meta {
+
+
+/**
+ * \class gemmt Gemmt.h "tvmet/meta/Gemmt.h"
+ * \brief Meta class for product matrix-transpose(matrix) operations.
+ *        using formula
+ *        \f[
+ *        M_1\,M_2^{T}
+ *        \f]
+ * \note The rows of matrix 2 have to be equal to cols of matrix 1. The result
+ *       is a rows1 * cols2 matrix.
+ */
+template<std::size_t Rows1, std::size_t Cols1,
+	 std::size_t Cols2,
+	 std::size_t K>
+class gemmt
+{
+  gemmt();
+  gemmt(const gemmt&);
+  gemmt& operator=(const gemmt&);
+
+private:
+  enum {
+    doIt = (K != Cols2 - 1) 		/**< recursive counter */
+  };
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return lhs(i, K) * rhs(j, K)
+      + gemmt<Rows1 * doIt, Cols1 * doIt,
+              Cols2 * doIt,
+              (K+1) * doIt>::prod(lhs, rhs, i, j);
+  }
+};
+
+
+/**
+ * \class gemmt<0,0,0,0> Gemmt.h "tvmet/meta/Gemmt.h"
+ * \brief gemmt Specialized for recursion.
+ */
+template<>
+class gemmt<0,0,0,0>
+{
+  gemmt();
+  gemmt(const gemmt&);
+  gemmt& operator=(const gemmt&);
+
+public:
+  template<class E1, class E2>
+  static inline
+  XprNull prod(const E1&, const E2&, std::size_t, std::size_t) {
+    return XprNull();
+  }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_GEMMT_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemtm.h b/tvmet-1.7.1/include/tvmet/meta/Gemtm.h
new file mode 100644
index 0000000..ddd8e38
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Gemtm.h
@@ -0,0 +1,105 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemtm.h,v 1.8 2004/06/17 15:53:12 opetzold Exp $
+ */
+
+#ifndef TVMET_META_GEMTM_H
+#define TVMET_META_GEMTM_H
+
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+namespace meta {
+
+
+/**
+ * \class gemtm Gemtm.h "tvmet/meta/Gemtm.h"
+ * \brief Meta class for trans(matrix)-matrix operations, like product.
+ *        using formula
+ *        \f[
+ *        M_1^{T}\,M_2
+ *        \f]
+ * \note The number of cols of matrix 2 have to be equal to number of rows of
+ *       matrix 1, since matrix 1 is transposed - the result is a (Cols1 x Cols2)
+ *       matrix.
+ */
+
+template<std::size_t Rows1, std::size_t Cols1,
+	 std::size_t Cols2,
+	 std::size_t K>
+class gemtm
+{
+private:
+  gemtm();
+  gemtm(const gemtm&);
+  gemtm& operator=(const gemtm&);
+
+private:
+  enum {
+    doIt = (K != Rows1 - 1) 		/**< recursive counter */
+  };
+
+public:
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return lhs(K, i) * rhs(K, j)
+      + gemtm<Rows1 * doIt, Cols1 * doIt,
+              Cols2 * doIt,
+              (K+1) * doIt>::prod(lhs, rhs, i, j);
+  }
+};
+
+
+/**
+ * \class gemtm<0,0,0,0> Gemtm.h "tvmet/meta/Gemtm.h"
+ * \brief gemtm Specialized for recursion.
+ */
+template<>
+class gemtm<0,0,0,0>
+{
+  gemtm();
+  gemtm(const gemtm&);
+  gemtm& operator=(const gemtm&);
+
+public:
+  template<class E1, class E2>
+  static inline
+  XprNull prod(const E1&, const E2&, std::size_t, std::size_t) {
+    return XprNull();
+  }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_GEMTM_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemtv.h b/tvmet-1.7.1/include/tvmet/meta/Gemtv.h
new file mode 100644
index 0000000..dd46339
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Gemtv.h
@@ -0,0 +1,99 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemtv.h,v 1.4 2004/06/17 15:53:12 opetzold Exp $
+ */
+
+#ifndef TVMET_META_GEMTV_H
+#define TVMET_META_GEMTV_H
+
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+namespace meta {
+
+
+/**
+ * \class gemtv Gemtv.h "tvmet/meta/Gemtv.h"
+ * \brief Meta class for matrix-transpose-vector operations.
+ *        using formula
+ *        \f[
+ *        M^T\,v
+ *        \f]
+ */
+template<std::size_t Rows, std::size_t Cols,
+	 std::size_t I>
+class gemtv
+{
+  gemtv();
+  gemtv(const gemtv&);
+  gemtv& operator=(const gemtv&);
+
+private:
+  enum {
+    doIt = I < (Rows-1)  		/**< recursive counter */
+  };
+
+public:
+  /** Meta template for %Matrix lhs %Vector rhs product. */
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t j) {
+    return lhs(I, j) * rhs(I)
+      + gemtv<Rows * doIt, Cols * doIt,
+              (I+1)* doIt>::prod(lhs, rhs, j);
+  }
+};
+
+
+/**
+ * \class gemtv<0,0,0> Gemtv.h "tvmet/meta/Gemtv.h"
+ * \brief gemtv Specialized for recursion
+ */
+template<>
+class gemtv<0,0,0>
+{
+  gemtv();
+  gemtv(const gemtv&);
+  gemtv& operator=(const gemtv&);
+
+public:
+  template<class E1, class E2>
+  static inline
+  XprNull prod(const E1&, const E2&, std::size_t) {
+    return XprNull();
+  }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_GEMTV_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemv.h b/tvmet-1.7.1/include/tvmet/meta/Gemv.h
new file mode 100644
index 0000000..ae18cf1
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Gemv.h
@@ -0,0 +1,99 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Gemv.h,v 1.9 2004/06/17 15:53:12 opetzold Exp $
+ */
+
+#ifndef TVMET_META_GEMV_H
+#define TVMET_META_GEMV_H
+
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+namespace meta {
+
+
+/**
+ * \class gemv Gemv.h "tvmet/meta/Gemv.h"
+ * \brief Meta class for matrix-vector operations.
+ *        using formula
+ *        \f[
+ *        M\,v
+ *        \f]
+ */
+template<std::size_t Rows, std::size_t Cols,
+	 std::size_t J>
+class gemv
+{
+  gemv();
+  gemv(const gemv&);
+  gemv& operator=(const gemv&);
+
+private:
+  enum {
+    doIt = J < (Cols-1)  		/**< recursive counter */
+  };
+
+public:
+  /** Meta template for %Matrix lhs %Vector rhs product. */
+  template<class E1, class E2>
+  static inline
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type
+  prod(const E1& lhs, const E2& rhs, std::size_t i) {
+    return lhs(i, J) * rhs(J)
+      + gemv<Rows * doIt, Cols * doIt,
+             (J+1)* doIt>::prod(lhs, rhs, i);
+  }
+};
+
+
+/**
+ * \class gemv<0,0,0> Gemv.h "tvmet/meta/Gemv.h"
+ * \brief gemv Specialized for recursion
+ */
+template<>
+class gemv<0,0,0>
+{
+  gemv();
+  gemv(const gemv&);
+  gemv& operator=(const gemv&);
+
+public:
+  template<class E1, class E2>
+  static inline
+  XprNull prod(const E1&, const E2&, std::size_t) {
+    return XprNull();
+  }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_GEMV_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Makefile.am b/tvmet-1.7.1/include/tvmet/meta/Makefile.am
new file mode 100644
index 0000000..6d00b64
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Makefile.am
@@ -0,0 +1,12 @@
+# $Id: Makefile.am,v 1.7 2004/04/12 21:50:35 opetzold Exp $
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)/meta
+
+libtvmetinclude_HEADERS = \
+	Gemm.h \
+	Gemmt.h \
+	Gemtm.h \
+	Gemv.h \
+	Gemtv.h \
+	Matrix.h \
+	Vector.h
diff --git a/tvmet-1.7.1/include/tvmet/meta/Makefile.in b/tvmet-1.7.1/include/tvmet/meta/Makefile.in
new file mode 100644
index 0000000..1ac79ea
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Makefile.in
@@ -0,0 +1,417 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.7 2004/04/12 21:50:35 opetzold Exp $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/tvmet/meta
+DIST_COMMON = $(libtvmetinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(libtvmetincludedir)"
+libtvmetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtvmetinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+libtvmetincludedir = $(includedir)/$(PACKAGE)/meta
+libtvmetinclude_HEADERS = \
+	Gemm.h \
+	Gemmt.h \
+	Gemtm.h \
+	Gemv.h \
+	Gemtv.h \
+	Matrix.h \
+	Vector.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/tvmet/meta/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/tvmet/meta/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-libtvmetincludeHEADERS: $(libtvmetinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libtvmetincludedir)" || $(mkdir_p) "$(DESTDIR)$(libtvmetincludedir)"
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(libtvmetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  $(libtvmetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+uninstall-libtvmetincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libtvmetincludedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libtvmetincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libtvmetincludeHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool ctags distclean 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-exec install-exec-am install-info \
+	install-info-am install-libtvmetincludeHEADERS install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libtvmetincludeHEADERS
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Matrix.h b/tvmet-1.7.1/include/tvmet/meta/Matrix.h
new file mode 100644
index 0000000..c3ccd8e
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Matrix.h
@@ -0,0 +1,165 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Matrix.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_META_MATRIX_H
+#define TVMET_META_MATRIX_H
+
+#include <tvmet/NumericTraits.h>
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+namespace meta {
+
+
+/**
+ * \class Matrix Matrix.h "tvmet/meta/Matrix.h"
+ * \brief Meta %Matrix class using expression and meta templates.
+ */
+template<std::size_t Rows, std::size_t Cols,
+	 std::size_t M=0, std::size_t N=0>
+class Matrix
+{
+  Matrix();
+  Matrix(const Matrix&);
+  Matrix& operator=(const Matrix&);
+
+private:
+  enum {
+    doRows = (M < Rows - 1) ? 1 : 0,	/**< recursive counter Rows. */
+    doCols = (N < Cols - 1) ? 1 : 0	/**< recursive counter Cols. */
+  };
+
+public:
+  /** assign an expression on columns on given row using the functional assign_fn. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void assign2(Dest& lhs, const Src& rhs, const Assign& assign_fn) {
+    assign_fn.apply_on(lhs(M, N), rhs(M, N));
+    Matrix<Rows * doCols, Cols * doCols,
+           M * doCols, (N+1) * doCols>::assign2(lhs, rhs, assign_fn);
+  }
+
+  /** assign an expression on row-wise using the functional assign_fn. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void assign(Dest& lhs, const Src& rhs, const Assign& assign_fn) {
+    Matrix<Rows, Cols,
+           M, 0>::assign2(lhs, rhs, assign_fn);
+    Matrix<Rows * doRows, Cols * doRows,
+          (M+1) * doRows, 0>::assign(lhs, rhs, assign_fn);
+  }
+
+  /** evaluate a given matrix expression, column wise. */
+  template<class E>
+  static inline
+  bool all_elements2(const E& e) {
+    if(!e(M, N)) return false;
+    return Matrix<Rows * doCols, Cols * doCols,
+                  M * doCols, (N+1) * doCols>::all_elements2(e);
+  }
+
+  /** evaluate a given matrix expression, row wise. */
+  template<class E>
+  static inline
+  bool all_elements(const E& e) {
+    if(!Matrix<Rows, Cols, M, 0>::all_elements2(e) ) return false;
+    return Matrix<Rows * doRows, Cols * doRows,
+                 (M+1) * doRows, 0>::all_elements(e);
+  }
+
+  /** evaluate a given matrix expression, column wise. */
+  template<class E>
+  static inline
+  bool any_elements2(const E& e) {
+    if(e(M, N)) return true;
+    return Matrix<Rows * doCols, Cols * doCols,
+                  M * doCols, (N+1) * doCols>::any_elements2(e);
+  }
+
+  /** evaluate a given matrix expression, row wise. */
+  template<class E>
+  static inline
+  bool any_elements(const E& e) {
+    if(Matrix<Rows, Cols, M, 0>::any_elements2(e) ) return true;
+    return Matrix<Rows * doRows, Cols * doRows,
+                 (M+1) * doRows, 0>::any_elements(e);
+  }
+
+  /** trace a given matrix expression. */
+  template<class E>
+  static inline
+  typename E::value_type
+  trace(const E& e) {
+    return e(M, N)
+      + Matrix<Rows * doCols, Cols * doCols,
+              (M+1) * doCols, (N+1) * doCols>::trace(e);
+  }
+
+};
+
+
+/**
+ * \class Matrix<0, 0, 0, 0> Matrix.h "tvmet/meta/Matrix.h"
+ * \brief Meta %Matrix specialized for recursion.
+ */
+template<>
+class Matrix<0, 0, 0, 0>
+{
+  Matrix();
+  Matrix(const Matrix&);
+  Matrix& operator=(const Matrix&);
+
+public:
+  template<class Dest, class Src, class Assign>
+  static inline void assign2(Dest&, const Src&, const Assign&) { }
+
+  template<class Dest, class Src, class Assign>
+  static inline void assign(Dest&, const Src&, const Assign&) { }
+
+  template<class E>
+  static inline bool all_elements2(const E&) { return true; }
+
+  template<class E>
+  static inline bool all_elements(const E&) { return true; }
+
+  template<class E>
+  static inline bool any_elements2(const E&) { return false; }
+
+  template<class E>
+  static inline bool any_elements(const E&) { return false; }
+
+  template<class E>
+  static inline XprNull trace(const E&) { return XprNull(); }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_MATRIX_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/meta/Vector.h b/tvmet-1.7.1/include/tvmet/meta/Vector.h
new file mode 100644
index 0000000..c1189a4
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/meta/Vector.h
@@ -0,0 +1,154 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Vector.h,v 1.20 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_META_VECTOR_H
+#define TVMET_META_VECTOR_H
+
+#include <tvmet/NumericTraits.h>
+#include <tvmet/xpr/Null.h>
+
+namespace tvmet {
+
+/* forwards */
+template<class T, std::size_t Sz> class Vector;
+
+
+namespace meta {
+
+
+/**
+ * \class Vector Vector.h "tvmet/meta/Vector.h"
+ * \brief Meta %Vector class using expression templates
+ */
+template<std::size_t Sz, std::size_t K=0>
+class Vector
+{
+  Vector();
+  Vector(const Vector&);
+  Vector& operator=(const Vector&);
+
+private:
+  enum {
+    doIt = (K < (Sz-1)) ? 1 : 0		/**< recursive counter */
+  };
+
+public:
+  /** assign an expression expr using the functional assign_fn. */
+  template <class Dest, class Src, class Assign>
+  static inline
+  void assign(Dest& lhs, const Src& rhs, const Assign& assign_fn) {
+    assign_fn.apply_on(lhs(K), rhs(K));
+    meta::Vector<Sz * doIt, (K+1) * doIt>::assign(lhs, rhs, assign_fn);
+  }
+
+  /** build the sum of the vector. */
+  template<class E>
+  static inline
+  typename E::value_type
+  sum(const E& e) {
+    return e(K) + meta::Vector<Sz * doIt, (K+1) * doIt>::sum(e);
+  }
+
+  /** build the product of the vector. */
+  template<class E>
+  static inline
+  typename NumericTraits<
+    typename E::value_type
+  >::sum_type
+  product(const E& e) {
+    return e(K) * meta::Vector<Sz * doIt, (K+1) * doIt>::product(e);
+  }
+
+  /** build the dot product of the vector. */
+  template<class Dest, class Src>
+  static inline
+  typename PromoteTraits<
+    typename Dest::value_type,
+    typename Src::value_type
+  >::value_type
+  dot(const Dest& lhs, const Src& rhs) {
+    return lhs(K) * rhs(K)
+      + meta::Vector<Sz * doIt, (K+1) * doIt>::dot(lhs, rhs);
+  }
+
+  /** check for all elements */
+  template<class E>
+  static inline
+  bool
+  all_elements(const E& e) {
+    if(!e(K)) return false;
+    return meta::Vector<Sz * doIt, (K+1) * doIt>::all_elements(e);
+  }
+
+  /** check for any elements */
+  template<class E>
+  static inline
+  bool
+  any_elements(const E& e) {
+    if(e(K)) return true;
+    return meta::Vector<Sz * doIt, (K+1) * doIt>::any_elements(e);
+  }
+};
+
+
+/**
+ * \class Vector<0,0> Vector.h "tvmet/meta/Vector.h"
+ * \brief Meta %Vector Specialized for recursion
+ */
+template<>
+class Vector<0,0>
+{
+  Vector();
+  Vector(const Vector&);
+  Vector& operator=(const Vector&);
+
+public:
+  template <class Dest, class Src, class Assign>
+  static inline void assign(Dest&, const Src&, const Assign&) { }
+
+  template<class E>
+  static inline XprNull sum(const E&) { return XprNull(); }
+
+  template<class E>
+  static inline XprNull product(const E&) { return XprNull(); }
+
+  template<class Dest, class Src>
+  static inline XprNull dot(const Dest&, const Src&) { return XprNull(); }
+
+  template<class E>
+  static inline bool all_elements(const E&) { return true; }
+
+  template<class E>
+  static inline bool any_elements(const E&) { return false; }
+};
+
+
+} // namespace meta
+
+} // namespace tvmet
+
+#endif /* TVMET_META_VECTOR_H */
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/tvmet.h b/tvmet-1.7.1/include/tvmet/tvmet.h
new file mode 100644
index 0000000..7e66fef
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/tvmet.h
@@ -0,0 +1,238 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: tvmet.h,v 1.17 2004/11/04 16:28:32 opetzold Exp $
+ */
+
+#ifndef TVMET_H
+#define TVMET_H
+
+#include <tvmet/config.h>
+
+
+/***********************************************************************
+ * Compiler specifics
+ ***********************************************************************/
+#if defined(__GNUC__)
+#  include <tvmet/config/config-gcc.h>
+#endif
+
+#if defined(__ICC)
+#  include <tvmet/config/config-icc.h>
+#endif
+
+#if defined(__KCC)
+#  include <tvmet/config/config-kcc.h>
+#endif
+
+#if defined(__PGI)
+#  include <tvmet/config/config-pgi.h>
+#endif
+
+// vc7.1: 1310 and vc7.0 1300
+#if defined(_MSC_VER) && (_MSC_VER >= 1310)
+#  include <tvmet/config/config-vc71.h>
+#endif
+
+
+// give up for these cases
+#if !defined(TVMET_HAVE_MUTABLE)
+#  error "Your compiler doesn't support the mutable keyword! Giving up."
+#endif
+
+#if !defined(TVMET_HAVE_TYPENAME)
+#  error "Your compiler doesn't support the typename keyword! Giving up."
+#endif
+
+#if !defined(TVMET_HAVE_NAMESPACES)
+#  error "Your compiler doesn't support the namespace concept! Giving up."
+#endif
+
+#if !defined(TVMET_HAVE_PARTIAL_SPECIALIZATION)
+#  error "Your compiler doesn't support partial specialization! Giving up."
+#endif
+
+
+/*
+ * other compiler specific stuff
+ */
+
+/**
+ * \def TVMET_CXX_ALWAYS_INLINE
+ * \brief Compiler specific stuff to force inline code if supported.
+ *
+ * Mainly, this declares the functions using g++'s
+ * __attribute__((always_inline)). This features is enabled
+ * on defined TVMET_OPTIMIZE.
+ */
+#if !defined(TVMET_CXX_ALWAYS_INLINE)
+#define TVMET_CXX_ALWAYS_INLINE
+#endif
+
+
+/*
+ * Complexity triggers, compiler and architecture specific.
+ * If not defined, use defaults.
+ */
+
+/**
+ * \def TVMET_COMPLEXITY_DEFAULT_TRIGGER
+ * \brief Trigger for changing the matrix-product strategy.
+ */
+#if !defined(TVMET_COMPLEXITY_DEFAULT_TRIGGER)
+#  define TVMET_COMPLEXITY_DEFAULT_TRIGGER	1000
+#endif
+
+/**
+ * \def TVMET_COMPLEXITY_M_ASSIGN_TRIGGER
+ * \brief Trigger for changing the matrix assign strategy.
+ */
+#if !defined(TVMET_COMPLEXITY_M_ASSIGN_TRIGGER)
+#  define TVMET_COMPLEXITY_M_ASSIGN_TRIGGER	8*8
+#endif
+
+/**
+ * \def TVMET_COMPLEXITY_MM_TRIGGER
+ * \brief Trigger for changing the matrix-matrix-product strategy.
+ * One strategy to build the matrix-matrix-product is to use
+ * meta templates. The other to use looping.
+ */
+#if !defined(TVMET_COMPLEXITY_MM_TRIGGER)
+#  define TVMET_COMPLEXITY_MM_TRIGGER		8*8
+#endif
+
+/**
+ * \def TVMET_COMPLEXITY_V_ASSIGN_TRIGGER
+ * \brief Trigger for changing the vector assign strategy.
+ */
+#if !defined(TVMET_COMPLEXITY_V_ASSIGN_TRIGGER)
+#  define TVMET_COMPLEXITY_V_ASSIGN_TRIGGER	8
+#endif
+
+/**
+ * \def TVMET_COMPLEXITY_MV_TRIGGER
+ * \brief Trigger for changing the matrix-vector strategy.
+ * One strategy to build the matrix-vector-product is to use
+ * meta templates. The other to use looping.
+ */
+#if !defined(TVMET_COMPLEXITY_MV_TRIGGER)
+#  define TVMET_COMPLEXITY_MV_TRIGGER		8*8
+#endif
+
+
+/***********************************************************************
+ * other specials
+ ***********************************************************************/
+#if defined(TVMET_HAVE_IEEE_MATH)
+#  define _ALL_SOURCE
+#  if !defined(_XOPEN_SOURCE)
+#    define _XOPEN_SOURCE
+#  endif
+#  if !defined(_XOPEN_SOURCE_EXTENDED)
+#    define _XOPEN_SOURCE_EXTENDED
+#  endif
+#endif
+
+
+/**
+ * \def TVMET_DEBUG
+ * This is defined if <code>DEBUG</code> is defined. This enables runtime error
+ * bounds checking. If you compile %tvmet from another source directory
+ * which defines <code>DEBUG</code>, then <code>TVMET_DEBUG</code> will be
+ * <b>not</b> defined (This behavior differs from release less than 0.6.0).
+ */
+
+
+/**
+ * \def TVMET_OPTIMIZE
+ * If this is defined tvmet uses some compiler specific keywords.
+ *  Mainly, this declares the functions using gcc's
+ * <tt>__attribute__((always_inline))</tt>. This allows the
+ * compiler to produce high efficient code even on less
+ * optimization levels, like gcc's -O2 or even -O!
+ * This is known to work with gcc v3.3.3 (and higher).
+ * Using icc's v8 gnuc compatibility mode this may work, I've read
+ * that it's using as an hint, this means you can have static inline
+ * functions inside left.
+ */
+#if !defined(TVMET_OPTIMIZE)
+#  undef  TVMET_CXX_ALWAYS_INLINE
+#  define TVMET_CXX_ALWAYS_INLINE
+#endif
+
+
+/***********************************************************************
+ * Namespaces
+ ***********************************************************************/
+
+
+/**
+ * \namespace std
+ * \brief Imported ISO/IEC 14882:1998 functions from std namespace.
+ */
+
+/**
+ * \namespace tvmet
+ * \brief The namespace for the Tiny %Vector %Matrix using Expression Templates Libary.
+ */
+
+/**
+ * \namespace tvmet::meta
+ * \brief Meta stuff inside here.
+ */
+
+/**
+ * \namespace tvmet::loop
+ * \brief Loop stuff inside here.
+ */
+
+/**
+ * \namespace tvmet::element_wise
+ * \brief Operators inside this namespace does elementwise operations.
+ */
+
+/**
+ * \namespace tvmet::util
+ * \brief Miscellaneous utility functions used.
+ */
+
+
+/***********************************************************************
+ * forwards
+ ***********************************************************************/
+#if defined(TVMET_HAVE_COMPLEX)
+namespace std {
+  template<class T> class complex;
+}
+#endif
+
+
+/***********************************************************************
+ * other stuff
+ ***********************************************************************/
+#include <tvmet/TvmetBase.h>
+
+
+#endif // TVMET_H
+
+// Local Variables:
+// mode:C++
+// End:
+// LocalWords:  gnuc gcc's icc's std
diff --git a/tvmet-1.7.1/include/tvmet/util/General.h b/tvmet-1.7.1/include/tvmet/util/General.h
new file mode 100644
index 0000000..29454a0
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/util/General.h
@@ -0,0 +1,125 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: General.h,v 1.9 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_UTIL_GENERAL_H
+#define TVMET_UTIL_GENERAL_H
+
+
+/** forward */
+namespace tvmet {
+template<class T, std::size_t Rows, std::size_t Cols> class Matrix;
+template<class T, std::size_t Sz> class Vector;
+}
+
+namespace tvmet {
+
+namespace util {
+
+/*
+ * \defgroup _util_function
+ * \brief Usefull utility functions
+ */
+
+/**
+ * \fn Gemm(const Matrix<T, Rows, Cols>& m1, const Matrix<T, Rows, Cols>& m2, Matrix<T, Rows, Cols>& m3)
+ * \brief General matrix matrix multiplication using loops.
+ * \ingroup _util_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+void
+Gemm(const Matrix<T, Rows, Cols>& m1, const Matrix<T, Rows, Cols>& m2,
+     Matrix<T, Rows, Cols>& m3)
+{
+  for (std::size_t i = 0; i < Rows; ++i) {
+    for (std::size_t j = 0; j < Cols; ++j) {
+      T sum(0);
+      for (std::size_t k = 0; k < Cols; ++k) {
+	sum += m1(i,k) * m2(k,j);
+      }
+      m3(i,j) = sum;
+    }
+  }
+}
+
+
+/**
+ * \fn Gemv(const Matrix<T, Rows, Cols>& m, const Vector<T, Cols>& v, Vector<T, Cols>& v2)
+ * \brief General matrix vector multiplication using loops.
+ * \ingroup _util_function
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+inline
+void
+Gemv(const Matrix<T, Rows, Cols>& m, const Vector<T, Cols>& v,
+     Vector<T, Cols>& v2)
+{
+  for (std::size_t i = 0; i < Rows; ++i){
+    v2(i) = T(0);	// clean up before use
+    for (std::size_t j = 0; j < Cols; ++j) {
+      v2(i) += m(i,j) * v(j);
+      }
+  }
+}
+
+
+/**
+ * \fn Gevvmul(const Vector<T, Sz>& v1, const Vector<T, Sz>& v2, Vector<T, Sz>& v3)
+ * \brief General vector vector elementwise multiplication using loop.
+ * \ingroup _util_function
+ */
+template<class T, std::size_t Sz>
+inline
+void
+Gevvmul(const Vector<T, Sz>& v1, const Vector<T, Sz>& v2,
+       Vector<T, Sz>& v3)
+{
+  for(std::size_t i = 0; i < Sz; ++i)
+    v3(i) = v1(i) * v2(i);
+}
+
+
+/**
+ * \fn Gevvadd(const Vector<T, Sz>& v1, const Vector<T, Sz>& v2, Vector<T, Sz>& v3)
+ * \brief General vector vector elementwise multiplication using loop.
+ * \ingroup _util_function
+ */
+template<class T, std::size_t Sz>
+inline
+void
+Gevvadd(const Vector<T, Sz>& v1, const Vector<T, Sz>& v2,
+	Vector<T, Sz>& v3)
+{
+  for(std::size_t i = 0; i < Sz; ++i)
+    v3(i) = v1(i) + v2(i);
+}
+
+} // namespace util
+
+} // namespace tvmet
+
+#endif // TVMET_UTIL_GENERAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/util/Incrementor.h b/tvmet-1.7.1/include/tvmet/util/Incrementor.h
new file mode 100644
index 0000000..2fbe1a6
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/util/Incrementor.h
@@ -0,0 +1,90 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Incrementor.h,v 1.3 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_UTIL_INCREMENTOR_H
+#define TVMET_UTIL_INCREMENTOR_H
+
+namespace tvmet {
+
+namespace util {
+
+
+/**
+ * \class Incrementor Incrementor.h "tvmet/util/Incrementor.h"
+ * \brief A simple incrementor class.
+ * The start value is given at construction time. After
+ * each access the class increments the internal counter.
+ * \ingroup _util_function
+ *
+ * \par Example:
+ * \code
+ * #include <algorithm>
+ *
+ * using namespace tvmet;
+ *
+ * ...
+ *
+ * std::generate(m1.begin(), m1.end(),
+ * util::Incrementor<typename matrix_type::value_type>());
+ * \endcode
+ */
+template<class T>
+struct Incrementor
+{
+  Incrementor(T start=0) : m_inc(start) { }
+  T operator()() { m_inc+=1; return m_inc; }
+
+private:
+  T 							m_inc;
+};
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/**
+ * \class Incrementor< std::complex<T> > Incrementor.h "tvmet/util/Incrementor.h"
+ * \brief Specialized Incrementor class.
+ * \ingroup _util_function
+ */
+template<class T>
+struct Incrementor< std::complex<T> > {
+  Incrementor(const std::complex<T>& start=0)
+    : m_inc(start) { }
+  std::complex<T> operator()() {
+    m_inc += std::complex<T>(1,1);
+    return m_inc;
+  }
+private:
+  std::complex<T>       				m_inc;
+};
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace util
+
+} // namespace tvmet
+
+#endif // TVMET_UTIL_INCREMENTOR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/util/Makefile.am b/tvmet-1.7.1/include/tvmet/util/Makefile.am
new file mode 100644
index 0000000..340db3d
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/util/Makefile.am
@@ -0,0 +1,9 @@
+# $Id: Makefile.am,v 1.5 2004/04/12 21:50:35 opetzold Exp $
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)/util
+
+libtvmetinclude_HEADERS = \
+	General.h \
+	Incrementor.h \
+	Random.h \
+	Timer.h
diff --git a/tvmet-1.7.1/include/tvmet/util/Makefile.in b/tvmet-1.7.1/include/tvmet/util/Makefile.in
new file mode 100644
index 0000000..f97636f
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/util/Makefile.in
@@ -0,0 +1,414 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.5 2004/04/12 21:50:35 opetzold Exp $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/tvmet/util
+DIST_COMMON = $(libtvmetinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(libtvmetincludedir)"
+libtvmetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtvmetinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+libtvmetincludedir = $(includedir)/$(PACKAGE)/util
+libtvmetinclude_HEADERS = \
+	General.h \
+	Incrementor.h \
+	Random.h \
+	Timer.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/tvmet/util/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/tvmet/util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-libtvmetincludeHEADERS: $(libtvmetinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libtvmetincludedir)" || $(mkdir_p) "$(DESTDIR)$(libtvmetincludedir)"
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(libtvmetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  $(libtvmetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+uninstall-libtvmetincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libtvmetincludedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libtvmetincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libtvmetincludeHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool ctags distclean 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-exec install-exec-am install-info \
+	install-info-am install-libtvmetincludeHEADERS install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libtvmetincludeHEADERS
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/util/Random.h b/tvmet-1.7.1/include/tvmet/util/Random.h
new file mode 100644
index 0000000..29a5dbe
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/util/Random.h
@@ -0,0 +1,100 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Random.h,v 1.3 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_UTIL_RANDOM_H
+#define TVMET_UTIL_RANDOM_H
+
+#include <tvmet/CompileTimeError.h>
+
+namespace tvmet {
+
+namespace util {
+
+
+/**
+ * \class Random Random.h "tvmet/util/Random.h"
+ * \brief A simple random class.
+ * On each access this class returns a new random number using
+ * std::rand(). The range generated is templated by MIN and
+ * MAX.
+ * \ingroup _util_function
+ *
+ * \par Example:
+ * \code
+ * #include <algorithm>
+ *
+ * tvmet::Random<int, 0, 100>				random;
+ *
+ * std::generate(m1.begin(), m1.end(), random());
+ * \endcode
+ */
+template<class T, int MIN=0, int MAX=100>
+class Random {
+  static unsigned int				s_seed;
+public:
+  typedef T					value_type;
+  Random() { TVMET_CT_CONDITION(MIN<MAX, wrong_random_range) }
+  value_type operator()() {
+    s_seed += (unsigned)std::time(0);
+    std::srand(s_seed);
+    return MIN + int(double(MAX) * std::rand()/(double(RAND_MAX)+1.0));
+  }
+};
+// instance
+template<class T, int MIN, int MAX>
+unsigned int Random<T, MIN, MAX>::s_seed;
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/**
+ * \class Random< std::complex<T> > Random.h "tvmet/util/Random.h"
+ * \brief Specialized Random class.
+ * \ingroup _util_function
+ */
+template<class T, int MIN=0, int MAX=100>
+class Random {
+  static unsigned int				s_seed;
+public:
+  typedef std::complex<T>			value_type;
+  Random() { TVMET_CT_CONDITION(MIN<MAX, wrong_random_range) }
+  value_type operator()() {
+    s_seed += (unsigned)std::time(0);
+    std::srand(s_seed);
+    return MIN + int(double(MAX) * std::rand()/(double(RAND_MAX)+1.0));
+  }
+};
+// instance
+template<class T, int MIN, int MAX>
+unsigned int Random<std::complex<T>, MIN, MAX>::s_seed;
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace util
+
+} // namespace tvmet
+
+#endif // TVMET_UTIL_RANDOM_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/util/Timer.h b/tvmet-1.7.1/include/tvmet/util/Timer.h
new file mode 100644
index 0000000..5868a00
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/util/Timer.h
@@ -0,0 +1,97 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Timer.h,v 1.5 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_UTIL_TIMER_H
+#define TVMET_UTIL_TIMER_H
+
+#if defined(TVMET_HAVE_SYS_TIME_H) && defined(TVMET_HAVE_UNISTD_H)
+#  include <sys/time.h>
+#  include <sys/resource.h>
+#  include <unistd.h>
+#else
+#  include <ctime>
+#endif
+
+namespace tvmet {
+
+namespace util {
+
+/**
+   \class Timer Timer.h "tvmet/util/Timer.h"
+   \brief A quick& dirty portable timer, measures elapsed time.
+
+   It is recommended that implementations measure wall clock rather than CPU
+   time since the intended use is performance measurement on systems where
+   total elapsed time is more important than just process or CPU time.
+
+   The accuracy of timings depends on the accuracy of timing information
+   provided by the underlying platform, and this varies from platform to
+   platform.
+*/
+
+class Timer
+{
+  Timer(const Timer&);
+  Timer& operator=(const Timer&);
+
+public: // types
+  typedef double					time_t;
+
+public:
+  /** starts the timer immediatly. */
+  Timer() { m_start_time = getTime(); }
+
+  /** restarts the timer */
+  void restart() { m_start_time = getTime(); }
+
+  /** return elapsed time in seconds */
+  time_t elapsed() const { return (getTime() - m_start_time); }
+
+private:
+  time_t getTime() const {
+#if defined(TVMET_HAVE_SYS_TIME_H) && defined(TVMET_HAVE_UNISTD_H)
+    getrusage(RUSAGE_SELF, &m_rusage);
+    time_t sec = m_rusage.ru_utime.tv_sec; // user, no system time
+    time_t usec  = m_rusage.ru_utime.tv_usec; // user, no system time
+    return sec + usec/1e6;
+#else
+    return static_cast<time_t>(std::clock()) / static_cast<time_t>(CLOCKS_PER_SEC);
+#endif
+  }
+
+private:
+#if defined(TVMET_HAVE_SYS_TIME_H) && defined(TVMET_HAVE_UNISTD_H)
+  mutable struct rusage 				m_rusage;
+#endif
+  time_t 						m_start_time;
+};
+
+} // namespace util
+
+} // namespace tvmet
+
+#endif // TVMET_UTIL_TIMER_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/BinOperator.h b/tvmet-1.7.1/include/tvmet/xpr/BinOperator.h
new file mode 100644
index 0000000..8efca32
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/BinOperator.h
@@ -0,0 +1,104 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: BinOperator.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_BINOPERATOR_H
+#define TVMET_XPR_BINOPERATOR_H
+
+#include <tvmet/TypePromotion.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprBinOp BinOperator.h "tvmet/xpr/BinOperator.h"
+ * \brief Binary operators working on two sub expressions.
+ *
+ * On acessing using the index operator() the binary operation will be
+ * evaluated at compile time.
+ */
+template<class BinOp, class E1, class E2>
+class XprBinOp
+  : public TvmetBase< XprBinOp<BinOp, E1, E2> >
+{
+  XprBinOp();
+  XprBinOp& operator=(const XprBinOp&);
+
+public:
+  typedef typename BinOp::value_type			value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    ops       = 2 * (ops_lhs + ops_rhs) // lhs op rhs
+  };
+
+public:
+  /** Constructor for two expressions. */
+  explicit XprBinOp(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprBinOp(const XprBinOp& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs)
+  { }
+#endif
+
+  /** Index operator, evaluates the expression inside. */
+  value_type operator()(std::size_t i) const {
+    return BinOp::apply_on(m_lhs(i), m_rhs(i));
+  }
+
+  /** Index operator for arrays/matrices */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    return BinOp::apply_on(m_lhs(i, j), m_rhs(i, j));
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprBinOp[O="<< ops << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    BinOp::print_xpr(os, l);
+    m_lhs.print_xpr(os, l);
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1						m_lhs;
+  const E2						m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_BINOPERATOR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Eval.h b/tvmet-1.7.1/include/tvmet/xpr/Eval.h
new file mode 100644
index 0000000..edd68f3
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Eval.h
@@ -0,0 +1,115 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Eval.h,v 1.9 2003/11/30 18:35:17 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_EVAL_H
+#define TVMET_XPR_EVAL_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprEval Eval.h "tvmet/xpr/Eval.h"
+ * \brief evaluate the expression
+ *
+ * Since we can't overwrite the ? operator we have to write a wrapper
+ * for expression like return v1>v2 ? true : false
+ */
+template<class E1, class E2, class E3>
+class XprEval
+  : public TvmetBase< XprEval<E1, E2, E3> >
+{
+public:
+  typedef E1 						expr1_type;
+  typedef E2 						expr2_type;
+  typedef E3 						expr3_type;
+
+  typedef typename expr2_type::value_type 		value2_type;
+  typedef typename expr3_type::value_type 		value3_type;
+
+  typedef typename
+  PromoteTraits<value2_type, value3_type>::value_type 	value_type;
+
+public:
+  /** Complexity Counter */
+  enum {
+    ops_expr1 = E1::ops,
+    ops_expr2 = E2::ops,
+    ops_expr3 = E3::ops,
+    ops = ops_expr1	// only (e1 op e2) are evaluated
+  };
+
+private:
+  XprEval();
+  XprEval& operator=(const XprEval<expr1_type, expr2_type, expr3_type>&);
+
+public:
+  /** Constructor */
+  explicit XprEval(const expr1_type& e1, const expr2_type& e2, const expr3_type& e3)
+    : m_expr1(e1), m_expr2(e2), m_expr3(e3)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprEval(const XprEval& rhs)
+    : m_expr1(rhs.m_expr1), m_expr2(rhs.m_expr2), m_expr3(rhs.m_expr3)
+  { }
+#endif
+
+public: //access
+  /** index operator for vectors. */
+  value_type operator()(std::size_t i) const {
+    return m_expr1(i) ? m_expr2(i) : m_expr3(i);
+  }
+
+  /** index operator for matrizes. */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    return m_expr1(i, j) ? m_expr2(i, j) : m_expr3(i, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprEval[" << ops << ", ("
+       << ops_expr1 << ", " << ops_expr2 << ", " << ops_expr3 << ")]<"
+       << std::endl;
+    m_expr1.print_xpr(os, l);
+    m_expr2.print_xpr(os, l);
+    m_expr3.print_xpr(os, l);
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const expr1_type					m_expr1;
+  const expr2_type					m_expr2;
+  const expr3_type					m_expr3;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_EVAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Identity.h b/tvmet-1.7.1/include/tvmet/xpr/Identity.h
new file mode 100644
index 0000000..3e7113f
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Identity.h
@@ -0,0 +1,67 @@
+/*
+ * $Id: Identity.h,v 1.3 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_IDENTITY_H
+#define TVMET_XPR_IDENTITY_H
+
+
+namespace tvmet {
+
+
+/**
+ * \class XprIdentity Identity.h "tvmet/xpr/Identity.h"
+ * \brief Expression for the identity matrix.
+ *
+ * This expression doesn't hold any other expression, it
+ * simply returns 1 or 0 depends where the row and column
+ * element excess is done.
+ *
+ * \since release 1.6.0
+ * \sa identity
+ */
+template<class T, std::size_t Rows, std::size_t Cols>
+struct XprIdentity
+  : public TvmetBase< XprIdentity<T, Rows, Cols> >
+{
+  XprIdentity& operator=(const XprIdentity&);
+
+public:
+  typedef T				value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_assign = Rows * Cols,
+    ops        = ops_assign
+  };
+
+public:
+  /** access by index. */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    return i==j ? 1 : 0;
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprIdentity[O="<< ops << ")]<"
+       << std::endl;
+    os << IndentLevel(l)
+       << typeid(T).name() << ","
+       << "R=" << Rows << ", C=" << Cols << std::endl;
+    os << IndentLevel(--l) << ">"
+       << ((l != 0) ? "," : "") << std::endl;
+  }
+};
+
+
+} // namespace tvmet
+
+
+#endif // TVMET_XPR_IDENTITY_H
+
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Literal.h b/tvmet-1.7.1/include/tvmet/xpr/Literal.h
new file mode 100644
index 0000000..f88f0ac
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Literal.h
@@ -0,0 +1,89 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Literal.h,v 1.9 2003/11/30 18:35:17 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_LITERAL_H
+#define TVMET_XPR_LITERAL_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprLiteral Literal.h "tvmet/xpr/Literal.h"
+ * \brief Specify literals like scalars into the expression.
+ *        This expression is used for vectors and matrices - the
+ *        decision is done by the access operator.
+ */
+template<class T>
+class XprLiteral
+  : public TvmetBase< XprLiteral<T> >
+{
+  XprLiteral();
+  XprLiteral& operator=(const XprLiteral&);
+
+public:
+  typedef T						value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops       = 1
+  };
+
+public:
+  /** Constructor by value for literals . */
+  explicit XprLiteral(value_type value)
+    : m_data(value)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprLiteral(const XprLiteral& e)
+    : m_data(e.m_data)
+  { }
+#endif
+
+  /** Index operator, gives the value for vectors. */
+  value_type operator()(std::size_t) const { return m_data; }
+
+  /** Index operator for arrays/matrices. */
+  value_type operator()(std::size_t, std::size_t) const { return m_data; }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++) << "XprLiteral[O=" << ops << "]<T="
+       << typeid(value_type).name()
+       << ">," << std::endl;
+  }
+
+private:
+  const value_type 					m_data;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_LITERAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MMProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MMProduct.h
new file mode 100644
index 0000000..d11c4dc
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MMProduct.h
@@ -0,0 +1,134 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MMProduct.h,v 1.20 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MMPRODUCT_H
+#define TVMET_XPR_MMPRODUCT_H
+
+#include <tvmet/meta/Gemm.h>
+#include <tvmet/loop/Gemm.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprMMProduct MMProduct.h "tvmet/xpr/MMProduct.h"
+ * \brief Expression for matrix-matrix product.
+ *        Using formula:
+ *        \f[
+ *        M_1\,M_2
+ *        \f]
+ * \note The Rows2 has to be  equal to Cols1.
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+class XprMMProduct
+  : public TvmetBase< XprMMProduct<E1, Rows1, Cols1, E2, Cols2> >
+{
+private:
+  XprMMProduct();
+  XprMMProduct& operator=(const XprMMProduct&);
+
+public:
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type							value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    M         = Rows1 * Cols1 * Cols2,
+    N         = Rows1 * (Cols1 - 1) * Cols2,
+    ops_plus  = M * NumericTraits<value_type>::ops_plus,
+    ops_muls  = N * NumericTraits<value_type>::ops_muls,
+    ops       = ops_plus + ops_muls,
+    use_meta  = Rows1*Cols2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMMProduct(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMMProduct(const XprMMProduct& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs)
+  { }
+#endif
+
+private:
+  /** Wrapper for meta gemm. */
+  static inline
+  value_type do_gemm(dispatch<true>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return meta::gemm<Rows1, Cols1,
+                      Cols2,
+                      0>::prod(lhs, rhs, i, j);
+  }
+
+  /** Wrapper for loop gemm. */
+  static inline
+  value_type do_gemm(dispatch<false>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return loop::gemm<Rows1, Cols1, Cols2>::prod(lhs, rhs, i, j);
+  }
+
+public:
+  /** index operator for arrays/matrices */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Rows1) && (j < Cols2), "XprMMProduct Bounce Violation")
+    return do_gemm(dispatch<use_meta>(), m_lhs, m_rhs, i, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMMProduct["
+       << (use_meta ? "M" :  "L") << ", O=" << ops
+       << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    m_lhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n";
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "C2=" << Cols2 << ",\n";
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1		 				m_lhs;
+  const E2		 				m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MMPRODUCT_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h b/tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h
new file mode 100644
index 0000000..fcd8644
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h
@@ -0,0 +1,136 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MMProductTransposed.h,v 1.16 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MMPRODUCT_TRANSPOSED_H
+#define TVMET_XPR_MMPRODUCT_TRANSPOSED_H
+
+#include <tvmet/meta/Gemm.h>
+#include <tvmet/loop/Gemm.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprMMProductTransposed MMProductTransposed.h "tvmet/xpr/MMProductTransposed.h"
+ * \brief Expression for transpose(matrix-matrix product).
+ *        Using formula:
+ *        \f[
+ *        (M_1\,M_2)^T
+ *        \f]
+ * \note The Rows2 has to be  equal to Cols1.
+ *       The result is a (Cols2 x Rows1) matrix.
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+class XprMMProductTransposed
+  : public TvmetBase< XprMMProductTransposed<E1, Rows1, Cols1, E2, Cols2> >
+{
+private:
+  XprMMProductTransposed();
+  XprMMProductTransposed& operator=(const XprMMProductTransposed&);
+
+public:
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type							value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    M = Rows1 * Cols1 * Cols2,
+    N = Rows1 * (Cols1-1) * Cols2,
+    ops_plus  = M * NumericTraits<value_type>::ops_plus,
+    ops_muls  = N * NumericTraits<value_type>::ops_muls,
+    ops       = ops_plus + ops_muls,
+    use_meta  = Cols2*Rows1 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMMProductTransposed(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs) { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMMProductTransposed(const XprMMProductTransposed& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs)
+  { }
+#endif
+
+private:
+  /** Wrapper for meta gemm. */
+  static inline
+  value_type do_gemm(dispatch<true>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return meta::gemm<Rows1, Cols1,
+                      Cols2,
+                      0>::prod(lhs, rhs, i, j);
+  }
+
+  /** Wrapper for loop gemm. */
+  static inline
+  value_type do_gemm(dispatch<false>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return loop::gemm<Rows1, Cols1, Cols2>::prod(lhs, rhs, i, j);
+  }
+
+public:
+  /** index operator for arrays/matrices */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Cols2) && (j < Rows1), "XprMMProductTransposed Bounce Violation")
+    return do_gemm(dispatch<use_meta>(), m_lhs, m_rhs, j, i);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMMProductTransposed["
+       << (use_meta ? "M" :  "L") << ", O=" << ops
+       << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    m_lhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n";
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "C2=" << Cols2 << ",\n"
+       << IndentLevel(l)
+       << "\n"
+       << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1		 				m_lhs;
+  const E2						m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MMPRODUCT_TRANSPOSED_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h
new file mode 100644
index 0000000..c2580ff
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h
@@ -0,0 +1,137 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MMtProduct.h,v 1.16 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MMTPRODUCT_H
+#define TVMET_XPR_MMTPRODUCT_H
+
+#include <tvmet/meta/Gemmt.h>
+#include <tvmet/loop/Gemmt.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprMMtProduct MMtProduct.h "tvmet/xpr/MMtProduct.h"
+ * \brief Expression for matrix-matrix product.
+ *        Using formula:
+ *        \f[
+ *        M_1\,M_2^T
+ *        \f]
+ * \note The number of cols of rhs matrix have to be equal to cols of rhs matrix.
+ *       The result is a (Rows1 x Rows2) matrix.
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+class XprMMtProduct
+  : public TvmetBase< XprMMtProduct<E1, Rows1, Cols1, E2, Cols2> >
+{
+private:
+  XprMMtProduct();
+  XprMMtProduct& operator=(const XprMMtProduct&);
+
+public:
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type							value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    Rows2 = Cols1,
+    M = Rows1 * Cols1 * Rows1,
+    N = Rows1 * (Cols1 - 1) * Rows2,
+    ops_plus  = M * NumericTraits<value_type>::ops_plus,
+    ops_muls  = N * NumericTraits<value_type>::ops_muls,
+    ops       = ops_plus + ops_muls,
+    use_meta  = Rows1*Rows2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMMtProduct(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMMtProduct(const XprMMtProduct& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs)
+  { }
+#endif
+
+private:
+  /** Wrapper for meta gemm. */
+  static inline
+  value_type do_gemmt(dispatch<true>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return meta::gemmt<Rows1, Cols1,
+                       Cols2,
+                       0>::prod(lhs, rhs, i, j);
+  }
+
+  /** Wrapper for loop gemm. */
+  static inline
+  value_type do_gemmt(dispatch<false>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return loop::gemmt<Rows1, Cols1, Cols1>::prod(lhs, rhs, i, j);
+  }
+
+public:
+  /** index operator for arrays/matrices */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Rows1) && (j < Rows2), "XprMMtProduct Bounce Violation")
+    return do_gemmt(dispatch<use_meta>(), m_lhs, m_rhs, i, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMMtProduct["
+       << (use_meta ? "M" :  "L") << ", O=" << ops
+       << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    m_lhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n";
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "C2=" << Cols2 << ",\n"
+       << "\n"
+       << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1		 				m_lhs;
+  const E2 						m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MMTPRODUCT_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MVProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MVProduct.h
new file mode 100644
index 0000000..15d13ad
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MVProduct.h
@@ -0,0 +1,130 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MVProduct.h,v 1.17 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MVPRODUCT_H
+#define TVMET_XPR_MVPRODUCT_H
+
+#include <tvmet/meta/Gemv.h>
+#include <tvmet/loop/Gemv.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprMVProduct MVProduct.h "tvmet/xpr/MVProduct.h"
+ * \brief Expression for matrix-vector product
+ *        using formula
+ *        \f[
+ *        M\,v
+ *        \f]
+ */
+template<class E1, std::size_t Rows, std::size_t Cols,
+	 class E2>
+class XprMVProduct
+  : public TvmetBase< XprMVProduct<E1, Rows, Cols, E2> >
+{
+  XprMVProduct();
+  XprMVProduct& operator=(const XprMVProduct&);
+
+public:
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type							value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    M         = Rows * Cols,
+    N         = Rows * (Cols - 1),
+    ops_plus  = M * NumericTraits<value_type>::ops_plus,
+    ops_muls  = N * NumericTraits<value_type>::ops_muls,
+    ops       = ops_plus + ops_muls,
+    use_meta  = Rows*Cols < TVMET_COMPLEXITY_MV_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMVProduct(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMVProduct(const XprMVProduct& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs)
+  { }
+#endif
+
+private:
+  /** Wrapper for meta gemm. */
+  static inline
+  value_type do_gemv(dispatch<true>, const E1& lhs, const E2& rhs, std::size_t j) {
+    return meta::gemv<Rows, Cols,
+                      0>::prod(lhs, rhs, j);
+  }
+
+  /** Wrapper for loop gemm. */
+  static inline
+  value_type do_gemv(dispatch<false>, const E1& lhs, const E2& rhs, std::size_t j) {
+    return loop::gemv<Rows, Cols>::prod(lhs, rhs, j);
+  }
+
+public:
+  /** index operator, returns the expression by index. This is the vector
+      style since a matrix*vector gives a vector. */
+  value_type operator()(std::size_t j) const {
+    TVMET_RT_CONDITION(j < Rows , "XprMVProduct Bounce Violation")
+    return do_gemv(dispatch<use_meta>(), m_lhs, m_rhs, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMVProduct["
+       << (use_meta ? "M" :  "L") << ", O=" << ops
+       << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    m_lhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R=" << Rows << ", C=" << Cols << ",\n";
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1							m_lhs;
+  const E2							m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MVPRODUCT_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Makefile.am b/tvmet-1.7.1/include/tvmet/xpr/Makefile.am
new file mode 100644
index 0000000..7cfe875
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Makefile.am
@@ -0,0 +1,31 @@
+# $Id: Makefile.am,v 1.18 2004/07/03 15:32:19 opetzold Exp $
+
+libtvmetincludedir = $(includedir)/$(PACKAGE)/xpr
+
+libtvmetinclude_HEADERS = \
+	BinOperator.h \
+	Eval.h \
+	Identity.h \
+	Literal.h \
+	MatrixBinaryFunctions.h \
+	MatrixFunctions.h \
+	Matrix.h \
+	MatrixRow.h \
+	MatrixCol.h \
+	MatrixDiag.h \
+	MatrixOperators.h \
+	MatrixTranspose.h \
+	MatrixUnaryFunctions.h \
+	MMProduct.h \
+	MMProductTransposed.h \
+	MMtProduct.h \
+	MtMProduct.h \
+	MVProduct.h \
+	MtVProduct.h \
+	Null.h \
+	UnOperator.h \
+	VectorBinaryFunctions.h \
+	VectorFunctions.h \
+	Vector.h \
+	VectorOperators.h \
+	VectorUnaryFunctions.h
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Makefile.in b/tvmet-1.7.1/include/tvmet/xpr/Makefile.in
new file mode 100644
index 0000000..3f94725
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Makefile.in
@@ -0,0 +1,436 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.18 2004/07/03 15:32:19 opetzold Exp $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/tvmet/xpr
+DIST_COMMON = $(libtvmetinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__installdirs = "$(DESTDIR)$(libtvmetincludedir)"
+libtvmetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libtvmetinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+libtvmetincludedir = $(includedir)/$(PACKAGE)/xpr
+libtvmetinclude_HEADERS = \
+	BinOperator.h \
+	Eval.h \
+	Identity.h \
+	Literal.h \
+	MatrixBinaryFunctions.h \
+	MatrixFunctions.h \
+	Matrix.h \
+	MatrixRow.h \
+	MatrixCol.h \
+	MatrixDiag.h \
+	MatrixOperators.h \
+	MatrixTranspose.h \
+	MatrixUnaryFunctions.h \
+	MMProduct.h \
+	MMProductTransposed.h \
+	MMtProduct.h \
+	MtMProduct.h \
+	MVProduct.h \
+	MtVProduct.h \
+	Null.h \
+	UnOperator.h \
+	VectorBinaryFunctions.h \
+	VectorFunctions.h \
+	Vector.h \
+	VectorOperators.h \
+	VectorUnaryFunctions.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/tvmet/xpr/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  include/tvmet/xpr/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-libtvmetincludeHEADERS: $(libtvmetinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libtvmetincludedir)" || $(mkdir_p) "$(DESTDIR)$(libtvmetincludedir)"
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(libtvmetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  $(libtvmetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+uninstall-libtvmetincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libtvmetinclude_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f '$(DESTDIR)$(libtvmetincludedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libtvmetincludedir)/$$f"; \
+	done
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libtvmetincludedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libtvmetincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libtvmetincludeHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool ctags distclean 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-exec install-exec-am install-info \
+	install-info-am install-libtvmetincludeHEADERS install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libtvmetincludeHEADERS
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Matrix.h b/tvmet-1.7.1/include/tvmet/xpr/Matrix.h
new file mode 100644
index 0000000..928dab9
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Matrix.h
@@ -0,0 +1,164 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Matrix.h,v 1.22 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_H
+#define TVMET_XPR_MATRIX_H
+
+#include <tvmet/meta/Matrix.h>
+#include <tvmet/loop/Matrix.h>
+
+namespace tvmet {
+
+
+/* forwards */
+template <class T, std::size_t Rows, std::size_t Cols> class Matrix;
+
+/**
+ * \class XprMatrix Matrix.h "tvmet/xpr/Matrix.h"
+ * \brief Represents the expression for vectors at any node in the parse tree.
+ *
+ * Specifically, XprMatrix is the class that wraps the expression, and the
+ * expression itself is represented by the template parameter E. The
+ * class XprMatrix is known as an anonymizing expression wrapper because
+ * it can hold any subexpression of arbitrary complexity, allowing
+ * clients to work with any expression by holding on to it via the
+ * wrapper, without having to know the name of the type object that
+ * actually implements the expression.
+ * \note leave the CCtors non-explicit to allow implicit type conversation.
+ */
+template<class E, std::size_t NRows, std::size_t NCols>
+class XprMatrix
+  : public TvmetBase< XprMatrix<E, NRows, NCols> >
+{
+  XprMatrix();
+  XprMatrix& operator=(const XprMatrix&);
+
+public:
+  /** Dimensions. */
+  enum {
+    Rows = NRows,			/**< Number of rows. */
+    Cols = NCols,			/**< Number of cols. */
+    Size = Rows * Cols			/**< Complete Size of Matrix. */
+  };
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_assign = Rows * Cols,
+    ops        = E::ops,
+    use_meta   = ops_assign < TVMET_COMPLEXITY_M_ASSIGN_TRIGGER ? true : false
+  };
+
+public:
+  typedef typename E::value_type			value_type;
+
+public:
+  /** Constructor. */
+  explicit XprMatrix(const E& e)
+    : m_expr(e)
+  { }
+
+ /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMatrix(const XprMatrix& rhs)
+    : m_expr(rhs.m_expr)
+  { }
+#endif
+
+  /** access by index. */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Rows) && (j < Cols), "XprMatrix Bounce Violation")
+    return m_expr(i, j);
+  }
+
+private:
+  /** Wrapper for meta assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<true>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    meta::Matrix<Rows, Cols, 0, 0>::assign(dest, src, assign_fn);
+  }
+
+  /** Wrapper for loop assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<false>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    loop::Matrix<Rows, Cols>::assign(dest, src, assign_fn);
+  }
+
+public:
+  /** assign this expression to Matrix dest. */
+  template<class Dest, class Assign>
+  void assign_to(Dest& dest, const Assign& assign_fn) const {
+    /* here is a way for caching, since each complex 'Node'
+       is of type XprMatrix. */
+    do_assign(dispatch<use_meta>(), dest, *this, assign_fn);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMatrix["
+       << (use_meta ? "M" :  "L") << ", O=" << ops << "]<"
+       << std::endl;
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R=" << Rows << ", C=" << Cols << std::endl;
+    os << IndentLevel(--l) << ">"
+       << ((l != 0) ? "," : "") << std::endl;
+  }
+
+private:
+  const E						m_expr;
+};
+
+
+} // namespace tvmet
+
+#include <tvmet/Functional.h>
+
+#include <tvmet/xpr/BinOperator.h>
+#include <tvmet/xpr/UnOperator.h>
+#include <tvmet/xpr/Literal.h>
+
+#include <tvmet/xpr/Identity.h>
+
+#include <tvmet/xpr/MMProduct.h>
+#include <tvmet/xpr/MMProductTransposed.h>
+#include <tvmet/xpr/MMtProduct.h>
+#include <tvmet/xpr/MtMProduct.h>
+#include <tvmet/xpr/MVProduct.h>
+#include <tvmet/xpr/MtVProduct.h>
+#include <tvmet/xpr/MatrixTranspose.h>
+
+#include <tvmet/xpr/MatrixFunctions.h>
+#include <tvmet/xpr/MatrixBinaryFunctions.h>
+#include <tvmet/xpr/MatrixUnaryFunctions.h>
+#include <tvmet/xpr/MatrixOperators.h>
+#include <tvmet/xpr/Eval.h>
+
+#endif // TVMET_XPR_MATRIX_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixBinaryFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixBinaryFunctions.h
new file mode 100644
index 0000000..71dae56
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixBinaryFunctions.h
@@ -0,0 +1,317 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixBinaryFunctions.h,v 1.8 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_BINARY_FUNCTIONS_H
+#define TVMET_XPR_MATRIX_BINARY_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+/*
+ * binary_function(XprMatrix<E1, Rows, Cols>, XprMatrix<E2, Rows, Cols>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class E1, std::size_t Rows, std::size_t Cols, class E2>	\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows, Cols>,						\
+    XprMatrix<E2, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const XprMatrix<E1, Rows, Cols>& lhs, 				\
+     const XprMatrix<E2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2)
+TVMET_DECLARE_MACRO(drem)
+TVMET_DECLARE_MACRO(fmod)
+TVMET_DECLARE_MACRO(hypot)
+TVMET_DECLARE_MACRO(jn)
+TVMET_DECLARE_MACRO(yn)
+TVMET_DECLARE_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+  //TVMET_DECLARE_MACRO(polar)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * binary_function(XprMatrix<E, Rows, Cols>, POD)
+ */
+#define TVMET_DECLARE_MACRO(NAME, TP)			\
+template<class E, std::size_t Rows, std::size_t Cols>	\
+XprMatrix<						\
+  XprBinOp<						\
+    Fcnl_##NAME<typename E::value_type, TP >,		\
+    XprMatrix<E, Rows, Cols>,				\
+    XprLiteral< TP >					\
+  >,							\
+  Rows, Cols						\
+>							\
+NAME(const XprMatrix<E, Rows, Cols>& lhs, 		\
+     TP rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2, int)
+TVMET_DECLARE_MACRO(drem, int)
+TVMET_DECLARE_MACRO(fmod, int)
+TVMET_DECLARE_MACRO(hypot, int)
+TVMET_DECLARE_MACRO(jn, int)
+TVMET_DECLARE_MACRO(yn, int)
+TVMET_DECLARE_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(atan2, long long int)
+TVMET_DECLARE_MACRO(drem, long long int)
+TVMET_DECLARE_MACRO(fmod, long long int)
+TVMET_DECLARE_MACRO(hypot, long long int)
+TVMET_DECLARE_MACRO(jn, long long int)
+TVMET_DECLARE_MACRO(yn,long long int)
+TVMET_DECLARE_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_DECLARE_MACRO(atan2, float)
+TVMET_DECLARE_MACRO(drem, float)
+TVMET_DECLARE_MACRO(fmod, float)
+TVMET_DECLARE_MACRO(hypot, float)
+TVMET_DECLARE_MACRO(jn, float)
+TVMET_DECLARE_MACRO(yn, float)
+TVMET_DECLARE_MACRO(pow, float)
+
+TVMET_DECLARE_MACRO(atan2, double)
+TVMET_DECLARE_MACRO(drem, double)
+TVMET_DECLARE_MACRO(fmod, double)
+TVMET_DECLARE_MACRO(hypot,double)
+TVMET_DECLARE_MACRO(jn, double)
+TVMET_DECLARE_MACRO(yn, double)
+TVMET_DECLARE_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(atan2, long double)
+TVMET_DECLARE_MACRO(drem, long double)
+TVMET_DECLARE_MACRO(fmod, long double)
+TVMET_DECLARE_MACRO(hypot, long double)
+TVMET_DECLARE_MACRO(jn, long double)
+TVMET_DECLARE_MACRO(yn, long double)
+TVMET_DECLARE_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * binary_function(XprMatrix<E, Rows, Cols>, std::complex<>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class E, std::size_t Rows, std::size_t Cols, class T>	\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,	\
+    XprMatrix<E, Rows, Cols>,					\
+    XprLiteral< std::complex<T> >				\
+  >,								\
+  Rows, Cols							\
+>								\
+NAME(const XprMatrix<E, Rows, Cols>& lhs, 			\
+     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(pow)
+
+TVMET_DECLARE_MACRO(atan2)
+TVMET_DECLARE_MACRO(drem)
+TVMET_DECLARE_MACRO(fmod)
+TVMET_DECLARE_MACRO(hypot)
+TVMET_DECLARE_MACRO(jn)
+TVMET_DECLARE_MACRO(yn)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * binary_function(XprMatrix<E1, Rows, Cols>, XprMatrix<E2, Rows, Cols>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)							\
+template<class E1, std::size_t Rows, std::size_t Cols, class E2>			\
+inline											\
+XprMatrix<										\
+  XprBinOp<										\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,			\
+    XprMatrix<E1, Rows, Cols>,								\
+    XprMatrix<E2, Rows, Cols>								\
+  >,											\
+  Rows, Cols										\
+>											\
+NAME(const XprMatrix<E1, Rows, Cols>& lhs, const XprMatrix<E2, Rows, Cols>& rhs) {	\
+  typedef XprBinOp<									\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,			\
+    XprMatrix<E1, Rows, Cols>,								\
+    XprMatrix<E2, Rows, Cols>								\
+  >		    					expr_type;			\
+  return XprMatrix<expr_type, Rows, Cols>(						\
+    expr_type(lhs, rhs));								\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+TVMET_IMPLEMENT_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+  //TVMET_IMPLEMENT_MACRO(polar)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * binary_function(XprMatrix<E, Rows, Cols>, POD)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, TP)					\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< TP >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const XprMatrix<E, Rows, Cols>& lhs, TP rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs, XprLiteral< TP >(rhs)));				\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2, int)
+TVMET_IMPLEMENT_MACRO(drem, int)
+TVMET_IMPLEMENT_MACRO(fmod, int)
+TVMET_IMPLEMENT_MACRO(hypot, int)
+TVMET_IMPLEMENT_MACRO(jn, int)
+TVMET_IMPLEMENT_MACRO(yn, int)
+TVMET_IMPLEMENT_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(atan2, long long int)
+TVMET_IMPLEMENT_MACRO(drem, long long int)
+TVMET_IMPLEMENT_MACRO(fmod, long long int)
+TVMET_IMPLEMENT_MACRO(hypot, long long int)
+TVMET_IMPLEMENT_MACRO(jn, long long int)
+TVMET_IMPLEMENT_MACRO(yn,long long int)
+TVMET_IMPLEMENT_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(atan2, float)
+TVMET_IMPLEMENT_MACRO(drem, float)
+TVMET_IMPLEMENT_MACRO(fmod, float)
+TVMET_IMPLEMENT_MACRO(hypot, float)
+TVMET_IMPLEMENT_MACRO(jn, float)
+TVMET_IMPLEMENT_MACRO(yn, float)
+TVMET_IMPLEMENT_MACRO(pow, float)
+
+TVMET_IMPLEMENT_MACRO(atan2, double)
+TVMET_IMPLEMENT_MACRO(drem, double)
+TVMET_IMPLEMENT_MACRO(fmod, double)
+TVMET_IMPLEMENT_MACRO(hypot,double)
+TVMET_IMPLEMENT_MACRO(jn, double)
+TVMET_IMPLEMENT_MACRO(yn, double)
+TVMET_IMPLEMENT_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(atan2, long double)
+TVMET_IMPLEMENT_MACRO(drem, long double)
+TVMET_IMPLEMENT_MACRO(fmod, long double)
+TVMET_IMPLEMENT_MACRO(hypot, long double)
+TVMET_IMPLEMENT_MACRO(jn, long double)
+TVMET_IMPLEMENT_MACRO(yn, long double)
+TVMET_IMPLEMENT_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * binary_function(XprMatrix<E, Rows, Cols>, std::complex<>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E, std::size_t Rows, std::size_t Cols, class T>		\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const XprMatrix<E, Rows, Cols>& lhs, const std::complex<T>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs, XprLiteral< std::complex<T> >(rhs)));		\
+}
+
+TVMET_IMPLEMENT_MACRO(pow)
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MATRIX_BINARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h
new file mode 100644
index 0000000..9d2214f
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h
@@ -0,0 +1,95 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixCol.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_COL_H
+#define TVMET_XPR_MATRIX_COL_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprMatrixCol MatrixCol.h "tvmet/xpr/MatrixCol.h"
+ * \brief Expression on matrix used for access on the column vector.
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+class XprMatrixCol
+  : public TvmetBase< XprMatrixCol<E, Rows, Cols> >
+{
+  XprMatrixCol();
+  XprMatrixCol& operator=(const XprMatrixCol&);
+
+public:
+  typedef typename E::value_type			value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_expr  = E::ops,
+    ops       = ops_expr/Cols	// equal Row accesses
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMatrixCol(const E& e, std::size_t no)
+    : m_expr(e), m_col(no)
+  {
+    TVMET_RT_CONDITION(no < Cols, "XprMatrixCol Bounce Violation")
+  }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMatrixCol(const XprMatrixCol& e)
+    : m_expr(e.m_expr), m_col(e.m_col)
+  { }
+#endif
+
+  value_type operator()(std::size_t i) const {
+    TVMET_RT_CONDITION(i < Rows, "XprMatrixCol Bounce Violation")
+    return m_expr(i, m_col);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMatrixCol[O=" << ops << ", (O=" << ops_expr << ")]<"
+       << std::endl;
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R=" << Rows << ", C=" << Cols << std::endl
+       << IndentLevel(--l) << ">"
+       << ((l != 0) ? "," : "") << std::endl;
+  }
+
+private:
+  const E						m_expr;
+  const std::size_t					m_col;
+};
+
+
+}
+
+#endif // TVMET_XPR_MATRIX_COL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h
new file mode 100644
index 0000000..48f262c
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h
@@ -0,0 +1,93 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixDiag.h,v 1.13 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_DIAG_H
+#define TVMET_XPR_MATRIX_DIAG_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprMatrixDiag MatrixDiag.h "tvmet/xpr/MatrixDiag.h"
+ * \brief Expression on matrix used for access on the diagonal vector.
+ */
+template<class E, std::size_t Sz>
+class XprMatrixDiag
+  : public TvmetBase< XprMatrixDiag<E, Sz> >
+{
+  XprMatrixDiag();
+  XprMatrixDiag& operator=(const XprMatrixDiag<E, Sz>&);
+
+public:
+  typedef typename E::value_type			value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_expr  = E::ops,
+    ops       = ops_expr/Sz
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMatrixDiag(const E& e)
+    : m_expr(e)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMatrixDiag(const XprMatrixDiag& e)
+    : m_expr(e.m_expr)
+  { }
+#endif
+
+  /** index operator for arrays/matrizes */
+  value_type operator()(std::size_t i) const {
+    TVMET_RT_CONDITION(i < Sz, "XprMatrixDiag Bounce Violation")
+    return m_expr(i, i);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMatrixDiag[O=" << ops << ", (O=" << ops_expr << ")]<"
+       << std::endl;
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "Sz=" << Sz << std::endl
+       << IndentLevel(--l) << ">"
+       << ((l != 0) ? "," : "") << std::endl;
+  }
+
+private:
+  const E						m_expr;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MATRIX_DIAG_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h
new file mode 100644
index 0000000..40a3bde
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h
@@ -0,0 +1,764 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixFunctions.h,v 1.39 2004/07/06 05:49:22 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_FUNCTIONS_H
+#define TVMET_XPR_MATRIX_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/* forwards */
+template<class T, std::size_t Rows, std::size_t Cols> class Matrix;
+template<class T, std::size_t Sz> class Vector;
+template<class E, std::size_t Sz> class XprVector;
+template<class E> class XprMatrixTranspose;
+template<class E, std::size_t Sz> class XprMatrixDiag;
+template<class E, std::size_t Rows, std::size_t Cols> class XprMatrixRow;
+template<class E, std::size_t Rows, std::size_t Cols> class XprMatrixCol;
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(XprMatrix<E1, Rows, Cols>, XprMatrix<E2, Rows, Cols>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class E1, class E2, std::size_t Rows, std::size_t Cols>	\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows, Cols>,						\
+    XprMatrix<E2, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E1, Rows, Cols>& lhs,				\
+      const XprMatrix<E2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)			// per se element wise
+TVMET_DECLARE_MACRO(sub)			// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mul)			// not defined for matrizes
+  TVMET_DECLARE_MACRO(div)			// not defined for matrizes
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * function(XprMatrix<E, Rows, Cols>, POD)
+ * function(POD, XprMatrix<E, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, POD)					\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, POD >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< POD >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E, Rows, Cols>& lhs, 				\
+      POD rhs) TVMET_CXX_ALWAYS_INLINE;					\
+									\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, typename E::value_type>,				\
+    XprLiteral< POD >,							\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (POD lhs, 								\
+      const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, int)
+TVMET_DECLARE_MACRO(sub, int)
+TVMET_DECLARE_MACRO(mul, int)
+TVMET_DECLARE_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, long long int)
+TVMET_DECLARE_MACRO(sub, long long int)
+TVMET_DECLARE_MACRO(mul, long long int)
+TVMET_DECLARE_MACRO(div, long long int)
+#endif
+
+TVMET_DECLARE_MACRO(add, float)
+TVMET_DECLARE_MACRO(sub, float)
+TVMET_DECLARE_MACRO(mul, float)
+TVMET_DECLARE_MACRO(div, float)
+
+TVMET_DECLARE_MACRO(add, double)
+TVMET_DECLARE_MACRO(sub, double)
+TVMET_DECLARE_MACRO(mul, double)
+TVMET_DECLARE_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, long double)
+TVMET_DECLARE_MACRO(sub, long double)
+TVMET_DECLARE_MACRO(mul, long double)
+TVMET_DECLARE_MACRO(div, long double)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(XprMatrix<E, Rows, Cols>, complex<T>)
+ * function(complex<T>, XprMatrix<E, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class E, class T, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E, Rows, Cols>& lhs,				\
+      const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+									\
+template<class T, class E, std::size_t Rows, std::size_t Cols>		\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const std::complex<T>& lhs,					\
+      const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)
+TVMET_DECLARE_MACRO(sub)
+TVMET_DECLARE_MACRO(mul)
+TVMET_DECLARE_MACRO(div)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2					// return Dim
+>
+prod(const XprMatrix<E1, Rows1, Cols1>& lhs,
+     const XprMatrix<E2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+XprMatrix<
+  XprMMProductTransposed<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Cols2, Rows1					// return Dim
+>
+trans_prod(const XprMatrix<E1, Rows1, Cols1>& lhs,
+	   const XprMatrix<E2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>	// Rows2 = Rows1
+XprMatrix<
+  XprMtMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Rows1, Cols2>, Cols2		// M2(Rows1, Cols2)
+  >,
+  Cols1, Cols2					// return Dim
+>
+MtM_prod(const XprMatrix<E1, Rows1, Cols1>& lhs,
+	 const XprMatrix<E2, Rows1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Rows2> 		// Cols2 = Cols1
+XprMatrix<
+  XprMMtProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Rows2, Cols1>, Cols1 		// M2(Rows2, Cols1)
+  >,
+  Rows1, Rows2					// return Dim
+>
+MMt_prod(const XprMatrix<E1, Rows1, Cols1>& lhs,
+	 const XprMatrix<E2, Rows2, Cols1>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class E1, std::size_t Rows, std::size_t Cols,
+	 class E2>
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+prod(const XprMatrix<E1, Rows, Cols>& lhs,
+     const XprVector<E2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+XprMatrix<
+  XprMatrixTranspose<
+    XprMatrix<E, Rows, Cols>
+  >,
+  Cols, Rows
+>
+trans(const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+#if 0 // XXX needs declaration of meta::Matrix<Sz, Sz, 0, 0>::trace
+template<class E, std::size_t Sz>
+typename NumericTraits<typename E::value_type>::sum_type
+trace(const XprMatrix<E, Sz, Sz>& m)TVMET_CXX_ALWAYS_INLINE;
+#endif
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMatrixRow<
+    XprMatrix<E, Rows, Cols>,
+    Rows, Cols
+  >,
+  Cols
+>
+row(const XprMatrix<E, Rows, Cols>& m,
+    std::size_t no) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Rows, std::size_t Cols>
+XprVector<
+  XprMatrixCol<
+    XprMatrix<E, Rows, Cols>,
+    Rows, Cols
+  >,
+  Rows
+>
+col(const XprMatrix<E, Rows, Cols>& m, std::size_t no) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+XprVector<
+  XprMatrixDiag<
+    XprMatrix<E, Sz, Sz>,
+    Sz
+  >,
+  Sz
+>
+diag(const XprMatrix<E, Sz, Sz>& m) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(XprMatrix<E1, Rows, Cols>, XprMatrix<E2, Rows, Cols>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E1, class E2, std::size_t Rows, std::size_t Cols>	\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows, Cols>,						\
+    XprMatrix<E2, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E1, Rows, Cols>& lhs, 				\
+      const XprMatrix<E2, Rows, Cols>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows, Cols>,						\
+    XprMatrix<E2, Rows, Cols>						\
+  > 							 expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(lhs, rhs));		\
+}
+
+TVMET_IMPLEMENT_MACRO(add)			// per se element wise
+TVMET_IMPLEMENT_MACRO(sub)			// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mul)			// not defined for matrizes
+  TVMET_IMPLEMENT_MACRO(div)			// not defined for matrizes
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * function(XprMatrix<E, Rows, Cols>, POD)
+ * function(POD, XprMatrix<E, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, POD)				\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, POD >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< POD >							\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E, Rows, Cols>& lhs, POD rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, POD >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< POD >							\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs, XprLiteral< POD >(rhs)));				\
+}									\
+									\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, typename E::value_type>,				\
+    XprLiteral< POD >,							\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (POD lhs, const XprMatrix<E, Rows, Cols>& rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< POD, typename E::value_type>,				\
+    XprLiteral< POD >,							\
+    XprMatrix<E, Rows, Cols>						\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(XprLiteral< POD >(lhs), rhs));				\
+}
+
+TVMET_IMPLEMENT_MACRO(add, int)
+TVMET_IMPLEMENT_MACRO(sub, int)
+TVMET_IMPLEMENT_MACRO(mul, int)
+TVMET_IMPLEMENT_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, long long int)
+TVMET_IMPLEMENT_MACRO(sub, long long int)
+TVMET_IMPLEMENT_MACRO(mul, long long int)
+TVMET_IMPLEMENT_MACRO(div, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(add, float)
+TVMET_IMPLEMENT_MACRO(sub, float)
+TVMET_IMPLEMENT_MACRO(mul, float)
+TVMET_IMPLEMENT_MACRO(div, float)
+
+TVMET_IMPLEMENT_MACRO(add, double)
+TVMET_IMPLEMENT_MACRO(sub, double)
+TVMET_IMPLEMENT_MACRO(mul, double)
+TVMET_IMPLEMENT_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, long double)
+TVMET_IMPLEMENT_MACRO(sub, long double)
+TVMET_IMPLEMENT_MACRO(mul, long double)
+TVMET_IMPLEMENT_MACRO(div, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(XprMatrix<E, Rows, Cols>, complex<T>)
+ * function(complex<T>, XprMatrix<E, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E, class T, std::size_t Rows, std::size_t Cols>		\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const XprMatrix<E, Rows, Cols>& lhs, 				\
+      const std::complex<T>& rhs) {					\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs, XprLiteral< std::complex<T> >(rhs)));		\
+}									\
+									\
+template<class T, class E, std::size_t Rows, std::size_t Cols>		\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME (const std::complex<T>& lhs, 					\
+      const XprMatrix<E, Rows, Cols>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprMatrix<E, Rows, Cols>						\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs));		\
+}
+
+TVMET_IMPLEMENT_MACRO(add)
+TVMET_IMPLEMENT_MACRO(sub)
+TVMET_IMPLEMENT_MACRO(mul)
+TVMET_IMPLEMENT_MACRO(div)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of two XprMatrix.
+ * Perform on given Matrix M1 and M2:
+ * \f[
+ * M_1\,M_2
+ * \f]
+ * \note The numer of Rows2 has to be equal to Cols1.
+ * \ingroup _binary_function
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >,
+  Rows1, Cols2					// return Dim
+>
+prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Cols2>(expr_type(lhs, rhs));
+}
+
+
+/**
+ * \fn trans_prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)
+ * \brief Function for the trans(matrix-matrix-product)
+ * Perform on given Matrix M1 and M2:
+ * \f[
+ * (M_1\,M_2)^T
+ * \f]
+ * \note The numer of Rows2 has to be equal to Cols1.
+ * \ingroup _binary_function
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProductTransposed<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Cols2, Rows1					// return Dim
+>
+trans_prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs) {
+  typedef XprMMProductTransposed<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Cols1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Cols2, Rows1>(expr_type(lhs, rhs));
+}
+
+
+/**
+ * \fn MtM_prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Rows1, Cols2>& rhs)
+ * \brief Function for the trans(matrix)-matrix-product.
+ *        using formula
+ *        \f[
+ *        M_1^{T}\,M_2
+ *        \f]
+ * \note The number of cols of matrix 2 have to be equal to number of rows of
+ *       matrix 1, since matrix 1 is trans - the result is a (Cols1 x Cols2)
+ *       matrix.
+ * \ingroup _binary_function
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>	// Rows2 = Rows1
+inline
+XprMatrix<
+  XprMtMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Rows1, Cols2>, Cols2		// M2(Rows1, Cols2)
+  >,
+  Cols1, Cols2					// return Dim
+>
+MtM_prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Rows1, Cols2>& rhs) {
+  typedef XprMtMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Rows1, Cols2>, Cols2
+  >							expr_type;
+  return XprMatrix<expr_type, Cols1, Cols2>(expr_type(lhs, rhs));
+}
+
+
+/**
+ * \fn MMt_prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Rows2, Cols1>& rhs)
+ * \brief Function for the matrix-trans(matrix)-product.
+ * \ingroup _binary_function
+ * \note The cols2 has to be equal to cols1.
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Rows2> // Cols2 = Cols1
+inline
+XprMatrix<
+  XprMMtProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Rows2, Cols1>, Cols1	 	// M2(Rows2, Cols1)
+  >,
+  Rows1, Rows2					// return Dim
+>
+MMt_prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Rows2, Cols1>& rhs) {
+  typedef XprMMtProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,
+    XprMatrix<E2, Rows2, Cols1>, Cols1
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Rows2>(expr_type(lhs, rhs));
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn prod(const XprMatrix<E1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs)
+ * \brief Evaluate the product of XprMatrix and XprVector.
+ * \ingroup _binary_function
+ */
+template<class E1, std::size_t Rows, std::size_t Cols,
+	 class E2>
+inline
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+prod(const XprMatrix<E1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs) {
+  typedef XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >							expr_type;
+  return XprVector<expr_type, Rows>(expr_type(lhs, rhs));
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn trans(const XprMatrix<E, Rows, Cols>& rhs)
+ * \brief Transpose an expression matrix.
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+XprMatrix<
+  XprMatrixTranspose<
+    XprMatrix<E, Rows, Cols>
+  >,
+  Cols, Rows
+>
+trans(const XprMatrix<E, Rows, Cols>& rhs) {
+  typedef XprMatrixTranspose<
+    XprMatrix<E, Rows, Cols>
+  >							expr_type;
+  return XprMatrix<expr_type, Cols, Rows>(expr_type(rhs));
+}
+
+
+#if 0 // XXX needs declaration of meta::Matrix<Sz, Sz, 0, 0>::trace
+/*
+ * \fn trace(const XprMatrix<E, Sz, Sz>& m)
+ * \brief Compute the trace of a square matrix.
+ * \ingroup _unary_function
+ *
+ * Simply compute the trace of the given matrix as:
+ * \f[
+ *  \sum_{k = 0}^{Sz-1} m(k, k)
+ * \f]
+ */
+template<class E, std::size_t Sz>
+inline
+typename NumericTraits<typename E::value_type>::sum_type
+trace(const XprMatrix<E, Sz, Sz>& m) {
+  return meta::Matrix<Sz, Sz, 0, 0>::trace(m);
+}
+#endif
+
+
+/**
+ * \fn row(const XprMatrix<E, Rows, Cols>& m, std::size_t no)
+ * \brief Returns a row vector of the given matrix.
+ * \ingroup _binary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMatrixRow<
+    XprMatrix<E, Rows, Cols>,
+    Rows, Cols
+  >,
+  Cols
+>
+row(const XprMatrix<E, Rows, Cols>& m, std::size_t no) {
+  typedef XprMatrixRow<
+    XprMatrix<E, Rows, Cols>,
+    Rows, Cols
+  >							expr_type;
+
+  return XprVector<expr_type, Cols>(expr_type(m, no));
+}
+
+
+/**
+ * \fn col(const XprMatrix<E, Rows, Cols>& m, std::size_t no)
+ * \brief Returns a column vector of the given matrix.
+ * \ingroup _binary_function
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+inline
+XprVector<
+  XprMatrixCol<
+    XprMatrix<E, Rows, Cols>,
+    Rows, Cols
+  >,
+  Rows
+>
+col(const XprMatrix<E, Rows, Cols>& m, std::size_t no) {
+  typedef XprMatrixCol<
+    XprMatrix<E, Rows, Cols>,
+    Rows, Cols
+  >							expr_type;
+
+  return XprVector<expr_type, Cols>(expr_type(m, no));
+}
+
+
+/**
+ * \fn diag(const XprMatrix<E, Sz, Sz>& m)
+ * \brief Returns the diagonal vector of the given square matrix.
+ * \ingroup _unary_function
+ */
+template<class E, std::size_t Sz>
+inline
+XprVector<
+  XprMatrixDiag<
+    XprMatrix<E, Sz, Sz>,
+    Sz
+  >,
+  Sz
+>
+diag(const XprMatrix<E, Sz, Sz>& m) {
+  typedef XprMatrixDiag<
+    XprMatrix<E, Sz, Sz>,
+  Sz> 						expr_type;
+
+  return XprVector<expr_type, Sz>(expr_type(m));
+}
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MATRIX_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h
new file mode 100644
index 0000000..485f6e9
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h
@@ -0,0 +1,946 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixOperators.h,v 1.19 2005/03/09 09:48:03 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_OPERATORS_H
+#define TVMET_XPR_MATRIX_OPERATORS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1,Cols2>& rhs)
+ *
+ * Note: operations +,-,*,/ are per se element wise. Further more,
+ * element wise operations make sense only for matrices of the same
+ * size [varg].
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class E1, std::size_t Rows1, std::size_t Cols1,			\
+         class E2>								\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,		\
+    XprMatrix<E1, Rows1, Cols1>,						\
+    XprMatrix<E2, Rows1, Cols1>							\
+  >,										\
+  Rows1, Cols1									\
+>										\
+operator OP (const XprMatrix<E1, Rows1, Cols1>& lhs,				\
+	     const XprMatrix<E2, Rows1, Cols1>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)		// per se element wise
+TVMET_DECLARE_MACRO(sub, -)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mul, *)		// see as prod()
+  TVMET_DECLARE_MACRO(div, /)		// not defined for matrizes, must be element_wise
+}
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * operator(XprMatrix<E, Rows, Cols>,  POD)
+ * operator(POD, XprMatrix<E, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, POD)					\
+template<class E, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, POD >,					\
+    XprMatrix<E, Rows, Cols>,							\
+    XprLiteral< POD >								\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, 				\
+	     POD rhs) TVMET_CXX_ALWAYS_INLINE;					\
+										\
+template<class E,std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<POD, typename E::value_type>,					\
+    XprLiteral< POD >,								\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (POD lhs, 								\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +, int)
+TVMET_DECLARE_MACRO(sub, -, int)
+TVMET_DECLARE_MACRO(mul, *, int)
+TVMET_DECLARE_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, +, long long int)
+TVMET_DECLARE_MACRO(sub, -, long long int)
+TVMET_DECLARE_MACRO(mul, *, long long int)
+TVMET_DECLARE_MACRO(div, /, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_DECLARE_MACRO(add, +, float)
+TVMET_DECLARE_MACRO(sub, -, float)
+TVMET_DECLARE_MACRO(mul, *, float)
+TVMET_DECLARE_MACRO(div, /, float)
+
+TVMET_DECLARE_MACRO(add, +, double)
+TVMET_DECLARE_MACRO(sub, -, double)
+TVMET_DECLARE_MACRO(mul, *, double)
+TVMET_DECLARE_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, +, long double)
+TVMET_DECLARE_MACRO(sub, -, long double)
+TVMET_DECLARE_MACRO(mul, *, long double)
+TVMET_DECLARE_MACRO(div, /, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(XprMatrix<E, Rows, Cols>, complex<>)
+ * operator(complex<>, XprMatrix<E, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class E, std::size_t Rows, std::size_t Cols, class T>			\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,			\
+    XprMatrix<E, Rows, Cols>,							\
+    XprLiteral< std::complex<T> >						\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs,				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+										\
+template<class E, std::size_t Rows, std::size_t Cols, class T>			\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<std::complex<T>, typename E::value_type>,			\
+    XprLiteral< std::complex<T> >,						\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const std::complex<T>& lhs,					\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)
+TVMET_DECLARE_MACRO(sub, -)
+TVMET_DECLARE_MACRO(mul, *)
+TVMET_DECLARE_MACRO(div, /)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific operator*() = prod() operations
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn operator*(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of two XprMatrix.
+ * \ingroup _binary_operator
+ * \sa prod(XprMatrix<E1, Rows1, Cols1> lhs, XprMatrix<E2, Cols1, Cols2> rhs)
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2
+>
+operator*(const XprMatrix<E1, Rows1, Cols1>& lhs,
+	  const XprMatrix<E2, Cols1, Cols2>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn operator*(const XprMatrix<E1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs)
+ * \brief Evaluate the product of XprMatrix and XprVector.
+ * \ingroup _binary_operator
+ * \sa prod(XprMatrix<E1, Rows, Cols> lhs, XprVector<E2, Cols> rhs)
+ */
+template<class E1, std::size_t Rows, std::size_t Cols,
+	 class E2>
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+operator*(const XprMatrix<E1, Rows, Cols>& lhs,
+	  const XprVector<E2, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(XprMatrix<>, XprMatrix<>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class E1, std::size_t Rows, std::size_t Cols,				\
+         class E2>								\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,		\
+    XprMatrix<E1, Rows, Cols>,							\
+    XprMatrix<E2, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E1, Rows, Cols>& lhs, 				\
+	     const XprMatrix<E2, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you will get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %)
+  TVMET_DECLARE_MACRO(bitxor, ^)
+  TVMET_DECLARE_MACRO(bitand, &)
+  TVMET_DECLARE_MACRO(bitor, |)
+  TVMET_DECLARE_MACRO(shl, <<)
+  TVMET_DECLARE_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(XprMatrix<E, Rows, Cols>, std::complex<>)
+ * operator(std::complex<>, XprMatrix<E, Rows, Cols>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template<class E, std::size_t Rows, std::size_t Cols, class T>			\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,			\
+    XprMatrix<E, Rows, Cols>,							\
+    XprLiteral< std::complex<T> >						\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, 				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;		\
+										\
+template<class E, std::size_t Rows, std::size_t Cols, class T>			\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<std::complex<T>, typename E::value_type>,			\
+    XprLiteral< std::complex<T> >,						\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const std::complex<T>& lhs, 					\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*
+ * operator(XprMatrix<E, Rows, Cols>, POD)
+ * operator(POD, XprMatrix<E, Rows, Cols>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, TP)					\
+template<class E, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<typename E::value_type, TP >,					\
+    XprMatrix<E, Rows, Cols>,							\
+    XprLiteral< TP >								\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, 				\
+	     TP rhs) TVMET_CXX_ALWAYS_INLINE;					\
+										\
+template<class E, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprBinOp<									\
+    Fcnl_##NAME<TP, typename E::value_type>,					\
+    XprLiteral< TP >,								\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (TP lhs, 								\
+	     const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you will get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, int)
+  TVMET_DECLARE_MACRO(bitxor, ^, int)
+  TVMET_DECLARE_MACRO(bitand, &, int)
+  TVMET_DECLARE_MACRO(bitor, |, int)
+  TVMET_DECLARE_MACRO(shl, <<, int)
+  TVMET_DECLARE_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, int)
+TVMET_DECLARE_MACRO(less, <, int)
+TVMET_DECLARE_MACRO(greater_eq, >=, int)
+TVMET_DECLARE_MACRO(less_eq, <=, int)
+TVMET_DECLARE_MACRO(eq, ==, int)
+TVMET_DECLARE_MACRO(not_eq, !=, int)
+TVMET_DECLARE_MACRO(and, &&, int)
+TVMET_DECLARE_MACRO(or, ||, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, long long int)
+  TVMET_DECLARE_MACRO(bitxor, ^, long long int)
+  TVMET_DECLARE_MACRO(bitand, &, long long int)
+  TVMET_DECLARE_MACRO(bitor, |, long long int)
+  TVMET_DECLARE_MACRO(shl, <<, long long int)
+  TVMET_DECLARE_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long long int)
+TVMET_DECLARE_MACRO(less, <, long long int)
+TVMET_DECLARE_MACRO(greater_eq, >=, long long int)
+TVMET_DECLARE_MACRO(less_eq, <=, long long int)
+TVMET_DECLARE_MACRO(eq, ==, long long int)
+TVMET_DECLARE_MACRO(not_eq, !=, long long int)
+TVMET_DECLARE_MACRO(and, &&, long long int)
+TVMET_DECLARE_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, float)
+TVMET_DECLARE_MACRO(less, <, float)
+TVMET_DECLARE_MACRO(greater_eq, >=, float)
+TVMET_DECLARE_MACRO(less_eq, <=, float)
+TVMET_DECLARE_MACRO(eq, ==, float)
+TVMET_DECLARE_MACRO(not_eq, !=, float)
+TVMET_DECLARE_MACRO(and, &&, float)
+TVMET_DECLARE_MACRO(or, ||, float)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, double)
+TVMET_DECLARE_MACRO(less, <, double)
+TVMET_DECLARE_MACRO(greater_eq, >=, double)
+TVMET_DECLARE_MACRO(less_eq, <=, double)
+TVMET_DECLARE_MACRO(eq, ==, double)
+TVMET_DECLARE_MACRO(not_eq, !=, double)
+TVMET_DECLARE_MACRO(and, &&, double)
+TVMET_DECLARE_MACRO(or, ||, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long double)
+TVMET_DECLARE_MACRO(less, <, long double)
+TVMET_DECLARE_MACRO(greater_eq, >=, long double)
+TVMET_DECLARE_MACRO(less_eq, <=, long double)
+TVMET_DECLARE_MACRO(eq, ==, long double)
+TVMET_DECLARE_MACRO(not_eq, !=, long double)
+TVMET_DECLARE_MACRO(and, &&, long double)
+TVMET_DECLARE_MACRO(or, ||, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * unary_operator(const XprMatrix<E, Rows, Cols>& m)
+ * Note: per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)						\
+template <class E, std::size_t Rows, std::size_t Cols>				\
+XprMatrix<									\
+  XprUnOp<									\
+    Fcnl_##NAME<typename E::value_type>,					\
+    XprMatrix<E, Rows, Cols>							\
+  >,										\
+  Rows, Cols									\
+>										\
+operator OP (const XprMatrix<E, Rows, Cols>& m) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(not, !)
+TVMET_DECLARE_MACRO(compl, ~)
+TVMET_DECLARE_MACRO(neg, -)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1,Cols2>& rhs)
+ *
+ * Note: operations +,-,*,/ are per se element wise. Further more,
+ * element wise operations make sense only for matrices of the same
+ * size [varg].
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class E1, std::size_t Rows1, std::size_t Cols1,		\
+         class E2>							\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows1, Cols1>,					\
+    XprMatrix<E2, Rows1, Cols1>						\
+  >,									\
+  Rows1, Cols1								\
+>									\
+operator OP (const XprMatrix<E1, Rows1, Cols1>& lhs, 			\
+	     const XprMatrix<E2, Rows1, Cols1>& rhs) {			\
+  return NAME (lhs, rhs);						\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub, -)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mul, *)		// see as prod()
+  TVMET_IMPLEMENT_MACRO(div, /)		// not defined for matrizes, must be element_wise
+}
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * operator(XprMatrix<E, Rows, Cols>,  POD)
+ * operator(POD, XprMatrix<E, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD)			\
+template<class E, std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, POD >,			\
+    XprMatrix<E, Rows, Cols>,					\
+    XprLiteral< POD >						\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, POD rhs) {	\
+  return NAME (lhs, rhs);					\
+}								\
+								\
+template<class E,std::size_t Rows, std::size_t Cols>		\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME<POD, typename E::value_type>,			\
+    XprLiteral< POD >,						\
+    XprMatrix<E, Rows, Cols>					\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (POD lhs, const XprMatrix<E, Rows, Cols>& rhs) {	\
+  return NAME (lhs, rhs);					\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +, int)
+TVMET_IMPLEMENT_MACRO(sub, -, int)
+TVMET_IMPLEMENT_MACRO(mul, *, int)
+TVMET_IMPLEMENT_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, +, long long int)
+TVMET_IMPLEMENT_MACRO(sub, -, long long int)
+TVMET_IMPLEMENT_MACRO(mul, *, long long int)
+TVMET_IMPLEMENT_MACRO(div, /, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(add, +, float)
+TVMET_IMPLEMENT_MACRO(sub, -, float)
+TVMET_IMPLEMENT_MACRO(mul, *, float)
+TVMET_IMPLEMENT_MACRO(div, /, float)
+
+TVMET_IMPLEMENT_MACRO(add, +, double)
+TVMET_IMPLEMENT_MACRO(sub, -, double)
+TVMET_IMPLEMENT_MACRO(mul, *, double)
+TVMET_IMPLEMENT_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, +, long double)
+TVMET_IMPLEMENT_MACRO(sub, -, long double)
+TVMET_IMPLEMENT_MACRO(mul, *, long double)
+TVMET_IMPLEMENT_MACRO(div, /, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(XprMatrix<E, Rows, Cols>, complex<>)
+ * operator(complex<>, XprMatrix<E, Rows, Cols>)
+ * Note: operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				\
+template<class E, std::size_t Rows, std::size_t Cols, class T>	\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,	\
+    XprMatrix<E, Rows, Cols>,					\
+    XprLiteral< std::complex<T> >				\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs,		\
+	     const std::complex<T>& rhs) {			\
+  return NAME (lhs, rhs);					\
+}								\
+								\
+template<class E, std::size_t Rows, std::size_t Cols, class T>	\
+inline								\
+XprMatrix<							\
+  XprBinOp<							\
+    Fcnl_##NAME<std::complex<T>, typename E::value_type>,	\
+    XprLiteral< std::complex<T> >,				\
+    XprMatrix<E, Rows, Cols>					\
+  >,								\
+  Rows, Cols							\
+>								\
+operator OP (const std::complex<T>& lhs,			\
+	     const XprMatrix<E, Rows, Cols>& rhs) {		\
+  return NAME (lhs, rhs);					\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)
+TVMET_IMPLEMENT_MACRO(sub, -)
+TVMET_IMPLEMENT_MACRO(mul, *)
+TVMET_IMPLEMENT_MACRO(div, /)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix specific operator*() = prod() operations
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn operator*(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs)
+ * \brief Evaluate the product of two XprMatrix.
+ * \ingroup _binary_operator
+ * \sa prod(XprMatrix<E1, Rows1, Cols1> lhs, XprMatrix<E2, Cols1, Cols2> rhs)
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>, Rows1, Cols1,	// M1(Rows1, Cols1)
+    XprMatrix<E2, Cols1, Cols2>, Cols2		// M2(Cols1, Cols2)
+  >,
+  Rows1, Cols2
+>
+operator*(const XprMatrix<E1, Rows1, Cols1>& lhs, const XprMatrix<E2, Cols1, Cols2>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * matrix-vector specific prod( ... ) operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn operator*(const XprMatrix<E1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs)
+ * \brief Evaluate the product of XprMatrix and XprVector.
+ * \ingroup _binary_operator
+ * \sa prod(XprMatrix<E1, Rows, Cols> lhs, XprVector<E2, Cols> rhs)
+ */
+template<class E1, std::size_t Rows, std::size_t Cols,
+	 class E2>
+inline
+XprVector<
+  XprMVProduct<
+    XprMatrix<E1, Rows, Cols>, Rows, Cols,
+    XprVector<E2, Cols>
+  >,
+  Rows
+>
+operator*(const XprMatrix<E1, Rows, Cols>& lhs, const XprVector<E2, Cols>& rhs) {
+  return prod(lhs, rhs);
+}
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Matrix integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(XprMatrix<>, XprMatrix<>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class E1, std::size_t Rows, std::size_t Cols,			\
+         class E2>							\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows, Cols>,						\
+    XprMatrix<E2, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const XprMatrix<E1, Rows, Cols>& lhs, 			\
+	     const XprMatrix<E2, Rows, Cols>& rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprMatrix<E1, Rows, Cols>,						\
+    XprMatrix<E2, Rows, Cols>						\
+  >		    					expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(lhs, rhs));		\
+}
+
+// integer operators only, e.g used on double you will get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^)
+  TVMET_IMPLEMENT_MACRO(bitand, &)
+  TVMET_IMPLEMENT_MACRO(bitor, |)
+  TVMET_IMPLEMENT_MACRO(shl, <<)
+  TVMET_IMPLEMENT_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(XprMatrix<E, Rows, Cols>, std::complex<>)
+ * operator(std::complex<>, XprMatrix<E, Rows, Cols>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class E, std::size_t Rows, std::size_t Cols, class T>		\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, 			\
+	     const std::complex<T>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs, XprLiteral< std::complex<T> >(rhs)));		\
+}									\
+									\
+template<class E, std::size_t Rows, std::size_t Cols, class T>		\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const std::complex<T>& lhs, 				\
+	     const XprMatrix<E, Rows, Cols>& rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprMatrix<E, Rows, Cols>						\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs));		\
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*
+ * operator(XprMatrix<E, Rows, Cols>, POD)
+ * operator(POD, XprMatrix<E, Rows, Cols>)
+ * Note: operations are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, TP)				\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< TP >							\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const XprMatrix<E, Rows, Cols>& lhs, TP rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprMatrix<E, Rows, Cols>,						\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(lhs, XprLiteral< TP >(rhs)));				\
+}									\
+									\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprBinOp<								\
+    Fcnl_##NAME<TP, typename E::value_type>,				\
+    XprLiteral< TP >,							\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (TP lhs, const XprMatrix<E, Rows, Cols>& rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< TP, typename E::value_type>,				\
+    XprLiteral< TP >,							\
+    XprMatrix<E, Rows, Cols>						\
+  >							expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(				\
+    expr_type(XprLiteral< TP >(lhs), rhs));				\
+}
+
+
+// integer operators only, e.g used on double you will get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, int)
+TVMET_IMPLEMENT_MACRO(less, <, int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, int)
+TVMET_IMPLEMENT_MACRO(eq, ==, int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, int)
+TVMET_IMPLEMENT_MACRO(and, &&, int)
+TVMET_IMPLEMENT_MACRO(or, ||, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, long long int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, long long int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, long long int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, long long int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, long long int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long long int)
+TVMET_IMPLEMENT_MACRO(less, <, long long int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long long int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long long int)
+TVMET_IMPLEMENT_MACRO(eq, ==, long long int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long long int)
+TVMET_IMPLEMENT_MACRO(and, &&, long long int)
+TVMET_IMPLEMENT_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, float)
+TVMET_IMPLEMENT_MACRO(less, <, float)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, float)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, float)
+TVMET_IMPLEMENT_MACRO(eq, ==, float)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, float)
+TVMET_IMPLEMENT_MACRO(and, &&, float)
+TVMET_IMPLEMENT_MACRO(or, ||, float)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, double)
+TVMET_IMPLEMENT_MACRO(less, <, double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, double)
+TVMET_IMPLEMENT_MACRO(eq, ==, double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, double)
+TVMET_IMPLEMENT_MACRO(and, &&, double)
+TVMET_IMPLEMENT_MACRO(or, ||, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long double)
+TVMET_IMPLEMENT_MACRO(less, <, long double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long double)
+TVMET_IMPLEMENT_MACRO(eq, ==, long double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long double)
+TVMET_IMPLEMENT_MACRO(and, &&, long double)
+TVMET_IMPLEMENT_MACRO(or, ||, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * unary_operator(const XprMatrix<E, Rows, Cols>& m)
+ * Note: per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprUnOp<								\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+operator OP (const XprMatrix<E, Rows, Cols>& m) {			\
+  typedef XprUnOp<							\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprMatrix<E, Rows, Cols>						\
+  >  							 expr_type;	\
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(m));		\
+}
+
+TVMET_IMPLEMENT_MACRO(not, !)
+TVMET_IMPLEMENT_MACRO(compl, ~)
+TVMET_IMPLEMENT_MACRO(neg, -)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MATRIX_OPERATORS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h
new file mode 100644
index 0000000..d79d8f4
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h
@@ -0,0 +1,95 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixRow.h,v 1.14 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_ROW_H
+#define TVMET_XPR_MATRIX_ROW_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprMatrixRow MatrixRow.h "tvmet/xpr/MatrixRow.h"
+ * \brief Expression on matrix used for access on the row vector.
+ */
+template<class E, std::size_t Rows, std::size_t Cols>
+class XprMatrixRow
+  : public TvmetBase< XprMatrixRow<E, Rows, Cols> >
+{
+  XprMatrixRow();
+  XprMatrixRow& operator=(const XprMatrixRow&);
+
+public:
+  typedef typename E::value_type			value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_expr  = E::ops,
+    ops       = ops_expr/Rows	// equal Col accesses
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMatrixRow(const E& e, std::size_t no)
+    : m_expr(e), m_row(no)
+  {
+    TVMET_RT_CONDITION(no < Rows, "XprMatrixRow Bounce Violation")
+  }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMatrixRow(const XprMatrixRow& rhs)
+    : m_expr(rhs.m_expr), m_row(rhs.m_row)
+  { }
+#endif
+
+  value_type operator()(std::size_t j) const {
+    TVMET_RT_CONDITION(j < Cols, "XprMatrixRow Bounce Violation")
+    return m_expr(m_row, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMatrixRow[O=" << ops << ", (O=" << ops_expr << ")]<"
+       << std::endl;
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R=" << Rows << ", C=" << Cols << std::endl
+       << IndentLevel(--l) << ">"
+       << ((l != 0) ? "," : "") << std::endl;
+  }
+
+private:
+  const E		 				m_expr;
+  const std::size_t					m_row;
+};
+
+
+}
+
+#endif // TVMET_XPR_MATRIX_ROW_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h
new file mode 100644
index 0000000..87d4b9c
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h
@@ -0,0 +1,88 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixTranspose.h,v 1.11 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_TRANSPOSE_H
+#define TVMET_XPR_MATRIX_TRANSPOSE_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprMatrixTranspose MatrixTranspose.h "tvmet/xpr/MatrixTranspose.h"
+ * \brief Expression for transpose matrix
+ */
+template<class E>
+class XprMatrixTranspose
+  : public TvmetBase< XprMatrixTranspose<E> >
+{
+  XprMatrixTranspose();
+  XprMatrixTranspose& operator=(const XprMatrixTranspose&);
+
+public:
+  typedef typename E::value_type			value_type;
+
+  /** Complexity counter. */
+  enum {
+    ops_expr  = E::ops,
+    ops       = 1 * ops_expr
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMatrixTranspose(const E& e)
+    : m_expr(e)
+  { }
+
+ /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMatrixTranspose(const XprMatrixTranspose& e)
+    : m_expr(e.m_expr)
+  { }
+#endif
+
+  /** index operator for arrays/matrices. This simple swap the index
+      access for transpose. */
+  value_type operator()(std::size_t i, std::size_t j) const { return m_expr(j, i); }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMatrixTranspose[O=" << ops << ", (O=" << ops_expr << ")]<"
+       << std::endl;
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E						m_expr;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MATRIX_TRANSPOSE_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixUnaryFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixUnaryFunctions.h
new file mode 100644
index 0000000..b36b436
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MatrixUnaryFunctions.h
@@ -0,0 +1,172 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MatrixUnaryFunctions.h,v 1.7 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MATRIX_UNARY_FUNCTIONS_H
+#define TVMET_XPR_MATRIX_UNARY_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*
+ * unary_function(XprMatrix<E, Rows, Cols>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class E, std::size_t Rows, std::size_t Cols>			\
+inline									\
+XprMatrix<								\
+  XprUnOp<								\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprMatrix<E, Rows, Cols>						\
+  >,									\
+  Rows, Cols								\
+>									\
+NAME(const XprMatrix<E, Rows, Cols>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(abs)
+TVMET_DECLARE_MACRO(cbrt)
+TVMET_DECLARE_MACRO(ceil)
+TVMET_DECLARE_MACRO(floor)
+TVMET_DECLARE_MACRO(rint)
+TVMET_DECLARE_MACRO(sin)
+TVMET_DECLARE_MACRO(cos)
+TVMET_DECLARE_MACRO(tan)
+TVMET_DECLARE_MACRO(sinh)
+TVMET_DECLARE_MACRO(cosh)
+TVMET_DECLARE_MACRO(tanh)
+TVMET_DECLARE_MACRO(asin)
+TVMET_DECLARE_MACRO(acos)
+TVMET_DECLARE_MACRO(atan)
+TVMET_DECLARE_MACRO(exp)
+TVMET_DECLARE_MACRO(log)
+TVMET_DECLARE_MACRO(log10)
+TVMET_DECLARE_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_DECLARE_MACRO(asinh)
+TVMET_DECLARE_MACRO(acosh)
+TVMET_DECLARE_MACRO(atanh)
+TVMET_DECLARE_MACRO(expm1)
+TVMET_DECLARE_MACRO(log1p)
+TVMET_DECLARE_MACRO(erf)
+TVMET_DECLARE_MACRO(erfc)
+TVMET_DECLARE_MACRO(j0)
+TVMET_DECLARE_MACRO(j1)
+TVMET_DECLARE_MACRO(y0)
+TVMET_DECLARE_MACRO(y1)
+TVMET_DECLARE_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_DECLARE_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_DECLARE_MACRO(isinf)
+#endif
+TVMET_DECLARE_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * unary_function(XprMatrix<E, Rows, Cols>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)				   \
+template<class E, std::size_t Rows, std::size_t Cols>		   \
+inline								   \
+XprMatrix<							   \
+  XprUnOp<							   \
+    Fcnl_##NAME<typename E::value_type>,			   \
+    XprMatrix<E, Rows, Cols>					   \
+  >,								   \
+  Rows, Cols							   \
+>								   \
+NAME(const XprMatrix<E, Rows, Cols>& rhs) {			   \
+  typedef XprUnOp<						   \
+    Fcnl_##NAME<typename E::value_type>,			   \
+    XprMatrix<E, Rows, Cols>					   \
+  > 							expr_type; \
+  return XprMatrix<expr_type, Rows, Cols>(expr_type(rhs));	   \
+}
+
+TVMET_IMPLEMENT_MACRO(abs)
+TVMET_IMPLEMENT_MACRO(cbrt)
+TVMET_IMPLEMENT_MACRO(ceil)
+TVMET_IMPLEMENT_MACRO(floor)
+TVMET_IMPLEMENT_MACRO(rint)
+TVMET_IMPLEMENT_MACRO(sin)
+TVMET_IMPLEMENT_MACRO(cos)
+TVMET_IMPLEMENT_MACRO(tan)
+TVMET_IMPLEMENT_MACRO(sinh)
+TVMET_IMPLEMENT_MACRO(cosh)
+TVMET_IMPLEMENT_MACRO(tanh)
+TVMET_IMPLEMENT_MACRO(asin)
+TVMET_IMPLEMENT_MACRO(acos)
+TVMET_IMPLEMENT_MACRO(atan)
+TVMET_IMPLEMENT_MACRO(exp)
+TVMET_IMPLEMENT_MACRO(log)
+TVMET_IMPLEMENT_MACRO(log10)
+TVMET_IMPLEMENT_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_IMPLEMENT_MACRO(asinh)
+TVMET_IMPLEMENT_MACRO(acosh)
+TVMET_IMPLEMENT_MACRO(atanh)
+TVMET_IMPLEMENT_MACRO(expm1)
+TVMET_IMPLEMENT_MACRO(log1p)
+TVMET_IMPLEMENT_MACRO(erf)
+TVMET_IMPLEMENT_MACRO(erfc)
+TVMET_IMPLEMENT_MACRO(j0)
+TVMET_IMPLEMENT_MACRO(j1)
+TVMET_IMPLEMENT_MACRO(y0)
+TVMET_IMPLEMENT_MACRO(y1)
+TVMET_IMPLEMENT_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_IMPLEMENT_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_IMPLEMENT_MACRO(isinf)
+#endif
+TVMET_IMPLEMENT_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MATRIX_UNARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h
new file mode 100644
index 0000000..e462b0b
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h
@@ -0,0 +1,138 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MtMProduct.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MTMPRODUCT_H
+#define TVMET_XPR_MTMPRODUCT_H
+
+#include <tvmet/meta/Gemtm.h>
+#include <tvmet/loop/Gemtm.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprMtMProduct MtMProduct.h "tvmet/xpr/MtMProduct.h"
+ * \brief Expression for product of transposed(matrix)-matrix product.
+ *        using formula
+ *        \f[
+ *        M_1^{T}\,M_2
+ *        \f]
+ * \note The number of rows of rhs matrix have to be equal rows of rhs matrix,
+ *       since lhs matrix 1 is transposed.
+ *       The result is a (Cols1 x Cols2) matrix.
+ */
+template<class E1, std::size_t Rows1, std::size_t Cols1,
+	 class E2, std::size_t Cols2>
+class XprMtMProduct
+  : public TvmetBase< XprMtMProduct<E1, Rows1, Cols1, E2, Cols2> >
+{
+private:
+  XprMtMProduct();
+  XprMtMProduct& operator=(const XprMtMProduct&);
+
+public:
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type							value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    M = Rows1 * Cols1 * Cols2,
+    N = (Rows1-1) * Cols1 * Cols2,
+    ops_plus  = M * NumericTraits<value_type>::ops_plus,
+    ops_muls  = N * NumericTraits<value_type>::ops_muls,
+    ops       = ops_plus + ops_muls,
+    use_meta  = Cols1*Cols2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMtMProduct(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMtMProduct(const XprMtMProduct& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs) { }
+#endif
+
+private:
+  /** Wrapper for meta gemm. */
+  static inline
+  value_type do_gemtm(dispatch<true>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return meta::gemtm<Rows1, Cols1,
+                       Cols2,
+                       0>::prod(lhs, rhs, i, j);
+  }
+
+  /** Wrapper for loop gemm. */
+  static inline
+  value_type do_gemtm(dispatch<false>, const E1& lhs, const E2& rhs, std::size_t i, std::size_t j) {
+    return loop::gemtm<Rows1, Cols1,
+	               Cols2>::prod(lhs, rhs, i, j);
+  }
+
+public:
+  /** index operator for arrays/matrices */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    TVMET_RT_CONDITION((i < Cols1) && (j < Cols2), "XprMtMProduct Bounce Violation")
+    return do_gemtm(dispatch<use_meta>(), m_lhs, m_rhs, i, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMtMProduct["
+       << (use_meta ? "M" :  "L") << ", O=" << ops
+       << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    m_lhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n";
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "C2=" << Cols2 << ",\n"
+       << IndentLevel(l)
+       << "\n"
+       << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1							m_lhs;
+  const E2							m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MTMPRODUCT_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h
new file mode 100644
index 0000000..b33ffd2
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h
@@ -0,0 +1,127 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: MtVProduct.h,v 1.10 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_MTVPRODUCT_H
+#define TVMET_XPR_MTVPRODUCT_H
+
+#include <tvmet/meta/Gemtv.h>
+#include <tvmet/loop/Gemtv.h>
+
+namespace tvmet {
+
+
+/**
+ * \class XprMtVProduct MtVProduct.h "tvmet/xpr/MtVProduct.h"
+ * \brief Expression for matrix-transposed vector product
+ *        using formula
+ *        \f[
+ *        M^T\,v
+ *        \f]
+ */
+template<class E1, std::size_t Rows, std::size_t Cols,
+	 class E2>
+class XprMtVProduct
+  : public TvmetBase< XprMtVProduct<E1, Rows, Cols, E2> >
+{
+  XprMtVProduct();
+  XprMtVProduct& operator=(const XprMtVProduct&);
+
+public:
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type							value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_lhs   = E1::ops,
+    ops_rhs   = E2::ops,
+    M         = Cols * Rows,
+    N         = Cols * (Rows - 1),
+    ops_plus  = M * NumericTraits<value_type>::ops_plus,
+    ops_muls  = N * NumericTraits<value_type>::ops_muls,
+    ops       = ops_plus + ops_muls,
+    use_meta  = Rows*Cols < TVMET_COMPLEXITY_MV_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprMtVProduct(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprMtVProduct(const XprMtVProduct& e)
+    : m_lhs(e.m_lhs), m_rhs(e.m_rhs)
+  { }
+#endif
+
+private:
+  /** Wrapper for meta gemm. */
+  static inline
+  value_type do_gemtv(dispatch<true>, const E1& lhs, const E2& rhs, std::size_t i) {
+    return meta::gemtv<Rows, Cols, 0>::prod(lhs, rhs, i);
+  }
+
+  /** Wrapper for loop gemm. */
+  static inline
+  value_type do_gemtv(dispatch<false>, const E1& lhs, const E2& rhs, std::size_t i) {
+    return loop::gemtv<Rows, Cols>::prod(lhs, rhs, i);
+  }
+
+public:
+  /** index operator, returns the expression by index. This is the vector
+      style since a matrix*vector gives a vector. */
+  value_type operator()(std::size_t j) const {
+    TVMET_RT_CONDITION(j < Cols , "XprMtVProduct Bounce Violation")
+    return do_gemtv(dispatch<use_meta>(), m_lhs, m_rhs, j);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprMtVProduct[O=" << ops << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<"
+       << std::endl;
+    m_lhs.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "R=" << Rows << ", C=" << Cols << ",\n";
+    m_rhs.print_xpr(os, l);
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E1							m_lhs;
+  const E2							m_rhs;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_MTVPRODUCT_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Null.h b/tvmet-1.7.1/include/tvmet/xpr/Null.h
new file mode 100644
index 0000000..2a752fb
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Null.h
@@ -0,0 +1,68 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Null.h,v 1.7 2003/11/30 18:35:17 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_NULL_H
+#define TVMET_XPR_NULL_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprNull Null.h "tvmet/xpr/Null.h"
+ * \brief Null object design pattern
+ */
+class XprNull
+  : public TvmetBase< XprNull >
+{
+  XprNull& operator=(const XprNull&);
+
+public:
+  explicit XprNull() { }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l) << "XprNull[O=0]" << std::endl;
+  }
+};
+
+
+#define TVMET_BINARY_OPERATOR(OP)                   			\
+template< class T >                    					\
+inline                     						\
+T operator OP (const T& lhs, XprNull) { return lhs; }
+
+TVMET_BINARY_OPERATOR(+)
+TVMET_BINARY_OPERATOR(-)
+TVMET_BINARY_OPERATOR(*)
+TVMET_BINARY_OPERATOR(/)
+
+#undef TVMET_BINARY_OPERATOR
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_NULL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/UnOperator.h b/tvmet-1.7.1/include/tvmet/xpr/UnOperator.h
new file mode 100644
index 0000000..a6b50ee
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/UnOperator.h
@@ -0,0 +1,98 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: UnOperator.h,v 1.13 2003/11/30 18:35:17 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_UNOPERATOR_H
+#define TVMET_XPR_UNOPERATOR_H
+
+namespace tvmet {
+
+
+/**
+ * \class XprUnOp UnOperator.h "tvmet/xpr/UnOperator.h"
+ * \brief Unary operator working on one subexpression.
+ *
+ * Using the access operator() the unary operation will be evaluated.
+ */
+template<class UnOp, class E>
+class XprUnOp
+  : public TvmetBase< XprUnOp<UnOp, E> >
+{
+  XprUnOp();
+  XprUnOp& operator=(const XprUnOp&);
+
+public:
+  typedef typename UnOp::value_type				value_type;
+
+public:
+  /** Complexity counter. */
+  enum {
+    ops_expr  = E::ops,
+    ops       = 1 * ops_expr
+  };
+
+public:
+  /** Constructor for an expressions. */
+  explicit XprUnOp(const E& e)
+    : m_expr(e)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprUnOp(const XprUnOp& e)
+    : m_expr(e.m_expr)
+  { }
+#endif
+
+  /** Index operator, evaluates the expression inside. */
+  value_type operator()(std::size_t i) const {
+    return UnOp::apply_on(m_expr(i));
+  }
+
+  /** index operator for arrays/matrices. */
+  value_type operator()(std::size_t i, std::size_t j) const {
+    return UnOp::apply_on(m_expr(i, j));
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprUnOp[O="<< ops << ", (O=" << ops_expr << ")]<"
+       << std::endl;
+    UnOp::print_xpr(os, l);
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(--l)
+       << ">," << std::endl;
+  }
+
+private:
+  const E							m_expr;
+};
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_UNOPERATOR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/Vector.h b/tvmet-1.7.1/include/tvmet/xpr/Vector.h
new file mode 100644
index 0000000..b3c2e9a
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/Vector.h
@@ -0,0 +1,156 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: Vector.h,v 1.24 2004/09/16 09:14:18 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_VECTOR_H
+#define TVMET_XPR_VECTOR_H
+
+#include <tvmet/meta/Vector.h>
+#include <tvmet/loop/Vector.h>
+
+namespace tvmet {
+
+
+/* forwards */
+template <class T, std::size_t Sz> class Vector;
+
+/**
+ * \class XprVector Vector.h "tvmet/xpr/Vector.h"
+ * \brief Represents the expression for vectors at any node in the parse tree.
+ *
+ * Specifically, XprVector is the class that wraps the expression, and the
+ * expression itself is represented by the template parameter E. The
+ * class XprVector is known as an anonymizing expression wrapper because
+ * it can hold any subexpression of arbitrary complexity, allowing
+ * clients to work with any expression by holding on to it via the
+ * wrapper, without having to know the name of the type object that
+ * actually implements the expression.
+ * \note leave the Ctors non-explicit to allow implicit type conversation.
+ */
+template<class E, std::size_t Sz>
+class XprVector : public TvmetBase< XprVector<E, Sz> >
+{
+  XprVector();
+  XprVector& operator=(const XprVector&);
+
+public:
+  typedef typename E::value_type			value_type;
+
+public:
+  /** Dimensions. */
+  enum {
+    Size = Sz			/**< The size of the vector. */
+  };
+
+public:
+  /** Complexity counter */
+  enum {
+    ops_assign = Size,
+    ops        = E::ops,
+    use_meta   = ops_assign < TVMET_COMPLEXITY_V_ASSIGN_TRIGGER ? true : false
+  };
+
+public:
+  /** Constructor. */
+  explicit XprVector(const E& e)
+    : m_expr(e)
+  { }
+
+  /** Copy Constructor. Not explicit! */
+#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR)
+  XprVector(const XprVector& e)
+    : m_expr(e.m_expr)
+  { }
+#endif
+
+ /** const index operator for vectors. */
+  value_type operator()(std::size_t i) const {
+    TVMET_RT_CONDITION(i < Size, "XprVector Bounce Violation")
+    return m_expr(i);
+  }
+
+  /** const index operator for vectors. */
+  value_type operator[](std::size_t i) const {
+    return this->operator()(i);
+  }
+
+private:
+  /** Wrapper for meta assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<true>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    meta::Vector<Size, 0>::assign(dest, src, assign_fn);
+  }
+
+  /** Wrapper for loop assign. */
+  template<class Dest, class Src, class Assign>
+  static inline
+  void do_assign(dispatch<false>, Dest& dest, const Src& src, const Assign& assign_fn) {
+    loop::Vector<Size>::assign(dest, src, assign_fn);
+  }
+
+public:
+  /** assign this expression to Vector dest. */
+  template<class Dest, class Assign>
+  void assign_to(Dest& dest, const Assign& assign_fn) const {
+    /* here is a way for caching, since each complex 'Node'
+       is of type XprVector. */
+    do_assign(dispatch<use_meta>(), dest, *this, assign_fn);
+  }
+
+public: // debugging Xpr parse tree
+  void print_xpr(std::ostream& os, std::size_t l=0) const {
+    os << IndentLevel(l++)
+       << "XprVector["
+       << (use_meta ? "M" :  "L") << ", O=" << ops << "]<"
+       << std::endl;
+    m_expr.print_xpr(os, l);
+    os << IndentLevel(l)
+       << "Sz=" << Size << std::endl;
+    os << IndentLevel(--l) << ">"
+       << ((l != 0) ? "," : "") << std::endl;
+  }
+
+private:
+  const E						m_expr;
+};
+
+
+} // namespace tvmet
+
+#include <tvmet/Functional.h>
+
+#include <tvmet/xpr/BinOperator.h>
+#include <tvmet/xpr/UnOperator.h>
+#include <tvmet/xpr/Literal.h>
+
+#include <tvmet/xpr/VectorFunctions.h>
+#include <tvmet/xpr/VectorBinaryFunctions.h>
+#include <tvmet/xpr/VectorUnaryFunctions.h>
+#include <tvmet/xpr/VectorOperators.h>
+#include <tvmet/xpr/Eval.h>
+
+#endif // TVMET_XPR_VECTOR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/VectorBinaryFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/VectorBinaryFunctions.h
new file mode 100644
index 0000000..1f39adf
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/VectorBinaryFunctions.h
@@ -0,0 +1,319 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorBinaryFunctions.h,v 1.8 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_VECTOR_BINARY_FUNCTIONS_H
+#define TVMET_XPR_VECTOR_BINARY_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*
+ * binary_function(XprVector<E1, Sz>, XprVector<E2, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME(const XprVector<E1, Sz>& lhs, 					\
+     const XprVector<E2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2)
+TVMET_DECLARE_MACRO(drem)
+TVMET_DECLARE_MACRO(fmod)
+TVMET_DECLARE_MACRO(hypot)
+TVMET_DECLARE_MACRO(jn)
+TVMET_DECLARE_MACRO(yn)
+TVMET_DECLARE_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_DECLARE_MACRO(polar)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * binary_function(XprVector<E, Sz>, POD)
+ */
+#define TVMET_DECLARE_MACRO(NAME, TP)		\
+template<class E, std::size_t Sz>		\
+inline						\
+XprVector<					\
+  XprBinOp<					\
+    Fcnl_##NAME<typename E::value_type, TP >,	\
+    XprVector<E, Sz>,				\
+    XprLiteral< TP >				\
+  >,						\
+  Sz						\
+>						\
+NAME(const XprVector<E, Sz>& lhs, 		\
+     TP rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2, int)
+TVMET_DECLARE_MACRO(drem, int)
+TVMET_DECLARE_MACRO(fmod, int)
+TVMET_DECLARE_MACRO(hypot, int)
+TVMET_DECLARE_MACRO(jn, int)
+TVMET_DECLARE_MACRO(yn, int)
+TVMET_DECLARE_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(atan2, long long int)
+TVMET_DECLARE_MACRO(drem, long long int)
+TVMET_DECLARE_MACRO(fmod, long long int)
+TVMET_DECLARE_MACRO(hypot, long long int)
+TVMET_DECLARE_MACRO(jn, long long int)
+TVMET_DECLARE_MACRO(yn, long long int)
+TVMET_DECLARE_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_DECLARE_MACRO(atan2, float)
+TVMET_DECLARE_MACRO(drem, float)
+TVMET_DECLARE_MACRO(fmod, float)
+TVMET_DECLARE_MACRO(hypot, float)
+TVMET_DECLARE_MACRO(jn, float)
+TVMET_DECLARE_MACRO(yn, float)
+TVMET_DECLARE_MACRO(pow, float)
+
+TVMET_DECLARE_MACRO(atan2, double)
+TVMET_DECLARE_MACRO(drem, double)
+TVMET_DECLARE_MACRO(fmod, double)
+TVMET_DECLARE_MACRO(hypot, double)
+TVMET_DECLARE_MACRO(jn, double)
+TVMET_DECLARE_MACRO(yn, double)
+TVMET_DECLARE_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(atan2, long double)
+TVMET_DECLARE_MACRO(drem, long double)
+TVMET_DECLARE_MACRO(fmod, long double)
+TVMET_DECLARE_MACRO(hypot, long double)
+TVMET_DECLARE_MACRO(jn, long double)
+TVMET_DECLARE_MACRO(yn, long double)
+TVMET_DECLARE_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * binary_function(XprVector<E, Sz>, std::complex<>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class E, std::size_t Sz, class T>			\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,	\
+    XprVector<E, Sz>,						\
+    XprLiteral< std::complex<T> >				\
+  >,								\
+  Sz								\
+>								\
+NAME(const XprVector<E, Sz>& lhs, 				\
+     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(atan2)
+TVMET_DECLARE_MACRO(drem)
+TVMET_DECLARE_MACRO(fmod)
+TVMET_DECLARE_MACRO(hypot)
+TVMET_DECLARE_MACRO(jn)
+TVMET_DECLARE_MACRO(yn)
+TVMET_DECLARE_MACRO(pow)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * binary_function(XprVector<E1, Sz>, XprVector<E2, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >		    					expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, rhs));						\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+TVMET_IMPLEMENT_MACRO(pow)
+#if defined(TVMET_HAVE_COMPLEX)
+TVMET_IMPLEMENT_MACRO(polar)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * binary_function(XprVector<E, Sz>, POD)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, TP)					\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< TP >							\
+  >,									\
+  Sz									\
+>									\
+NAME(const XprVector<E, Sz>& lhs, TP rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, XprLiteral< TP >(rhs)));				\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2, int)
+TVMET_IMPLEMENT_MACRO(drem, int)
+TVMET_IMPLEMENT_MACRO(fmod, int)
+TVMET_IMPLEMENT_MACRO(hypot, int)
+TVMET_IMPLEMENT_MACRO(jn, int)
+TVMET_IMPLEMENT_MACRO(yn, int)
+TVMET_IMPLEMENT_MACRO(pow, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(atan2, long long int)
+TVMET_IMPLEMENT_MACRO(drem, long long int)
+TVMET_IMPLEMENT_MACRO(fmod, long long int)
+TVMET_IMPLEMENT_MACRO(hypot, long long int)
+TVMET_IMPLEMENT_MACRO(jn, long long int)
+TVMET_IMPLEMENT_MACRO(yn, long long int)
+TVMET_IMPLEMENT_MACRO(pow, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+TVMET_IMPLEMENT_MACRO(atan2, float)
+TVMET_IMPLEMENT_MACRO(drem, float)
+TVMET_IMPLEMENT_MACRO(fmod, float)
+TVMET_IMPLEMENT_MACRO(hypot, float)
+TVMET_IMPLEMENT_MACRO(jn, float)
+TVMET_IMPLEMENT_MACRO(yn, float)
+TVMET_IMPLEMENT_MACRO(pow, float)
+
+TVMET_IMPLEMENT_MACRO(atan2, double)
+TVMET_IMPLEMENT_MACRO(drem, double)
+TVMET_IMPLEMENT_MACRO(fmod, double)
+TVMET_IMPLEMENT_MACRO(hypot, double)
+TVMET_IMPLEMENT_MACRO(jn, double)
+TVMET_IMPLEMENT_MACRO(yn, double)
+TVMET_IMPLEMENT_MACRO(pow, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(atan2, long double)
+TVMET_IMPLEMENT_MACRO(drem, long double)
+TVMET_IMPLEMENT_MACRO(fmod, long double)
+TVMET_IMPLEMENT_MACRO(hypot, long double)
+TVMET_IMPLEMENT_MACRO(jn, long double)
+TVMET_IMPLEMENT_MACRO(yn, long double)
+TVMET_IMPLEMENT_MACRO(pow, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * binary_function(XprVector<E, Sz>, std::complex<>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Sz									\
+>									\
+NAME(const XprVector<E, Sz>& lhs, const std::complex<T>& rhs) {		\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, XprLiteral< std::complex<T> >(rhs)));		\
+}
+
+TVMET_IMPLEMENT_MACRO(atan2)
+TVMET_IMPLEMENT_MACRO(drem)
+TVMET_IMPLEMENT_MACRO(fmod)
+TVMET_IMPLEMENT_MACRO(hypot)
+TVMET_IMPLEMENT_MACRO(jn)
+TVMET_IMPLEMENT_MACRO(yn)
+TVMET_IMPLEMENT_MACRO(pow)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_VECTOR_BINARY_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h
new file mode 100644
index 0000000..c4516cd
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h
@@ -0,0 +1,683 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorFunctions.h,v 1.17 2005/03/25 07:11:29 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_VECTOR_FUNCTIONS_H
+#define TVMET_XPR_VECTOR_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/* forwards */
+template<class T, std::size_t Sz> class Vector;
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic functions add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * function(XprVector<E1, Sz>, XprVector<E2, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)					\
+template<class E1, class E2, std::size_t Sz>				\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME (const XprVector<E1, Sz>& lhs,					\
+      const XprVector<E2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)		// per se element wise
+TVMET_DECLARE_MACRO(sub)		// per se element wise
+TVMET_DECLARE_MACRO(mul)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(div)		// not defined for vectors
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * function(XprVector<E, Sz>, POD)
+ * function(POD, XprVector<E, Sz>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, POD)				\
+template<class E, std::size_t Sz>				\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< typename E::value_type, POD >,			\
+    XprVector<E, Sz>,						\
+    XprLiteral< POD >						\
+  >,								\
+  Sz								\
+>								\
+NAME (const XprVector<E, Sz>& lhs, 				\
+      POD rhs) TVMET_CXX_ALWAYS_INLINE;				\
+								\
+template<class E, std::size_t Sz>				\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< POD, typename E::value_type>,			\
+    XprLiteral< POD >,						\
+    XprVector<E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+NAME (POD lhs, 							\
+      const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, int)
+TVMET_DECLARE_MACRO(sub, int)
+TVMET_DECLARE_MACRO(mul, int)
+TVMET_DECLARE_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, long long int)
+TVMET_DECLARE_MACRO(sub, long long int)
+TVMET_DECLARE_MACRO(mul, long long int)
+TVMET_DECLARE_MACRO(div, long long int)
+#endif
+
+TVMET_DECLARE_MACRO(add, float)
+TVMET_DECLARE_MACRO(sub, float)
+TVMET_DECLARE_MACRO(mul, float)
+TVMET_DECLARE_MACRO(div, float)
+
+TVMET_DECLARE_MACRO(add, double)
+TVMET_DECLARE_MACRO(sub, double)
+TVMET_DECLARE_MACRO(mul, double)
+TVMET_DECLARE_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, long double)
+TVMET_DECLARE_MACRO(sub, long double)
+TVMET_DECLARE_MACRO(mul, long double)
+TVMET_DECLARE_MACRO(div, long double)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(XprMatrix<E, Rows, Cols>, complex<T>)
+ * function(complex<T>, XprMatrix<E, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class E, std::size_t Sz, class T>			\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< typename E::value_type, std::complex<T> >,	\
+    XprVector<E, Sz>,						\
+    XprLiteral< std::complex<T> >				\
+  >,								\
+  Sz								\
+>								\
+NAME (const XprVector<E, Sz>& lhs,				\
+      const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+								\
+template<class E, std::size_t Sz, class T>			\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,	\
+    XprLiteral< std::complex<T> >,				\
+    XprVector<E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+NAME (const std::complex<T>& lhs, 				\
+      const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add)
+TVMET_DECLARE_MACRO(sub)
+TVMET_DECLARE_MACRO(mul)
+TVMET_DECLARE_MACRO(div)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * vector specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+template<class E, std::size_t Sz>
+typename NumericTraits<typename E::value_type>::sum_type
+sum(const XprVector<E, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+typename NumericTraits<typename E::value_type>::sum_type
+product(const XprVector<E, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, class E2, std::size_t Sz>
+typename PromoteTraits<
+  typename E1::value_type,
+  typename E2::value_type
+>::value_type
+dot(const XprVector<E1, Sz>& lhs,
+    const XprVector<E2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, class E, std::size_t Sz>
+typename PromoteTraits<T, typename E::value_type>::value_type
+dot(const Vector<T, Sz>& lhs,
+    const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, class T, std::size_t Sz>
+typename PromoteTraits<T, typename E::value_type>::value_type
+dot(const XprVector<E, Sz>& lhs,
+    const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E1, class E2>
+Vector<
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type,
+  3
+>
+cross(const XprVector<E1, 3>& lhs,
+      const XprVector<E2, 3>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class T, class E>
+Vector<
+  typename PromoteTraits<T, typename E::value_type>::value_type, 3>
+cross(const Vector<T, 3>& lhs,
+      const XprVector<E, 3>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, class T>
+Vector<
+  typename PromoteTraits<T, typename E::value_type>::value_type, 3>
+cross(const XprVector<E, 3>& lhs,
+      const Vector<T, 3>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+typename NumericTraits<typename E::value_type>::sum_type
+norm1(const XprVector<E, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+typename NumericTraits<typename E::value_type>::sum_type
+norm2(const XprVector<E, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+template<class E, std::size_t Sz>
+XprVector<
+  XprBinOp<
+    Fcnl_div<typename E::value_type, typename E::value_type>,
+    XprVector<E, Sz>,
+    XprLiteral<typename E::value_type>
+  >,
+  Sz
+>
+normalize(const XprVector<E, Sz>& v) TVMET_CXX_ALWAYS_INLINE;
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * function(XprVector<E1, Sz>, XprVector<E2, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME (const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  > 							 expr_type;	\
+  return XprVector<expr_type, Sz>(expr_type(lhs, rhs));			\
+}
+
+TVMET_IMPLEMENT_MACRO(add)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(div)		// not defined for vectors
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * function(XprVector<E, Sz>, POD)
+ * function(POD, XprVector<E, Sz>)
+ * Note: - operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, POD)				\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< typename E::value_type, POD >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< POD >							\
+  >,									\
+  Sz									\
+>									\
+NAME (const XprVector<E, Sz>& lhs, POD rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< typename E::value_type, POD >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< POD >							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, XprLiteral< POD >(rhs)));				\
+}									\
+									\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, typename E::value_type>,				\
+    XprLiteral< POD >,							\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME (POD lhs, const XprVector<E, Sz>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< POD, typename E::value_type>,				\
+    XprLiteral< POD >,							\
+    XprVector<E, Sz>							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(XprLiteral< POD >(lhs), rhs));				\
+}
+
+TVMET_IMPLEMENT_MACRO(add, int)
+TVMET_IMPLEMENT_MACRO(sub, int)
+TVMET_IMPLEMENT_MACRO(mul, int)
+TVMET_IMPLEMENT_MACRO(div, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, long long int)
+TVMET_IMPLEMENT_MACRO(sub, long long int)
+TVMET_IMPLEMENT_MACRO(mul, long long int)
+TVMET_IMPLEMENT_MACRO(div, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(add, float)
+TVMET_IMPLEMENT_MACRO(sub, float)
+TVMET_IMPLEMENT_MACRO(mul, float)
+TVMET_IMPLEMENT_MACRO(div, float)
+
+TVMET_IMPLEMENT_MACRO(add, double)
+TVMET_IMPLEMENT_MACRO(sub, double)
+TVMET_IMPLEMENT_MACRO(mul, double)
+TVMET_IMPLEMENT_MACRO(div, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, long double)
+TVMET_IMPLEMENT_MACRO(sub, long double)
+TVMET_IMPLEMENT_MACRO(mul, long double)
+TVMET_IMPLEMENT_MACRO(div, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * function(XprMatrix<E, Rows, Cols>, complex<T>)
+ * function(complex<T>, XprMatrix<E, Rows, Cols>)
+ * Note: - operations +,-,*,/ are per se element wise
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)				   \
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Sz									\
+>									\
+NAME (const XprVector<E, Sz>& lhs, const std::complex<T>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, XprLiteral< std::complex<T> >(rhs)));		\
+}									\
+									\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME (const std::complex<T>& lhs, const XprVector<E, Sz>& rhs) {	\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprVector<E, Sz>							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs));		\
+}
+
+TVMET_IMPLEMENT_MACRO(add)
+TVMET_IMPLEMENT_MACRO(sub)
+TVMET_IMPLEMENT_MACRO(mul)
+TVMET_IMPLEMENT_MACRO(div)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * vector specific functions
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/**
+ * \fn sum(const XprVector<E, Sz>& v)
+ * \brief Compute the sum of the vector expression.
+ * \ingroup _unary_function
+ *
+ * Simply compute the sum of the given vector as:
+ * \f[
+ * \sum_{i = 0}^{Sz-1} v[i]
+ * \f]
+ */
+template<class E, std::size_t Sz>
+inline
+typename NumericTraits<typename E::value_type>::sum_type
+sum(const XprVector<E, Sz>& v) {
+  return meta::Vector<Sz>::sum(v);
+}
+
+
+/**
+ * \fn product(const XprVector<E, Sz>& v)
+ * \brief Compute the product of the vector elements.
+ * \ingroup _unary_function
+ *
+ * Simply computer the product of the given vector expression as:
+ * \f[
+ * \prod_{i = 0}^{Sz - 1} v[i]
+ * \f]
+ */
+template<class E, std::size_t Sz>
+inline
+typename NumericTraits<typename E::value_type>::sum_type
+product(const XprVector<E, Sz>& v) {
+  return meta::Vector<Sz>::product(v);
+}
+
+
+/**
+ * \fn dot(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs)
+ * \brief Compute the dot/inner product
+ * \ingroup _binary_function
+ *
+ * Compute the dot product as:
+ * \f[
+ * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] )
+ * \f]
+ * where lhs is a column vector and rhs is a row vector, both vectors
+ * have the same dimension.
+ */
+template<class E1, class E2, std::size_t Sz>
+inline
+typename PromoteTraits<
+  typename E1::value_type,
+  typename E2::value_type
+>::value_type
+dot(const XprVector<E1, Sz>& lhs, const XprVector<E2, Sz>& rhs) {
+  return meta::Vector<Sz>::dot(lhs, rhs);
+}
+
+
+/**
+ * \fn dot(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs)
+ * \brief Compute the dot/inner product
+ * \ingroup _binary_function
+ *
+ * Compute the dot product as:
+ * \f[
+ * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] )
+ * \f]
+ * where lhs is a column vector and rhs is a row vector, both vectors
+ * have the same dimension.
+ */
+template<class T, class E, std::size_t Sz>
+inline
+typename PromoteTraits<T, typename E::value_type>::value_type
+dot(const Vector<T, Sz>& lhs, const XprVector<E, Sz>& rhs) {
+  return meta::Vector<Sz>::dot(lhs, rhs);
+}
+
+
+/**
+ * \fn dot(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs)
+ * \brief Compute the dot/inner product
+ * \ingroup _binary_function
+ *
+ * Compute the dot product as:
+ * \f[
+ * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] )
+ * \f]
+ * where lhs is a column vector and rhs is a row vector, both vectors
+ * have the same dimension.
+ */
+template<class E, class T, std::size_t Sz>
+inline
+typename PromoteTraits<T, typename E::value_type>::value_type
+dot(const XprVector<E, Sz>& lhs, const Vector<T, Sz>& rhs) {
+  return meta::Vector<Sz>::dot(lhs, rhs);
+}
+
+
+/**
+ * \fn cross(const XprVector<E1, 3>& lhs, const XprVector<E2, 3>& rhs)
+ * \brief Compute the cross/outer product
+ * \ingroup _binary_function
+ * \note working only for vectors of size = 3
+ * \todo Implement vector outer product as ET and MT, returning a XprVector
+ */
+template<class E1, class E2>
+inline
+Vector<
+  typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type,
+  3
+>
+cross(const XprVector<E1, 3>& lhs, const XprVector<E2, 3>& rhs) {
+  typedef typename PromoteTraits<
+    typename E1::value_type,
+    typename E2::value_type
+  >::value_type						value_type;
+  return Vector<value_type, 3>(lhs(1)*rhs(2) - rhs(1)*lhs(2),
+			       rhs(0)*lhs(2) - lhs(0)*rhs(2),
+			       lhs(0)*rhs(1) - rhs(0)*lhs(1));
+}
+
+
+/**
+ * \fn cross(const XprVector<E, 3>& lhs, const Vector<T, 3>& rhs)
+ * \brief Compute the cross/outer product
+ * \ingroup _binary_function
+ * \note working only for vectors of size = 3
+ * \todo Implement vector outer product as ET and MT, returning a XprVector
+ */
+template<class E, class T>
+inline
+Vector<
+  typename PromoteTraits<T, typename E::value_type>::value_type, 3>
+cross(const XprVector<E, 3>& lhs, const Vector<T, 3>& rhs) {
+  typedef typename PromoteTraits<
+    typename E::value_type, T>::value_type 		value_type;
+  return Vector<value_type, 3>(lhs(1)*rhs(2) - rhs(1)*lhs(2),
+			       rhs(0)*lhs(2) - lhs(0)*rhs(2),
+			       lhs(0)*rhs(1) - rhs(0)*lhs(1));
+}
+
+
+/**
+ * \fn cross(const Vector<T, 3>& lhs, const XprVector<E, 3>& rhs)
+ * \brief Compute the cross/outer product
+ * \ingroup _binary_function
+ * \note working only for vectors of size = 3
+ * \todo Implement vector outer product as ET and MT, returning a XprVector
+ */
+template<class T1, class E2>
+inline
+Vector<
+  typename PromoteTraits<T1, typename E2::value_type>::value_type, 3>
+cross(const Vector<T1, 3>& lhs, const XprVector<E2, 3>& rhs) {
+  typedef typename PromoteTraits<
+    typename E2::value_type, T1>::value_type 		value_type;
+  return Vector<value_type, 3>(lhs(1)*rhs(2) - rhs(1)*lhs(2),
+			       rhs(0)*lhs(2) - lhs(0)*rhs(2),
+			       lhs(0)*rhs(1) - rhs(0)*lhs(1));
+}
+
+
+/**
+ * \fn norm1(const XprVector<E, Sz>& v)
+ * \brief The \f$l_1\f$ norm of a vector expression.
+ * \ingroup _unary_function
+ * The norm of any vector is just the square root of the dot product of
+ * a vector with itself, or
+ *
+ * \f[
+ * |Vector<T, Sz> v| = |v| = \sum_{i=0}^{Sz-1}\,|v[i]|
+ * \f]
+ */
+template<class E, std::size_t Sz>
+inline
+typename NumericTraits<typename E::value_type>::sum_type
+norm1(const XprVector<E, Sz>& v) {
+  return sum(abs(v));
+}
+
+
+/**
+ * \fn norm2(const XprVector<E, Sz>& v)
+ * \brief The euklidian norm (or \f$l_2\f$ norm) of a vector expression.
+ * \ingroup _unary_function
+ * The norm of any vector is just the square root of the dot product of
+ * a vector with itself, or
+ *
+ * \f[
+ * |Vector<T, Sz> v| = |v| = \sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 }
+ * \f]
+ *
+ * \note The internal cast for Vector<int> avoids warnings on sqrt.
+ */
+template<class E, std::size_t Sz>
+inline
+typename NumericTraits<typename E::value_type>::sum_type
+norm2(const XprVector<E, Sz>& v) {
+  typedef typename E::value_type			value_type;
+  return static_cast<value_type>( std::sqrt(static_cast<value_type>(dot(v, v))) );
+}
+
+
+/**
+ * \fn normalize(const XprVector<E, Sz>& v)
+ * \brief Normalize the given vector expression.
+ * \ingroup _unary_function
+ * \sa norm2
+ *
+ * using the equation:
+ * \f[
+ * \frac{Vector<T, Sz> v}{\sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 }}
+ * \f]
+ */
+template<class E, std::size_t Sz>
+inline
+XprVector<
+  XprBinOp<
+    Fcnl_div<typename E::value_type, typename E::value_type>,
+    XprVector<E, Sz>,
+    XprLiteral<typename E::value_type>
+  >,
+  Sz
+>
+normalize(const XprVector<E, Sz>& v) {
+  typedef typename E::value_type			value_type;
+  typedef XprBinOp<
+    Fcnl_div<value_type, value_type>,
+    XprVector<E, Sz>,
+    XprLiteral<value_type>
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(v, XprLiteral< value_type >(norm2(v))));
+}
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_VECTOR_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h b/tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h
new file mode 100644
index 0000000..d0e613d
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h
@@ -0,0 +1,829 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorOperators.h,v 1.13 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_VECTOR_OPERATORS_H
+#define TVMET_XPR_VECTOR_OPERATORS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(XprVector<E1, Sz>, XprVector<E2, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E1, Sz>& lhs, 				\
+	     const XprVector<E2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)		// per se element wise
+TVMET_DECLARE_MACRO(sub, -)		// per se element wise
+TVMET_DECLARE_MACRO(mul, *)		// per se element wise
+namespace element_wise {
+  TVMET_DECLARE_MACRO(div, /)		// not defined for vectors
+}
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * operator(XprVector<E, Sz>, POD)
+ * operator(POD, XprVector<E, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, POD)				\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, POD >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< POD >							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs, 				\
+	     POD rhs) TVMET_CXX_ALWAYS_INLINE;				\
+									\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< POD, typename E::value_type >,				\
+    XprLiteral< POD >,							\
+    XprVector< E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (POD lhs, 							\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +, int)
+TVMET_DECLARE_MACRO(sub, -, int)
+TVMET_DECLARE_MACRO(mul, *, int)
+TVMET_DECLARE_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_DECLARE_MACRO(add, +, long long int)
+TVMET_DECLARE_MACRO(sub, -, long long int)
+TVMET_DECLARE_MACRO(mul, *, long long int)
+TVMET_DECLARE_MACRO(div, /, long long int)
+#endif
+
+TVMET_DECLARE_MACRO(add, +, float)
+TVMET_DECLARE_MACRO(sub, -, float)
+TVMET_DECLARE_MACRO(mul, *, float)
+TVMET_DECLARE_MACRO(div, /, float)
+
+TVMET_DECLARE_MACRO(add, +, double)
+TVMET_DECLARE_MACRO(sub, -, double)
+TVMET_DECLARE_MACRO(mul, *, double)
+TVMET_DECLARE_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_DECLARE_MACRO(add, +, long double)
+TVMET_DECLARE_MACRO(sub, -, long double)
+TVMET_DECLARE_MACRO(mul, *, long double)
+TVMET_DECLARE_MACRO(div, /, long double)
+#endif
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(XprVector<E, Sz>, complex<T>)
+ * operator(complex<T>, XprVector<E, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs,				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type >,		\
+    XprLiteral< std::complex<T> >,					\
+    XprVector< E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const std::complex<T>& lhs,				\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(add, +)		// per se element wise
+TVMET_DECLARE_MACRO(sub, -)		// per se element wise
+TVMET_DECLARE_MACRO(mul, *)		// per se element wise
+TVMET_DECLARE_MACRO(div, /)		// per se element wise
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(XprVector, XprVector)
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E1, Sz>& lhs,				\
+	     const XprVector<E2, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %)
+  TVMET_DECLARE_MACRO(bitxor, ^)
+  TVMET_DECLARE_MACRO(bitand, &)
+  TVMET_DECLARE_MACRO(bitor, |)
+  TVMET_DECLARE_MACRO(shl, <<)
+  TVMET_DECLARE_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*
+ * operator(Vector<T, Sz>, POD)
+ * operator(POD, Vector<T, Sz>)
+ * Note: operations are per se element_wise
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP, TP)				\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< TP >							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs, 				\
+	     TP rhs) TVMET_CXX_ALWAYS_INLINE;				\
+									\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<TP, typename E::value_type>,				\
+    XprLiteral< TP >,							\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (TP lhs, 							\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, int)
+  TVMET_DECLARE_MACRO(bitxor, ^, int)
+  TVMET_DECLARE_MACRO(bitand, &, int)
+  TVMET_DECLARE_MACRO(bitor, |, int)
+  TVMET_DECLARE_MACRO(shl, <<, int)
+  TVMET_DECLARE_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, int)
+TVMET_DECLARE_MACRO(less, <, int)
+TVMET_DECLARE_MACRO(greater_eq, >=, int)
+TVMET_DECLARE_MACRO(less_eq, <=, int)
+TVMET_DECLARE_MACRO(eq, ==, int)
+TVMET_DECLARE_MACRO(not_eq, !=, int)
+TVMET_DECLARE_MACRO(and, &&, int)
+TVMET_DECLARE_MACRO(or, ||, int)
+
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_DECLARE_MACRO(mod, %, long long int)
+  TVMET_DECLARE_MACRO(bitxor, ^, long long int)
+  TVMET_DECLARE_MACRO(bitand, &, long long int)
+  TVMET_DECLARE_MACRO(bitor, |, long long int)
+  TVMET_DECLARE_MACRO(shl, <<, long long int)
+  TVMET_DECLARE_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long long int)
+TVMET_DECLARE_MACRO(less, <, long long int)
+TVMET_DECLARE_MACRO(greater_eq, >=, long long int)
+TVMET_DECLARE_MACRO(less_eq, <=, long long int)
+TVMET_DECLARE_MACRO(eq, ==, long long int)
+TVMET_DECLARE_MACRO(not_eq, !=, long long int)
+TVMET_DECLARE_MACRO(and, &&, long long int)
+TVMET_DECLARE_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, float)
+TVMET_DECLARE_MACRO(less, <, float)
+TVMET_DECLARE_MACRO(greater_eq, >=, float)
+TVMET_DECLARE_MACRO(less_eq, <=, float)
+TVMET_DECLARE_MACRO(eq, ==, float)
+TVMET_DECLARE_MACRO(not_eq, !=, float)
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, double)
+TVMET_DECLARE_MACRO(less, <, double)
+TVMET_DECLARE_MACRO(greater_eq, >=, double)
+TVMET_DECLARE_MACRO(less_eq, <=, double)
+TVMET_DECLARE_MACRO(eq, ==, double)
+TVMET_DECLARE_MACRO(not_eq, !=, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >, long double)
+TVMET_DECLARE_MACRO(less, <, long double)
+TVMET_DECLARE_MACRO(greater_eq, >=, long double)
+TVMET_DECLARE_MACRO(less_eq, <=, long double)
+TVMET_DECLARE_MACRO(eq, ==, long double)
+TVMET_DECLARE_MACRO(not_eq, !=, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_DECLARE_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * operator(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs,				\
+	     const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;	\
+									\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const std::complex<T>& lhs,				\
+	     const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+// necessary operators for eval functions
+TVMET_DECLARE_MACRO(greater, >)
+TVMET_DECLARE_MACRO(less, <)
+TVMET_DECLARE_MACRO(greater_eq, >=)
+TVMET_DECLARE_MACRO(less_eq, <=)
+TVMET_DECLARE_MACRO(eq, ==)
+TVMET_DECLARE_MACRO(not_eq, !=)
+TVMET_DECLARE_MACRO(and, &&)
+TVMET_DECLARE_MACRO(or, ||)
+
+#undef TVMET_DECLARE_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * Unary Operator on XprVector<E, Sz>
+ */
+#define TVMET_DECLARE_MACRO(NAME, OP)					\
+template <class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(not, !)
+TVMET_DECLARE_MACRO(compl, ~)
+TVMET_DECLARE_MACRO(neg, -)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector arithmetic operators implemented by functions
+ * add, sub, mul and div
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(XprVector<E1, Sz>, XprVector<E2, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E1, Sz>& lhs, 				\
+	     const XprVector<E2, Sz>& rhs) {				\
+  return NAME (lhs, rhs);						\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub, -)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul, *)		// per se element wise
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(div, /)		// not defined for vectors
+}
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * operator(XprVector<E, Sz>, POD)
+ * operator(POD, XprVector<E, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD)		\
+template<class E, std::size_t Sz>			\
+inline							\
+XprVector<						\
+  XprBinOp<						\
+    Fcnl_##NAME<typename E::value_type, POD >,		\
+    XprVector<E, Sz>,					\
+    XprLiteral< POD >					\
+  >,							\
+  Sz							\
+>							\
+operator OP (const XprVector<E, Sz>& lhs, POD rhs) {	\
+  return NAME (lhs, rhs);				\
+}							\
+							\
+template<class E, std::size_t Sz>			\
+inline							\
+XprVector<						\
+  XprBinOp<						\
+    Fcnl_##NAME< POD, typename E::value_type >,		\
+    XprLiteral< POD >,					\
+    XprVector< E, Sz>					\
+  >,							\
+  Sz							\
+>							\
+operator OP (POD lhs, const XprVector<E, Sz>& rhs) {	\
+  return NAME (lhs, rhs);				\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +, int)
+TVMET_IMPLEMENT_MACRO(sub, -, int)
+TVMET_IMPLEMENT_MACRO(mul, *, int)
+TVMET_IMPLEMENT_MACRO(div, /, int)
+
+#if defined(TVMET_HAVE_LONG_LONG)
+TVMET_IMPLEMENT_MACRO(add, +, long long int)
+TVMET_IMPLEMENT_MACRO(sub, -, long long int)
+TVMET_IMPLEMENT_MACRO(mul, *, long long int)
+TVMET_IMPLEMENT_MACRO(div, /, long long int)
+#endif
+
+TVMET_IMPLEMENT_MACRO(add, +, float)
+TVMET_IMPLEMENT_MACRO(sub, -, float)
+TVMET_IMPLEMENT_MACRO(mul, *, float)
+TVMET_IMPLEMENT_MACRO(div, /, float)
+
+TVMET_IMPLEMENT_MACRO(add, +, double)
+TVMET_IMPLEMENT_MACRO(sub, -, double)
+TVMET_IMPLEMENT_MACRO(mul, *, double)
+TVMET_IMPLEMENT_MACRO(div, /, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+TVMET_IMPLEMENT_MACRO(add, +, long double)
+TVMET_IMPLEMENT_MACRO(sub, -, long double)
+TVMET_IMPLEMENT_MACRO(mul, *, long double)
+TVMET_IMPLEMENT_MACRO(div, /, long double)
+#endif
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(XprVector<E, Sz>, complex<T>)
+ * operator(complex<T>, XprVector<E, Sz>)
+ * Note: operations +,-,*,/ are per se element wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)				\
+template<class E, std::size_t Sz, class T>			\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,	\
+    XprVector<E, Sz>,						\
+    XprLiteral< std::complex<T> >				\
+  >,								\
+  Sz								\
+>								\
+operator OP (const XprVector<E, Sz>& lhs,			\
+	     const std::complex<T>& rhs) {			\
+  return NAME (lhs, rhs);					\
+}								\
+								\
+template<class E, std::size_t Sz, class T>			\
+inline								\
+XprVector<							\
+  XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type >,	\
+    XprLiteral< std::complex<T> >,				\
+    XprVector< E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+operator OP (const std::complex<T>& lhs,			\
+	     const XprVector<E, Sz>& rhs) {			\
+  return NAME (lhs, rhs);					\
+}
+
+TVMET_IMPLEMENT_MACRO(add, +)		// per se element wise
+TVMET_IMPLEMENT_MACRO(sub, -)		// per se element wise
+TVMET_IMPLEMENT_MACRO(mul, *)		// per se element wise
+TVMET_IMPLEMENT_MACRO(div, /)		// per se element wise
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * Vector integer and compare operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * operator(XprVector, XprVector)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class E1, class E2, std::size_t Sz>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E1, Sz>& lhs,				\
+	     const XprVector<E2, Sz>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E1::value_type, typename E2::value_type>,	\
+    XprVector<E1, Sz>,							\
+    XprVector<E2, Sz>							\
+  >		    					expr_type;	\
+  return XprVector<expr_type, Sz>(expr_type(lhs, rhs));			\
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^)
+  TVMET_IMPLEMENT_MACRO(bitand, &)
+  TVMET_IMPLEMENT_MACRO(bitor, |)
+  TVMET_IMPLEMENT_MACRO(shl, <<)
+  TVMET_IMPLEMENT_MACRO(shr, >>)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+/*
+ * operator(Vector<T, Sz>, POD)
+ * operator(POD, Vector<T, Sz>)
+ * Note: operations are per se element_wise
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP, TP)				\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< TP >							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs, TP rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, TP >,				\
+    XprVector<E, Sz>,							\
+    XprLiteral< TP >							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, XprLiteral< TP >(rhs)));				\
+}									\
+									\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<TP, typename E::value_type>,				\
+    XprLiteral< TP >,							\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (TP lhs, const XprVector<E, Sz>& rhs) {			\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< TP, typename E::value_type>,				\
+    XprLiteral< TP >,							\
+    XprVector<E, Sz>							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(XprLiteral< TP >(lhs), rhs));				\
+}
+
+// integer operators only, e.g used on double you wil get an error
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, int)
+TVMET_IMPLEMENT_MACRO(less, <, int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, int)
+TVMET_IMPLEMENT_MACRO(eq, ==, int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, int)
+TVMET_IMPLEMENT_MACRO(and, &&, int)
+TVMET_IMPLEMENT_MACRO(or, ||, int)
+
+
+#if defined(TVMET_HAVE_LONG_LONG)
+// integer operators only
+namespace element_wise {
+  TVMET_IMPLEMENT_MACRO(mod, %, long long int)
+  TVMET_IMPLEMENT_MACRO(bitxor, ^, long long int)
+  TVMET_IMPLEMENT_MACRO(bitand, &, long long int)
+  TVMET_IMPLEMENT_MACRO(bitor, |, long long int)
+  TVMET_IMPLEMENT_MACRO(shl, <<, long long int)
+  TVMET_IMPLEMENT_MACRO(shr, >>, long long int)
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long long int)
+TVMET_IMPLEMENT_MACRO(less, <, long long int)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long long int)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long long int)
+TVMET_IMPLEMENT_MACRO(eq, ==, long long int)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long long int)
+TVMET_IMPLEMENT_MACRO(and, &&, long long int)
+TVMET_IMPLEMENT_MACRO(or, ||, long long int)
+#endif // defined(TVMET_HAVE_LONG_LONG)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, float)
+TVMET_IMPLEMENT_MACRO(less, <, float)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, float)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, float)
+TVMET_IMPLEMENT_MACRO(eq, ==, float)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, float)
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, double)
+TVMET_IMPLEMENT_MACRO(less, <, double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, double)
+TVMET_IMPLEMENT_MACRO(eq, ==, double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, double)
+
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >, long double)
+TVMET_IMPLEMENT_MACRO(less, <, long double)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=, long double)
+TVMET_IMPLEMENT_MACRO(less_eq, <=, long double)
+TVMET_IMPLEMENT_MACRO(eq, ==, long double)
+TVMET_IMPLEMENT_MACRO(not_eq, !=, long double)
+#endif // defined(TVMET_HAVE_LONG_DOUBLE)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+#if defined(TVMET_HAVE_COMPLEX)
+/*
+ * operator(Vector<std::complex<T>, Sz>, std::complex<T>)
+ * operator(std::complex<T>, Vector<std::complex<T>, Sz>)
+ * Note: - per se element wise
+ *       - bit ops on complex<int> doesn't make sense, stay away
+ * \todo type promotion
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& lhs,				\
+	     const std::complex<T>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME<typename E::value_type, std::complex<T> >,		\
+    XprVector<E, Sz>,							\
+    XprLiteral< std::complex<T> >					\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(lhs, XprLiteral< std::complex<T> >(rhs)));		\
+}									\
+									\
+template<class E, std::size_t Sz, class T>				\
+inline									\
+XprVector<								\
+  XprBinOp<								\
+    Fcnl_##NAME<std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const std::complex<T>& lhs,				\
+	     const XprVector<E, Sz>& rhs) {				\
+  typedef XprBinOp<							\
+    Fcnl_##NAME< std::complex<T>, typename E::value_type>,		\
+    XprLiteral< std::complex<T> >,					\
+    XprVector<E, Sz>							\
+  >							expr_type;	\
+  return XprVector<expr_type, Sz>(					\
+    expr_type(XprLiteral< std::complex<T> >(lhs), rhs));		\
+}
+
+// necessary operators for eval functions
+TVMET_IMPLEMENT_MACRO(greater, >)
+TVMET_IMPLEMENT_MACRO(less, <)
+TVMET_IMPLEMENT_MACRO(greater_eq, >=)
+TVMET_IMPLEMENT_MACRO(less_eq, <=)
+TVMET_IMPLEMENT_MACRO(eq, ==)
+TVMET_IMPLEMENT_MACRO(not_eq, !=)
+TVMET_IMPLEMENT_MACRO(and, &&)
+TVMET_IMPLEMENT_MACRO(or, ||)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+#endif // defined(TVMET_HAVE_COMPLEX)
+
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * global unary operators
+ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+
+/*
+ * Unary Operator on XprVector<E, Sz>
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME, OP)					\
+template <class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+operator OP (const XprVector<E, Sz>& rhs) {				\
+  typedef XprUnOp<							\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprVector<E, Sz>							\
+  >  							 expr_type;	\
+  return XprVector<expr_type, Sz>(expr_type(rhs));			\
+}
+
+TVMET_IMPLEMENT_MACRO(not, !)
+TVMET_IMPLEMENT_MACRO(compl, ~)
+TVMET_IMPLEMENT_MACRO(neg, -)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_VECTOR_OPERATORS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/include/tvmet/xpr/VectorUnaryFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/VectorUnaryFunctions.h
new file mode 100644
index 0000000..37bad08
--- /dev/null
+++ b/tvmet-1.7.1/include/tvmet/xpr/VectorUnaryFunctions.h
@@ -0,0 +1,172 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: VectorUnaryFunctions.h,v 1.7 2004/06/10 16:36:55 opetzold Exp $
+ */
+
+#ifndef TVMET_XPR_VECTOR_UNARY_FUNCTIONS_H
+#define TVMET_XPR_VECTOR_UNARY_FUNCTIONS_H
+
+namespace tvmet {
+
+
+/*********************************************************
+ * PART I: DECLARATION
+ *********************************************************/
+
+/*
+ * unary_function(XprVector<E, Sz>)
+ */
+#define TVMET_DECLARE_MACRO(NAME)				\
+template<class E, std::size_t Sz>				\
+inline								\
+XprVector<							\
+  XprUnOp<							\
+    Fcnl_##NAME<typename E::value_type>,			\
+    XprVector<E, Sz>						\
+  >,								\
+  Sz								\
+>								\
+NAME(const XprVector<E, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;
+
+TVMET_DECLARE_MACRO(abs)
+TVMET_DECLARE_MACRO(cbrt)
+TVMET_DECLARE_MACRO(ceil)
+TVMET_DECLARE_MACRO(floor)
+TVMET_DECLARE_MACRO(rint)
+TVMET_DECLARE_MACRO(sin)
+TVMET_DECLARE_MACRO(cos)
+TVMET_DECLARE_MACRO(tan)
+TVMET_DECLARE_MACRO(sinh)
+TVMET_DECLARE_MACRO(cosh)
+TVMET_DECLARE_MACRO(tanh)
+TVMET_DECLARE_MACRO(asin)
+TVMET_DECLARE_MACRO(acos)
+TVMET_DECLARE_MACRO(atan)
+TVMET_DECLARE_MACRO(exp)
+TVMET_DECLARE_MACRO(log)
+TVMET_DECLARE_MACRO(log10)
+TVMET_DECLARE_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_DECLARE_MACRO(asinh)
+TVMET_DECLARE_MACRO(acosh)
+TVMET_DECLARE_MACRO(atanh)
+TVMET_DECLARE_MACRO(expm1)
+TVMET_DECLARE_MACRO(log1p)
+TVMET_DECLARE_MACRO(erf)
+TVMET_DECLARE_MACRO(erfc)
+TVMET_DECLARE_MACRO(j0)
+TVMET_DECLARE_MACRO(j1)
+TVMET_DECLARE_MACRO(y0)
+TVMET_DECLARE_MACRO(y1)
+TVMET_DECLARE_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_DECLARE_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_DECLARE_MACRO(isinf)
+#endif
+TVMET_DECLARE_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_DECLARE_MACRO
+
+
+/*********************************************************
+ * PART II: IMPLEMENTATION
+ *********************************************************/
+
+
+/*
+ * unary_function(XprVector<E, Sz>)
+ */
+#define TVMET_IMPLEMENT_MACRO(NAME)					\
+template<class E, std::size_t Sz>					\
+inline									\
+XprVector<								\
+  XprUnOp<								\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprVector<E, Sz>							\
+  >,									\
+  Sz									\
+>									\
+NAME(const XprVector<E, Sz>& rhs) {					\
+  typedef XprUnOp<							\
+    Fcnl_##NAME<typename E::value_type>,				\
+    XprVector<E, Sz>							\
+  > 							expr_type;	\
+  return XprVector<expr_type, Sz>(expr_type(rhs));			\
+}
+
+TVMET_IMPLEMENT_MACRO(abs)
+TVMET_IMPLEMENT_MACRO(cbrt)
+TVMET_IMPLEMENT_MACRO(ceil)
+TVMET_IMPLEMENT_MACRO(floor)
+TVMET_IMPLEMENT_MACRO(rint)
+TVMET_IMPLEMENT_MACRO(sin)
+TVMET_IMPLEMENT_MACRO(cos)
+TVMET_IMPLEMENT_MACRO(tan)
+TVMET_IMPLEMENT_MACRO(sinh)
+TVMET_IMPLEMENT_MACRO(cosh)
+TVMET_IMPLEMENT_MACRO(tanh)
+TVMET_IMPLEMENT_MACRO(asin)
+TVMET_IMPLEMENT_MACRO(acos)
+TVMET_IMPLEMENT_MACRO(atan)
+TVMET_IMPLEMENT_MACRO(exp)
+TVMET_IMPLEMENT_MACRO(log)
+TVMET_IMPLEMENT_MACRO(log10)
+TVMET_IMPLEMENT_MACRO(sqrt)
+
+#if defined(TVMET_HAVE_IEEE_MATH)
+TVMET_IMPLEMENT_MACRO(asinh)
+TVMET_IMPLEMENT_MACRO(acosh)
+TVMET_IMPLEMENT_MACRO(atanh)
+TVMET_IMPLEMENT_MACRO(expm1)
+TVMET_IMPLEMENT_MACRO(log1p)
+TVMET_IMPLEMENT_MACRO(erf)
+TVMET_IMPLEMENT_MACRO(erfc)
+TVMET_IMPLEMENT_MACRO(j0)
+TVMET_IMPLEMENT_MACRO(j1)
+TVMET_IMPLEMENT_MACRO(y0)
+TVMET_IMPLEMENT_MACRO(y1)
+TVMET_IMPLEMENT_MACRO(lgamma)
+/** \todo isnan etc. - default return is only an int! */
+#if !defined(TVMET_NO_IEEE_MATH_ISNAN)
+TVMET_IMPLEMENT_MACRO(isnan)
+#endif
+#if !defined(TVMET_NO_IEEE_MATH_ISINF)
+TVMET_IMPLEMENT_MACRO(isinf)
+#endif
+TVMET_IMPLEMENT_MACRO(finite)
+#endif // defined(TVMET_HAVE_IEEE_MATH)
+
+#undef TVMET_IMPLEMENT_MACRO
+
+
+
+} // namespace tvmet
+
+#endif // TVMET_XPR_VECTOR_FUNCTIONS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/tests/Makefile.am b/tvmet-1.7.1/tests/Makefile.am
new file mode 100644
index 0000000..ad80f18
--- /dev/null
+++ b/tvmet-1.7.1/tests/Makefile.am
@@ -0,0 +1,16 @@
+EXTRA_DIST = README t.cc
+
+EXTRA_PROGRAMS	= \
+	swap \
+	bad_temps \
+	bad_xpr_const_ref \
+	tvmet
+
+AM_CXXFLAGS= -I$(top_srcdir)/include -I$(top_builddir)/include
+
+swap_SOURCES = swap.cc
+bad_temps_SOURCES = bad_temps.cc
+bad_xpr_const_ref_SOURCES = bad_xpr_const_ref.cc
+tvmet_SOURCES = tvmet.cc
+
+tests: $(EXTRA_PROGRAMS)
diff --git a/tvmet-1.7.1/tests/Makefile.in b/tvmet-1.7.1/tests/Makefile.in
new file mode 100644
index 0000000..3925db4
--- /dev/null
+++ b/tvmet-1.7.1/tests/Makefile.in
@@ -0,0 +1,470 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+SOURCES = $(bad_temps_SOURCES) $(bad_xpr_const_ref_SOURCES) $(swap_SOURCES) $(tvmet_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+EXTRA_PROGRAMS = swap$(EXEEXT) bad_temps$(EXEEXT) \
+	bad_xpr_const_ref$(EXEEXT) tvmet$(EXEEXT)
+subdir = tests
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+am_bad_temps_OBJECTS = bad_temps.$(OBJEXT)
+bad_temps_OBJECTS = $(am_bad_temps_OBJECTS)
+bad_temps_LDADD = $(LDADD)
+am_bad_xpr_const_ref_OBJECTS = bad_xpr_const_ref.$(OBJEXT)
+bad_xpr_const_ref_OBJECTS = $(am_bad_xpr_const_ref_OBJECTS)
+bad_xpr_const_ref_LDADD = $(LDADD)
+am_swap_OBJECTS = swap.$(OBJEXT)
+swap_OBJECTS = $(am_swap_OBJECTS)
+swap_LDADD = $(LDADD)
+am_tvmet_OBJECTS = tvmet.$(OBJEXT)
+tvmet_OBJECTS = $(am_tvmet_OBJECTS)
+tvmet_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bad_temps.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/bad_xpr_const_ref.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/swap.Po ./$(DEPDIR)/tvmet.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(bad_temps_SOURCES) $(bad_xpr_const_ref_SOURCES) \
+	$(swap_SOURCES) $(tvmet_SOURCES)
+DIST_SOURCES = $(bad_temps_SOURCES) $(bad_xpr_const_ref_SOURCES) \
+	$(swap_SOURCES) $(tvmet_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = README t.cc
+AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
+swap_SOURCES = swap.cc
+bad_temps_SOURCES = bad_temps.cc
+bad_xpr_const_ref_SOURCES = bad_xpr_const_ref.cc
+tvmet_SOURCES = tvmet.cc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+bad_temps$(EXEEXT): $(bad_temps_OBJECTS) $(bad_temps_DEPENDENCIES) 
+	@rm -f bad_temps$(EXEEXT)
+	$(CXXLINK) $(bad_temps_LDFLAGS) $(bad_temps_OBJECTS) $(bad_temps_LDADD) $(LIBS)
+bad_xpr_const_ref$(EXEEXT): $(bad_xpr_const_ref_OBJECTS) $(bad_xpr_const_ref_DEPENDENCIES) 
+	@rm -f bad_xpr_const_ref$(EXEEXT)
+	$(CXXLINK) $(bad_xpr_const_ref_LDFLAGS) $(bad_xpr_const_ref_OBJECTS) $(bad_xpr_const_ref_LDADD) $(LIBS)
+swap$(EXEEXT): $(swap_OBJECTS) $(swap_DEPENDENCIES) 
+	@rm -f swap$(EXEEXT)
+	$(CXXLINK) $(swap_LDFLAGS) $(swap_OBJECTS) $(swap_LDADD) $(LIBS)
+tvmet$(EXEEXT): $(tvmet_OBJECTS) $(tvmet_DEPENDENCIES) 
+	@rm -f tvmet$(EXEEXT)
+	$(CXXLINK) $(tvmet_LDFLAGS) $(tvmet_OBJECTS) $(tvmet_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bad_temps.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bad_xpr_const_ref.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvmet.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@	if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool 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-exec install-exec-am \
+	install-info install-info-am install-man 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 uninstall-info-am
+
+
+tests: $(EXTRA_PROGRAMS)
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/tests/README b/tvmet-1.7.1/tests/README
new file mode 100644
index 0000000..7b62c11
--- /dev/null
+++ b/tvmet-1.7.1/tests/README
@@ -0,0 +1,2 @@
+This directory contains files only for the developer to check new features.
+Therefore not all is working/compiling here.
diff --git a/tvmet-1.7.1/tests/bad_temps.cc b/tvmet-1.7.1/tests/bad_temps.cc
new file mode 100644
index 0000000..43f4fbe
--- /dev/null
+++ b/tvmet-1.7.1/tests/bad_temps.cc
@@ -0,0 +1,243 @@
+/*
+ * This acts as an example on how to not introduce temporaries
+ * for evaluating expressions. The problem is related to the
+ * prod() function, where the temps are going out of scope.
+ */
+extern "C" int printf(const char*, ...);
+
+#ifndef restrict
+#define restrict  __restrict__
+#endif
+
+template<unsigned Rows, unsigned Cols> class Matrix;
+
+struct XprNull { explicit XprNull() { } };
+
+static inline
+double operator+(const double& lhs, XprNull) { return lhs; }
+
+
+struct fcnl_Assign { static inline void applyOn(double& restrict lhs, double rhs) { lhs = rhs; } };
+
+
+template<unsigned Rows, unsigned Cols,
+	 unsigned RowStride, unsigned ColStride>
+struct MetaMatrix
+{
+  enum {
+    doRows = (RowStride < Rows - 1) ? 1 : 0,
+    doCols = (ColStride < Cols - 1) ? 1 : 0
+  };
+
+  template<class Mtrx, class E, class Fcnl>
+  static inline
+  void assign2(Mtrx& mat, const E& expr, const Fcnl& fn) {
+    fn.applyOn(mat(RowStride, ColStride), expr(RowStride, ColStride));
+    MetaMatrix<Rows * doCols, Cols * doCols, RowStride * doCols, (ColStride+1) * doCols>::assign2(mat, expr, fn);
+  }
+
+  template<class Mtrx, class E, class Fcnl>
+  static inline
+  void assign(Mtrx& mat, const E& expr, const Fcnl& fn) {
+    MetaMatrix<Rows, Cols, RowStride, 0>::assign2(mat, expr, fn);
+    MetaMatrix<Rows * doRows, Cols * doRows, (RowStride+1) * doRows, 0>::assign(mat, expr, fn);
+  }
+};
+
+template<>
+struct MetaMatrix<0, 0, 0, 0>
+{
+  template<class Mtrx, class E, class Fcnl>
+  static inline void assign2(Mtrx&, const E&, const Fcnl&) { }
+
+  template<class Mtrx, class E, class Fcnl>
+  static inline void assign(Mtrx&, const E&, const Fcnl&) { }
+};
+
+
+template<unsigned Rows1, unsigned Cols1,
+	 unsigned Cols2,
+	 unsigned RowStride1, unsigned ColStride1,
+	 unsigned RowStride2, unsigned ColStride2,
+	 unsigned K>
+struct MetaGemm
+{
+  enum { doIt = (K != Cols1 - 1) };
+
+  static inline
+  double prod(const double* restrict lhs, const double* restrict rhs, unsigned i, unsigned j) {
+    return lhs[i * RowStride1 + K * ColStride1] * rhs[K * RowStride2 + j * ColStride2]
+      + MetaGemm<Rows1 * doIt, Cols1 * doIt,
+                 Cols2 * doIt, RowStride1 * doIt, ColStride1 * doIt,
+                 RowStride2 * doIt, ColStride2 * doIt, (K+1) * doIt>::prod(lhs, rhs, i, j);
+  }
+};
+
+template<>
+struct MetaGemm<0,0,0,0,0,0,0,0>
+{
+  static inline XprNull prod(const void*, const void*, unsigned, unsigned) { return XprNull(); }
+};
+
+
+template<unsigned Rows1, unsigned Cols1,
+	 unsigned Cols2,
+	 unsigned RowStride1, unsigned ColStride1,
+	 unsigned RowStride2, unsigned ColStride2>
+struct XprMMProduct
+{
+  explicit XprMMProduct(const double* restrict lhs, const double* restrict rhs) : m_lhs(lhs), m_rhs(rhs) { }
+
+  double operator()(unsigned i, unsigned j) const {
+    return MetaGemm<Rows1, Cols1,
+                    Cols2,
+                    RowStride1, ColStride1,
+                    RowStride2, ColStride2, 0>::prod(m_lhs, m_rhs, i, j);
+  }
+
+private:
+  const double* restrict 			m_lhs;
+  const double* restrict 			m_rhs;
+};
+
+
+template<class E>
+struct XprMatrixTranspose
+{
+  explicit XprMatrixTranspose(const E& e) : m_expr(e) { }
+
+  double operator()(unsigned i, unsigned j) const { return m_expr(j, i); }
+
+private:
+  const E& restrict				m_expr;
+};
+
+
+template<class E, unsigned Rows, unsigned Cols>
+struct XprMatrix
+{
+  explicit XprMatrix(const E& e) : m_expr(e) { }
+
+  double operator()(unsigned i, unsigned j) const { return m_expr(i, j); }
+
+private:
+  const E& restrict				m_expr;
+};
+
+
+template<unsigned Rows, unsigned Cols,
+	 unsigned RowStride, unsigned ColStride>
+struct MatrixConstReference
+{
+  explicit MatrixConstReference(const Matrix<Rows, Cols>& rhs) : m_data(rhs.m_data) { }
+
+  double operator()(unsigned i, unsigned j) const {
+    return m_data[i * RowStride + j * ColStride];
+  }
+
+private:
+  const double* restrict 			m_data;
+};
+
+
+template<unsigned Rows, unsigned Cols>
+struct Matrix
+{
+  explicit Matrix() { m_data = new double [Rows*Cols]; }
+
+  template<class E>
+  explicit Matrix(const XprMatrix<E, Rows, Cols>& rhs) {
+    m_data = new double [Rows*Cols];
+    MetaMatrix<Rows, Cols, 0, 0>::assign(*this, rhs, fcnl_Assign());
+  }
+
+  ~Matrix() { delete [] m_data; }
+
+  double& restrict operator()(unsigned i, unsigned j) { return m_data[i * Cols + j]; }
+
+  double operator()(unsigned i, unsigned j) const { return m_data[i * Cols + j]; }
+
+  MatrixConstReference<Rows,Cols,Cols,1> const_ref() const {
+    return MatrixConstReference<Rows,Cols,Cols,1>(*this);
+  }
+
+  template <class E> Matrix& operator=(const XprMatrix<E, Rows, Cols>& rhs) {
+    MetaMatrix<Rows, Cols, 0, 0>::assign(*this, rhs, fcnl_Assign());
+    return *this;
+  }
+
+  void print() const {
+    printf("[\n");
+    for(unsigned i = 0; i != Rows; ++i) {
+      printf("\t[");
+      for(unsigned j = 0; j != Cols; ++j)
+	printf("\t%+4.2f", this->operator()(i, j));
+      printf("]\n");
+    }
+    printf("]\n");
+  }
+
+// private:
+  double* 						m_data;
+};
+
+
+template<class E1, unsigned Rows1, unsigned Cols1, unsigned Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    Rows1, Cols1, Cols2,
+    Cols1, 1, Cols2, 1
+  >,
+  Rows1, Cols2
+>
+prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    Rows1, Cols1, Cols2,
+    Cols1, 1, Cols2, 1
+  >							expr_type;
+  Matrix<Rows1, Cols1> 					temp_lhs(lhs);
+
+  return XprMatrix<expr_type, Rows1, Cols2>(expr_type(temp_lhs.m_data, rhs.m_data));
+}
+
+template<unsigned Rows, unsigned Cols>
+inline
+XprMatrix<
+  XprMatrixTranspose<
+    MatrixConstReference<Rows, Cols, Cols, 1>
+  >,
+  Cols, Rows
+>
+trans(const Matrix<Rows, Cols>& rhs) {
+  typedef XprMatrixTranspose<
+    MatrixConstReference<Rows, Cols, Cols, 1>
+  >							expr_type;
+  return XprMatrix<expr_type, Cols, Rows>(expr_type(rhs.const_ref()));
+}
+
+
+/**
+ * Test driver
+ */
+using namespace std;
+
+int main()
+{
+  Matrix<3,2>		B;
+  Matrix<3,3>		D;
+  Matrix<2,2>		K;
+
+  B(0,0) = -0.05;	B(0,1) =  0;
+  B(1,0) =  0;		B(1,1) =  0.05;
+  B(2,0) =  0.05;	B(2,1) = -0.05;
+
+  D(0,0) = 2000;	D(0,1) = 1000;		D(0,2) = 0;
+  D(1,0) = 1000;	D(1,1) = 2000;		D(1,2) = 0;
+  D(2,0) = 0;		D(2,1) = 0;		D(2,2) = 500;
+
+  K = prod(prod(trans(B), D), B);
+
+  printf("K = ");
+  K.print();	// wrong result, should be symetric
+}
diff --git a/tvmet-1.7.1/tests/bad_xpr_const_ref.cc b/tvmet-1.7.1/tests/bad_xpr_const_ref.cc
new file mode 100644
index 0000000..b18d5b4
--- /dev/null
+++ b/tvmet-1.7.1/tests/bad_xpr_const_ref.cc
@@ -0,0 +1,164 @@
+/*
+ * $Id: bad_xpr_const_ref.cc,v 1.1 2003/10/21 19:40:38 opetzold Exp $
+ *
+ * This example shows the problem on holding references
+ * by expressions. On higher optimization levels all things
+ * are good. Without optimizations it crashs.
+ */
+
+extern "C" int printf(const char*, ...);
+
+#ifndef restrict
+#define restrict  __restrict__
+#endif
+
+template<unsigned Sz> class Vector;
+
+struct Fcnl_Assign {
+  static inline void apply_on(double& restrict lhs, double rhs) { lhs = rhs; }
+};
+
+struct Fcnl_Add {
+  static inline double apply_on(double lhs, double rhs) { return lhs + rhs; }
+};
+
+template<unsigned Sz, unsigned Stride=0>
+struct MetaVector
+{
+  enum {
+    doIt = (Stride < (Sz-1)) ? 1 : 0
+  };
+
+  template <class E1, class E2, class Fcnl>
+  static inline
+  void assign(E1& lhs, const E2& rhs, const Fcnl& fn) {
+    fn.apply_on(lhs(Stride), rhs(Stride));
+    MetaVector<Sz * doIt, (Stride+1) * doIt>::assign(lhs, rhs, fn);
+  }
+};
+
+template<>
+struct MetaVector<0,0>
+{
+  template <class E1, class E2, class Fcnl>
+  static inline void assign(E1&, const E2&, const Fcnl&) { }
+};
+
+
+template<class E, unsigned Sz>
+struct XprVector
+{
+  explicit XprVector(const E& e) : m_expr(e) { }
+
+  double operator()(unsigned i) const {
+    return m_expr(i);
+  }
+
+  template<class E2, class Fcnl>
+  void assign_to(E2& e, const Fcnl& fn) const {
+    MetaVector<Sz, 0>::assign(e, *this, fn);
+  }
+
+  const E						m_expr;
+};
+
+
+template<unsigned Sz, unsigned Stride=1>
+struct VectorConstReference
+{
+  explicit VectorConstReference(const Vector<Sz>& rhs) : m_data(rhs.m_data) { }
+
+  double operator()(unsigned i) const {
+    return m_data[i * Stride];
+  }
+
+  const double* restrict 				m_data;
+};
+
+
+template<unsigned Sz>
+struct Vector
+{
+  explicit Vector() { }
+
+  double& restrict operator()(unsigned i) { return m_data[i]; }
+
+  double operator()(unsigned i) const { return m_data[i]; }
+
+  typedef VectorConstReference<Sz, 1>    		ConstReference;
+
+  ConstReference const_ref() const { return ConstReference(*this); }
+
+  template<class Fcnl>
+  void assign_to(Vector& v, const Fcnl& fn) {
+    MetaVector<Sz, 0>::assign(v, *this, fn);
+  }
+
+  template<class E>
+  Vector& operator=(const XprVector<E, Sz>& rhs) {
+    rhs.assign_to(*this, Fcnl_Assign());
+    return *this;
+  }
+
+  double						m_data[Sz];
+};
+
+
+template<class BinOp, class E1, class E2>
+struct XprBinOp
+{
+  explicit XprBinOp(const E1& lhs, const E2& rhs)
+    : m_lhs(lhs), m_rhs(rhs)
+  { }
+
+  double operator()(unsigned i) const {
+    return BinOp::apply_on(m_lhs(i), m_rhs(i));
+  }
+
+  const E1& 						m_lhs;
+  const E2& 						m_rhs;
+};
+
+
+template<unsigned Sz>
+inline
+XprVector<
+  XprBinOp<
+  Fcnl_Add,
+    VectorConstReference<Sz>,
+    VectorConstReference<Sz>
+  >,
+  Sz
+>
+add (const Vector<Sz>& lhs, const Vector<Sz>& rhs) {
+  typedef XprBinOp <
+    Fcnl_Add,
+    VectorConstReference<Sz>,
+    VectorConstReference<Sz>
+  >							expr_type;
+  return XprVector<expr_type, Sz>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+
+int main()
+{
+
+  Vector<5>	v, v1,v2;
+
+  v1(0) = 1;
+  v1(1) = 2;
+  v1(2) = 3;
+  v1(3) = 4;
+  v1(4) = 5;
+
+  v2(0) = 1;
+  v2(1) = 2;
+  v2(2) = 3;
+  v2(3) = 4;
+  v2(4) = 5;
+
+  v = add(v1, v2);
+
+  printf("v(0) = %f\n", v(0));
+}
diff --git a/tvmet-1.7.1/tests/swap.cc b/tvmet-1.7.1/tests/swap.cc
new file mode 100644
index 0000000..8d4d01d
--- /dev/null
+++ b/tvmet-1.7.1/tests/swap.cc
@@ -0,0 +1,154 @@
+/*
+ * Test file for checking meta swap feature.
+ *
+ * Swapping using std::swap is faster than meta template implementation.
+ */
+
+#include <iostream>
+#include <algorithm>				// min, max
+
+#include <tvmet/Matrix.h>
+#include <tvmet/Vector.h>
+
+
+using namespace tvmet;
+using namespace std;
+
+NS_TVMET_BEGIN
+
+template<size_t Sz, size_t Idx=0>
+class MetaSwap // later, should be MetaVector
+{
+private:
+  enum {
+    doIt = (Idx < (Sz-1)) ? 1 : 0		/**< recursive counter */
+  };
+
+public:
+  template<class E1, class E2>
+  static inline
+  void
+  swap(E1& e1, E2& e2) {
+    // XXX BUG: const problem?, we have to use the operator() for Vectors
+    fcnl_Swap<typename E1::value_type, typename E2::value_type>::applyOn(e1(Idx), e2(Idx));
+    MetaSwap<Sz * doIt, (Idx+1) * doIt>::swap(e1, e2);
+  }
+};
+
+template<>
+class MetaSwap<0, 0>
+{
+public:
+  template<class E1, class E2> static inline void swap(E1&, E2&) { }
+};
+
+
+/**
+ * \fun swap
+ * \brief swaps to vector expressions XprVector<E, Sz>
+ */
+template<class E1, class E2, size_t Sz>
+inline
+void swap(XprVector<E1, Sz> e1, XprVector<E2, Sz> e2) {
+  MetaSwap<Sz>::swap(e1, e2);
+}
+
+/**
+ * \fun swap
+ * \brief swaps to vector
+ */
+template<class T1, class T2, size_t Sz>
+inline
+void swap(Vector<T1, Sz>& lhs, Vector<T2, Sz>& rhs) {
+  swap(lhs.asXpr(), rhs.asXpr());
+}
+
+
+/**
+ * \fun swap2
+ * \brief swaps to vector expressions XprVector<E, Sz>
+ */
+template<class E1, class E2, size_t Sz>
+inline
+void swap2(XprVector<E1, Sz> e1, XprVector<E2, Sz> e2) {
+  // loops are faster than meta templates
+  for(size_t i = 0; i < Sz; ++i)
+    std::swap(e1[i], e2[i]);
+}
+
+/**
+ * \fun swap2
+ * \brief swaps to vector
+ */
+template<class T1, class T2, size_t Sz>
+inline
+void swap2(Vector<T1, Sz>& lhs, Vector<T2, Sz>& rhs) {
+  // loops are faster than meta templates
+  for(size_t i = 0; i < Sz; ++i)
+    std::swap(lhs[i], rhs[i]);
+}
+
+
+NS_TVMET_END
+
+
+
+
+template<class V1, class V2>
+void test_meta_swap(V1& v1, V2& v2) {
+  tvmet::swap(v1, v2);
+}
+
+template<class V1, class V2>
+void test_loop_swap(V1& v1, V2& v2) {
+  tvmet::swap2(v1, v2);
+}
+
+
+
+template<class M1, class M2>
+void test_meta_mswap(M1& m1, M2& m2) {
+  tvmet::swap2(row(m1, 0), row(m2, 0));
+  tvmet::swap2(col(m1, 0), col(m2, 0));
+}
+
+
+#define LOOPS	1000000
+
+int main() {
+  typedef Matrix<double, 4, 4>				matrix_type;
+  typedef Vector<double, 4>				vector_type;
+
+  //----------------------------------------------------------------
+  vector_type v1(1);
+  vector_type v2(4);
+
+  cout << "\nSwap Vectors\n\n";
+  cout << v1 << endl;
+  cout << v2 << endl;
+  for(size_t i = 0; i < LOOPS; ++i)
+    test_meta_swap(v1, v2);
+  cout << v1 << endl;
+  cout << v2 << endl;
+  for(size_t i = 0; i < LOOPS; ++i)
+    test_loop_swap(v1, v2);
+  cout << v1 << endl;
+  cout << v2 << endl;
+
+  //----------------------------------------------------------------
+  matrix_type m1, m2;
+  vector_type rv;
+
+  m1 = 1,2,3,4,
+       5,6,7,8,
+       9,10,11,12,
+       13,14,15,16;
+  m2 = transpose(m1);
+
+  cout << "\nSwap Matrix\n\n";
+  cout << m1 << endl;
+  cout << m2 << endl;
+  test_meta_mswap(m1, m2);
+  cout << m1 << endl;
+  cout << m2 << endl;
+}
diff --git a/tvmet-1.7.1/tests/t.cc b/tvmet-1.7.1/tests/t.cc
new file mode 100644
index 0000000..0f473e3
--- /dev/null
+++ b/tvmet-1.7.1/tests/t.cc
@@ -0,0 +1,414 @@
+#include <iostream>
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+using std::cout;
+using std::endl;
+
+struct separator {
+  std::ostream& print_on(std::ostream& os) const {
+    for(std::size_t i = 0; i < 63; ++i) os << "-";
+    return os;
+  }
+};
+
+std::ostream& operator<<(std::ostream& os, const separator& s) {
+  return s.print_on(os);
+}
+
+template<class T1, class T2 = T1>
+class TestBase
+{
+public:
+  typedef T1					value_type;
+  typedef T2					value_type2;
+
+  typedef tvmet::Vector<value_type, 3>		vector_type;
+  typedef tvmet::Matrix<value_type, 3, 3>	matrix_type;
+  typedef tvmet::Vector<value_type2, 3>		vector_type2;
+  typedef tvmet::Matrix<value_type2, 3, 3>	matrix_type2;
+
+private:
+  vector_type					v0;
+  matrix_type					M0;
+
+protected:
+  vector_type					v1, v2, v3;
+  matrix_type					M1, M2, M3;
+
+protected:
+  TestBase()
+  {
+    v0 = 1,2,3;
+    M0 = 1,4,7,2,5,8,3,6,9;
+    reset();
+  }
+
+  ~TestBase() { }
+
+  void reset()
+  {
+    v1 = v0; v2 = v0; v3 = v0;
+    M1 = M0; M2 = M0; M3 = M0;
+  }
+
+public:
+  void show_v1(const std::string& op) {
+    cout << separator() << endl
+	 << op << " = "
+	 << v1 << endl
+	 << separator() << endl;
+  }
+
+  void show_v2(const std::string& op) {
+    cout << separator() << endl
+	 << op << " = "
+	 << v2 << endl
+	 << separator() << endl;
+  }
+
+  void show_v3(const std::string& op) {
+    cout << separator() << endl
+	 << op << " = "
+	 << v3 << endl
+	 << separator() << endl;
+  }
+
+  void show_v() {
+    cout << separator() << endl;
+    cout << "v1 = " << v1 << endl
+	 << "v2 = " << v2 << endl
+	 << "v3 = " << v3 << endl;
+    cout << separator() << endl;
+  }
+
+  void show_M1(const std::string& op) {
+    cout << separator() << endl
+	 << op << " = "
+	 << M1 << endl
+	 << separator() << endl;
+  }
+
+  void show_M2(const std::string& op) {
+    cout << separator() << endl
+	 << op << " = "
+	 << M2 << endl
+	 << separator() << endl;
+  }
+
+  void show_M3(const std::string& op) {
+    cout << separator() << endl
+	 << op << " = "
+	 << M3 << endl
+	 << separator() << endl;
+  }
+
+  void show_M() {
+    cout << separator() << endl;
+    cout << "M1 = " << M1 << endl
+	 << "M2 = " << M2 << endl
+	 << "M3 = " << M3 << endl;
+    cout << separator() << endl;
+  }
+};
+
+
+
+
+/*
+ * Vector
+ */
+class TestV : public TestBase<double>
+{
+public:
+  TestV() { }
+
+public:
+  void case1()  {
+    reset();
+
+    v1 = v2 + v2 + v3;
+
+    show_v1("v2 + v2 + v3");
+  }
+  void case2()  {
+    reset();
+
+    v1 = sin( (v2 + v2) * v2 );
+
+    show_v1("sin( (v2 + v2) * v2 )");
+  }
+  void case3()  {
+    reset();
+
+    v1 = (v2 + v2) * (v2 + v2);
+
+    show_v1("(v2 + v2) * (v2 + v2)");
+  }
+  void case4()  {
+    reset();
+
+    v1 = (v2 + v2) * (v2 + v2) / 4;
+
+    show_v1("(v2 + v2) * (v2 + v2) / 4");
+  }
+  void case5()  {
+    reset();
+
+  }
+};
+
+/*
+ * Matrix
+ */
+class TestM : public TestBase<double>
+{
+public:
+  TestM() { }
+
+public:
+  void case1()  {
+    reset();
+
+    M1 = M2 + M3;
+
+    show_M1("M2 + M3");
+  }
+  void case2()  {
+    reset();
+
+    M1 = M2 + M2 + M2 + M2;
+
+    show_M1("M2 + M2 + M2 + M2");
+  }
+  void case3()  {
+    reset();
+
+    /*
+      XXX: missing feature element_wise XprMatrix * Xprmatrix
+
+      M1 = ( M2 + M2 ) * ( M2 + M2 );
+
+      M1 = tvmet::element_wise::product( M2 + M2, M2 + M2 );
+
+      show_M1("empty");
+    */
+  }
+  void case4()  {
+    reset();
+
+    M1 = sin(M2 + M2);			// UFUNC(XprMatrix)
+
+    show_M1("sin(M2 + M2)");
+  }
+  void case5()  {
+    reset();
+
+    M1 = trans(M2);			// = XprMatrix
+
+    show_M1("trans(M2)");
+  }
+  void case6()  {
+    reset();
+
+    M1 = trans(M2) + M2; 		// XprMatrix + Matrix
+
+    show_M1("trans(M2) + M2");
+  }
+  void case7()  {
+    reset();
+
+    M1 = M2 + trans(M2); 		// Matrix + XprMatrix
+
+    show_M1("M2 + trans(M2)");
+  }
+  void case8()  {
+    reset();
+
+    /*
+     * WRONG results, should be:
+     *   120  264  408
+     *   144  324  504
+     *   168  384  600
+     * there seems to be a side effect!!
+     */
+
+    M1 = prod((M2 + M2), (M2 + M2)); 	// XprMatrix * XprMatrix
+
+    show_M1("prod((M2 + M2), (M2 + M2))");
+  }
+  void case9()  {
+    reset();
+
+    M1 = (M2 + M2) * (M2 + M2); 	// XprMatrix * XprMatrix
+
+    show_M1("(M2 + M2) * (M2 + M2)");
+  }
+  void case10()  {
+    reset();
+
+  }
+};
+
+/*
+ * Matrix-Vector
+ */
+class TestMV : public TestBase<double>
+{
+public:
+  TestMV() { }
+
+public:
+  void case1()  {
+    reset();
+
+    v1 = M1 * v2;
+
+    show_v1("M1 * v2");
+  }
+  void case2()  {
+    reset();
+
+    v1 = (M1 * v2) + v2;
+
+    show_v1("(M1 * v2) + v2");
+  }
+  void case3()  {
+    reset();
+
+    v1 = (M1 * v2) + (M1 * v2);
+
+    show_v1("(M1 * v2) + (M1 * v2)");
+  }
+  void case4()  {
+    reset();
+
+    v1 = (M1 * v2) * (M1 * v2); 	// element wise: XprVector * XprVector
+
+    show_v1("element_wise: (M1 * v2) * (M1 * v2)");
+  }
+  void case5()  {
+    reset();
+
+    using namespace tvmet::element_wise;
+    v1 = (M1 * v2) / (M1 * v2); 	// element_wise: XprVector / XprVector
+
+    show_v1("element_wise: (M1 * v2) / (M1 * v2)");
+  }
+  void case6()  {
+    reset();
+
+    v1 = prod(M1, v2);
+
+    show_v1("trans_prod(M1, v2)");
+  }
+  void case7()  {
+    reset();
+
+    v1 = prod(M1, v2) + v2;// XprVector + Vector
+
+    show_v1("prod(M1, v2) + v2");
+  }
+  void case8()  {
+    reset();
+
+    using namespace tvmet::element_wise;
+    v1 += prod(M1, v2) / v2;// element_wise: XprVector + Vector
+
+    show_v1("v1 += prod(M1, v2) / v2");
+  }
+  void case9()  {
+    reset();
+
+    v1 = prod(M1, v2) + prod(M1, v2);// element wise: XprVector * XprVector
+
+    show_v1("prod(M1, v2) + prod(M1, v2)");
+  }
+  void case10()  {
+    reset();
+
+    using namespace tvmet::element_wise;
+    v1 = prod(M1, v2) / prod(M1, v2);// element_wise: XprVector / XprVector
+
+    all_elements( v1 == 1 );
+
+    show_v1("prod(M1, v2) / prod(M1, v2)");
+  }
+  void case11()  {
+    reset();
+
+    v1 = M1 * (v1+v1);
+
+    show_v1("M1 * (v1+v1)");
+  }
+  void case12()  {
+    reset();
+
+    v1 = M1 * prod(M1, v2);
+
+    show_v1("M1 * prod(M1, v2)");
+  }
+};
+
+
+
+
+
+/*
+ * Main
+ */
+int main()
+{
+  tvmet::Matrix<double, 3,3> MM;
+  MM = 1,2,3,4,5,6,7,8,9;
+  tvmet::Matrix<double, 3,3> MM2( MM );
+
+  TestV						v;
+  TestM						M;
+  TestMV					Mv;
+
+  v.show_v();
+  M.show_M();
+
+  cout << "*****************************************************************" << endl;
+
+#if 1
+  v.case1();
+  v.case2();
+  v.case3();
+  v.case4();
+  v.case5();
+
+  cout << "*****************************************************************" << endl;
+#endif
+
+#if 1
+  M.case1();
+  M.case2();
+  M.case3();
+  M.case4();
+  M.case5();
+  M.case6();
+  M.case7();
+  M.case8();
+  M.case9();
+  M.case10();
+
+  cout << "*****************************************************************" << endl;
+#endif
+
+#if 1
+  Mv.case1();
+  Mv.case2();
+  Mv.case3();
+  Mv.case4();
+  Mv.case5();
+#endif
+  Mv.case6();
+  Mv.case7();
+  Mv.case8();
+  Mv.case9();
+  Mv.case10();
+  Mv.case11();
+  Mv.case12();
+}
diff --git a/tvmet-1.7.1/tests/tvmet.cc b/tvmet-1.7.1/tests/tvmet.cc
new file mode 100644
index 0000000..8651d22
--- /dev/null
+++ b/tvmet-1.7.1/tests/tvmet.cc
@@ -0,0 +1,312 @@
+/*
+ * $Id: tvmet.cc,v 1.3 2003/10/21 19:37:06 opetzold Exp $
+ *
+ * This file shows the basic principle used by tvmet. Therefore
+ * you will not find promotion etc. here.
+ */
+
+extern "C" int printf(const char*, ...);
+
+#ifndef restrict
+#define restrict  __restrict__
+#endif
+
+template<unsigned Rows, unsigned Cols> class Matrix;
+
+struct XprNull { explicit XprNull() { } };
+
+static inline
+double operator+(const double& lhs, XprNull) { return lhs; }
+
+
+struct Fcnl_Assign { static inline void apply_on(double& restrict lhs, double rhs) { lhs = rhs; } };
+
+
+template<unsigned Rows, unsigned Cols,
+	 unsigned RowStride, unsigned ColStride>
+struct MetaMatrix
+{
+  enum {
+    doRows = (RowStride < Rows - 1) ? 1 : 0,
+    doCols = (ColStride < Cols - 1) ? 1 : 0
+  };
+
+  template<class E1, class E2, class Fcnl>
+  static inline
+  void assign2(E1& lhs, const E2& rhs, const Fcnl& fn) {
+    fn.apply_on( lhs(RowStride, ColStride), rhs(RowStride, ColStride) );
+    MetaMatrix<Rows * doCols, Cols * doCols, RowStride * doCols, (ColStride+1) * doCols>::assign2(lhs, rhs, fn);
+  }
+
+  template<class E1, class E2, class Fcnl>
+  static inline
+  void assign(E1& lhs, const E2& rhs, const Fcnl& fn) {
+    MetaMatrix<Rows, Cols, RowStride, 0>::assign2(lhs, rhs, fn);
+    MetaMatrix<Rows * doRows, Cols * doRows, (RowStride+1) * doRows, 0>::assign(lhs, rhs, fn);
+  }
+};
+
+template<>
+struct MetaMatrix<0, 0, 0, 0>
+{
+  template<class E1, class E2, class Fcnl>
+  static inline void assign2(E1&, const E2&, const Fcnl&) { }
+
+  template<class E1, class E2, class Fcnl>
+  static inline void assign(E1&, const E2&, const Fcnl&) { }
+};
+
+
+template<unsigned Rows1, unsigned Cols1,
+	 unsigned Cols2,
+	 unsigned RowStride1, unsigned ColStride1,
+	 unsigned RowStride2, unsigned ColStride2,
+	 unsigned K>
+struct MetaGemm
+{
+  enum { doIt = (K != Cols1 - 1) };
+
+  template<class E1, class E2>
+  static inline
+  double prod(const E1& lhs, const E2& rhs, unsigned i, unsigned j) {
+    return lhs(i, K) * rhs(K, j)
+      + MetaGemm<Rows1 * doIt, Cols1 * doIt,
+      Cols2 * doIt, RowStride1 * doIt, ColStride1 * doIt,
+      RowStride2 * doIt, ColStride2 * doIt, (K+1) * doIt>::prod(lhs, rhs, i, j);
+  }
+};
+
+template<>
+struct MetaGemm<0,0,0,0,0,0,0,0>
+{
+  template<class E1, class E2>
+  static inline XprNull prod(const E1&, const E2&, unsigned, unsigned) { return XprNull(); }
+};
+
+
+template<class E1, class E2,
+         unsigned Rows1, unsigned Cols1,
+	 unsigned Cols2,
+	 unsigned RowStride1, unsigned ColStride1,
+	 unsigned RowStride2, unsigned ColStride2>
+struct XprMMProduct
+{
+  explicit XprMMProduct(const E1& lhs, const E2& rhs) : m_lhs(lhs), m_rhs(rhs) { }
+
+  double operator()(unsigned i, unsigned j) const {
+    return MetaGemm<
+      Rows1, Cols1,
+      Cols2,
+      RowStride1, ColStride1,
+      RowStride2, ColStride2, 0>::prod(m_lhs, m_rhs, i, j);
+  }
+
+//   void assign_to(Matrix<Rows1, Cols2>& rhs) const {
+//     MetaMatrix<Rows1, Cols2, 0, 0>::assign(rhs, *this, Fcnl_Assign());
+//   }
+
+private:
+  const E1					m_lhs;
+  const E2		 			m_rhs;
+};
+
+
+template<class E>
+struct XprMatrixTranspose
+{
+  explicit XprMatrixTranspose(const E& e) : m_expr(e) { }
+
+  double operator()(unsigned i, unsigned j) const { return m_expr(j, i); }
+
+//   template<unsigned Rows, unsigned Cols>
+//   void assign_to(Matrix<Rows, Cols>& rhs) const {
+//     MetaMatrix<Rows, Cols, 0, 0>::assign(rhs, *this, Fcnl_Assign());
+//   }
+
+private:
+  const E					m_expr;
+};
+
+
+template<class E, unsigned Rows, unsigned Cols>
+struct XprMatrix
+{
+  explicit XprMatrix(const E& e) : m_expr(e) { }
+
+  double operator()(unsigned i, unsigned j) const { return m_expr(i, j); }
+
+  void assign_to(Matrix<Rows, Cols>& rhs) const {
+    MetaMatrix<Rows, Cols, 0, 0>::assign(rhs, *this, Fcnl_Assign());
+  }
+
+private:
+  const E					m_expr;
+};
+
+
+template<unsigned Rows, unsigned Cols,
+	 unsigned RowStride, unsigned ColStride>
+struct MatrixConstReference
+{
+  explicit MatrixConstReference(const Matrix<Rows, Cols>& rhs) : m_data(rhs.m_data) { }
+
+  double operator()(unsigned i, unsigned j) const {
+    return m_data[i * RowStride + j * ColStride];
+  }
+
+private:
+  const double* restrict 			m_data;
+};
+
+
+template<unsigned Rows, unsigned Cols>
+struct Matrix
+{
+  explicit Matrix() { m_data = new double [Rows*Cols]; }
+
+  template<class E>
+  explicit Matrix(const XprMatrix<E, Rows, Cols>& rhs) {
+    m_data = new double [Rows*Cols];
+    MetaMatrix<Rows, Cols, 0, 0>::assign(*this, rhs, Fcnl_Assign());
+  }
+
+  ~Matrix() { delete [] m_data; }
+
+  double& restrict operator()(unsigned i, unsigned j) { return m_data[i * Cols + j]; }
+
+  double operator()(unsigned i, unsigned j) const { return m_data[i * Cols + j]; }
+
+  MatrixConstReference<Rows,Cols,Cols,1> const_ref() const {
+    return MatrixConstReference<Rows,Cols,Cols,1>(*this);
+  }
+
+  Matrix& operator=(const Matrix<Rows, Cols>& rhs) {
+    rhs.assign_to(*this);
+    return *this;
+  }
+
+  void assign_to(Matrix<Rows, Cols>& rhs) const {
+    MetaMatrix<Rows, Cols, 0, 0>::assign(rhs, *this, Fcnl_Assign());
+  }
+
+  template <class E>
+  Matrix& operator=(const XprMatrix<E, Rows, Cols>& rhs) {
+    rhs.assign_to(*this);
+    return *this;
+  }
+
+  template <class E>
+  void assign_to(XprMatrix<E, Rows, Cols>& rhs) const {
+    MetaMatrix<Rows, Cols, 0, 0>::assign(rhs, *this, Fcnl_Assign());
+  }
+
+  void print() const {
+    printf("[\n");
+    for(unsigned i = 0; i != Rows; ++i) {
+      printf("\t[");
+      for(unsigned j = 0; j != Cols; ++j)
+	printf("\t%+4.2f", this->operator()(i, j));
+      printf("]\n");
+    }
+    printf("]\n");
+  }
+
+  double* 						m_data;
+};
+
+
+template<unsigned Rows1, unsigned Cols1,
+	 unsigned Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    MatrixConstReference<Rows1, Cols1, Cols1, 1>,
+    MatrixConstReference<Cols1, Cols2, Cols2, 1>,
+    Rows1, Cols1,	// M1(Rows1, Cols1)
+    Cols2, 		// M2(Cols1, Cols2)
+    Cols1, 1, 		// Stride M1
+    Cols2, 1		// Stride M2
+  >,
+  Rows1, Cols2		// return Dim
+>
+prod(const Matrix<Rows1, Cols1>& lhs, const Matrix<Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    MatrixConstReference<Rows1, Cols1, Cols1, 1>,
+    MatrixConstReference<Cols1, Cols2, Cols2, 1>,
+    Rows1, Cols1,
+    Cols2,
+    Cols1, 1,
+    Cols2, 1
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Cols2>(
+    expr_type(lhs.const_ref(), rhs.const_ref()));
+}
+
+template<class E1, unsigned Rows1, unsigned Cols1, unsigned Cols2>
+inline
+XprMatrix<
+  XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>,
+    MatrixConstReference<Cols1, Cols2, Cols2, 1>,
+    Rows1, Cols1, Cols2,
+    Cols1, 1, Cols2, 1
+  >,
+  Rows1, Cols2
+  >
+prod(const XprMatrix<E1, Rows1, Cols1>& lhs, const Matrix<Cols1, Cols2>& rhs) {
+  typedef XprMMProduct<
+    XprMatrix<E1, Rows1, Cols1>,
+    MatrixConstReference<Cols1, Cols2, Cols2, 1>,
+    Rows1, Cols1, Cols2,
+    Cols1, 1, Cols2, 1
+  >							expr_type;
+  return XprMatrix<expr_type, Rows1, Cols2>(expr_type(lhs, rhs.const_ref()));
+}
+
+
+template<unsigned Rows, unsigned Cols>
+inline
+XprMatrix<
+  XprMatrixTranspose<
+    MatrixConstReference<Rows, Cols, Cols, 1>
+  >,
+  Cols, Rows
+>
+trans(const Matrix<Rows, Cols>& rhs) {
+  typedef XprMatrixTranspose<
+    MatrixConstReference<Rows, Cols, Cols, 1>
+  >							expr_type;
+  return XprMatrix<expr_type, Cols, Rows>(expr_type(rhs.const_ref()));
+}
+
+
+/**
+ * Test driver
+ */
+int main()
+{
+  Matrix<3,2>		B;
+  Matrix<3,3>		D;
+
+  B(0,0) = -0.05;	B(0,1) =  0;
+  B(1,0) =  0;		B(1,1) =  0.05;
+  B(2,0) =  0.05;	B(2,1) = -0.05;
+
+  D(0,0) = 2000;	D(0,1) = 1000;		D(0,2) = 0;
+  D(1,0) = 1000;	D(1,1) = 2000;		D(1,2) = 0;
+  D(2,0) = 0;		D(2,1) = 0;		D(2,2) = 500;
+
+  printf("B = ");
+  B.print();
+  printf("D = ");
+  D.print();
+  printf("\n***********************************************\n");
+
+  Matrix<2,2>		K;
+
+  K = prod(prod(trans(B), D), B);
+
+  printf("Check: (equal prod(prod(trans(B), D), B)\n");
+  printf(" K = ");
+  K.print();
+}
diff --git a/tvmet-1.7.1/testsuite/Makefile.am b/tvmet-1.7.1/testsuite/Makefile.am
new file mode 100644
index 0000000..9bdb0d3
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/Makefile.am
@@ -0,0 +1,41 @@
+# $Id: Makefile.am,v 1.4 2005/03/09 11:06:21 opetzold Exp $
+
+if CONFIG_CPPUNIT
+
+TESTS = driver
+
+check_PROGRAMS = driver
+
+driver_SOURCES = \
+        main.cc \
+        SelfTest.h SelfTest.cc \
+	TestNumericTraits.h TestNumericTraits.cc \
+	TestNumericTraitsComplex.h TestNumericTraitsComplex.cc \
+        TestConstruction.h TestConstruction.cc \
+        TestComplexMatrix.h TestComplexMatrix.cc \
+        TestComplexVector.h TestComplexVector.cc \
+        TestDimension.h TestDimension.cc \
+        TestMathOps.h TestMathOps.cc \
+        TestMatrixEval.h TestMatrixEval.cc \
+        TestMatrixFunctions.h TestMatrixFunctions.cc \
+        TestMatrixOperators.h TestMatrixOperators.cc \
+        TestSTL.h TestSTL.cc \
+        TestUnFunc.h TestUnFunc.cc \
+        TestVectorEval.h TestVectorEval.cc \
+        TestVectorFunctions.h TestVectorFunctions.cc \
+        TestVectorOperators.h TestVectorOperators.cc \
+        TestXpr.h TestXpr.cc \
+        TestXprMatrixFunctions.h TestXprMatrixFunctions.cc \
+        TestXprMatrixOperators.h TestXprMatrixOperators.cc \
+        TestXprVectorFunctions.h TestXprVectorFunctions.cc \
+        TestXprVectorOperators.h TestXprVectorOperators.cc \
+        TestUnloops.h TestUnloops.cc \
+	TestMatrixElementwise.h TestMatrixElementwise.cc
+
+AM_CXXFLAGS = $(CXX_DEBUG_FLAGS) $(CXX_WARN_FLAGS) \
+        -I$(top_srcdir)/include -I$(top_builddir)/include \
+        $(CPPUNIT_CFLAGS)
+
+driver_LDADD = $(CPPUNIT_LIBS)
+
+endif
diff --git a/tvmet-1.7.1/testsuite/Makefile.in b/tvmet-1.7.1/testsuite/Makefile.in
new file mode 100644
index 0000000..35c64cb
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/Makefile.in
@@ -0,0 +1,648 @@
+# Makefile.in generated by automake 1.8.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# $Id: Makefile.am,v 1.4 2005/03/09 11:06:21 opetzold Exp $
+SOURCES = $(driver_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+@CONFIG_CPPUNIT_TRUE@check_PROGRAMS = driver$(EXEEXT)
+subdir = testsuite
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
+	$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
+	$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
+	$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
+	$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
+	$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
+	$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
+	$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
+	$(top_srcdir)/config/ac_cxx_typename.m4 \
+	$(top_srcdir)/config/ac_set_compiler.m4 \
+	$(top_srcdir)/config/op_doxygen_doc.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(mkdir_p)
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+am__driver_SOURCES_DIST = main.cc SelfTest.h SelfTest.cc \
+	TestNumericTraits.h TestNumericTraits.cc \
+	TestNumericTraitsComplex.h TestNumericTraitsComplex.cc \
+	TestConstruction.h TestConstruction.cc TestComplexMatrix.h \
+	TestComplexMatrix.cc TestComplexVector.h TestComplexVector.cc \
+	TestDimension.h TestDimension.cc TestMathOps.h TestMathOps.cc \
+	TestMatrixEval.h TestMatrixEval.cc TestMatrixFunctions.h \
+	TestMatrixFunctions.cc TestMatrixOperators.h \
+	TestMatrixOperators.cc TestSTL.h TestSTL.cc TestUnFunc.h \
+	TestUnFunc.cc TestVectorEval.h TestVectorEval.cc \
+	TestVectorFunctions.h TestVectorFunctions.cc \
+	TestVectorOperators.h TestVectorOperators.cc TestXpr.h \
+	TestXpr.cc TestXprMatrixFunctions.h TestXprMatrixFunctions.cc \
+	TestXprMatrixOperators.h TestXprMatrixOperators.cc \
+	TestXprVectorFunctions.h TestXprVectorFunctions.cc \
+	TestXprVectorOperators.h TestXprVectorOperators.cc \
+	TestUnloops.h TestUnloops.cc TestMatrixElementwise.h \
+	TestMatrixElementwise.cc
+@CONFIG_CPPUNIT_TRUE@am_driver_OBJECTS = main.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	SelfTest.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestNumericTraits.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestNumericTraitsComplex.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestConstruction.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestComplexMatrix.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestComplexVector.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestDimension.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestMathOps.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestMatrixEval.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestMatrixFunctions.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestMatrixOperators.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestSTL.$(OBJEXT) TestUnFunc.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestVectorEval.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestVectorFunctions.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestVectorOperators.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestXpr.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestXprMatrixFunctions.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestXprMatrixOperators.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestXprVectorFunctions.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestXprVectorOperators.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestUnloops.$(OBJEXT) \
+@CONFIG_CPPUNIT_TRUE@	TestMatrixElementwise.$(OBJEXT)
+driver_OBJECTS = $(am_driver_OBJECTS)
+am__DEPENDENCIES_1 =
+@CONFIG_CPPUNIT_TRUE@driver_DEPENDENCIES = $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/SelfTest.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestComplexMatrix.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestComplexVector.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestConstruction.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestDimension.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestMathOps.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestMatrixElementwise.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestMatrixEval.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestMatrixFunctions.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestMatrixOperators.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestNumericTraits.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestNumericTraitsComplex.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestSTL.Po ./$(DEPDIR)/TestUnFunc.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestUnloops.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestVectorEval.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestVectorFunctions.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestVectorOperators.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestXpr.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestXprMatrixFunctions.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestXprMatrixOperators.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestXprVectorFunctions.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/TestXprVectorOperators.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/main.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(driver_SOURCES)
+DIST_SOURCES = $(am__driver_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
+CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
+CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
+CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
+CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
+CPPUNIT_LIBS = @CPPUNIT_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
+CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
+CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LATEX_BATCHMODE = @LATEX_BATCHMODE@
+LATEX_MODE = @LATEX_MODE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+@CONFIG_CPPUNIT_TRUE@TESTS = driver
+@CONFIG_CPPUNIT_TRUE@driver_SOURCES = \
+@CONFIG_CPPUNIT_TRUE@        main.cc \
+@CONFIG_CPPUNIT_TRUE@        SelfTest.h SelfTest.cc \
+@CONFIG_CPPUNIT_TRUE@	TestNumericTraits.h TestNumericTraits.cc \
+@CONFIG_CPPUNIT_TRUE@	TestNumericTraitsComplex.h TestNumericTraitsComplex.cc \
+@CONFIG_CPPUNIT_TRUE@        TestConstruction.h TestConstruction.cc \
+@CONFIG_CPPUNIT_TRUE@        TestComplexMatrix.h TestComplexMatrix.cc \
+@CONFIG_CPPUNIT_TRUE@        TestComplexVector.h TestComplexVector.cc \
+@CONFIG_CPPUNIT_TRUE@        TestDimension.h TestDimension.cc \
+@CONFIG_CPPUNIT_TRUE@        TestMathOps.h TestMathOps.cc \
+@CONFIG_CPPUNIT_TRUE@        TestMatrixEval.h TestMatrixEval.cc \
+@CONFIG_CPPUNIT_TRUE@        TestMatrixFunctions.h TestMatrixFunctions.cc \
+@CONFIG_CPPUNIT_TRUE@        TestMatrixOperators.h TestMatrixOperators.cc \
+@CONFIG_CPPUNIT_TRUE@        TestSTL.h TestSTL.cc \
+@CONFIG_CPPUNIT_TRUE@        TestUnFunc.h TestUnFunc.cc \
+@CONFIG_CPPUNIT_TRUE@        TestVectorEval.h TestVectorEval.cc \
+@CONFIG_CPPUNIT_TRUE@        TestVectorFunctions.h TestVectorFunctions.cc \
+@CONFIG_CPPUNIT_TRUE@        TestVectorOperators.h TestVectorOperators.cc \
+@CONFIG_CPPUNIT_TRUE@        TestXpr.h TestXpr.cc \
+@CONFIG_CPPUNIT_TRUE@        TestXprMatrixFunctions.h TestXprMatrixFunctions.cc \
+@CONFIG_CPPUNIT_TRUE@        TestXprMatrixOperators.h TestXprMatrixOperators.cc \
+@CONFIG_CPPUNIT_TRUE@        TestXprVectorFunctions.h TestXprVectorFunctions.cc \
+@CONFIG_CPPUNIT_TRUE@        TestXprVectorOperators.h TestXprVectorOperators.cc \
+@CONFIG_CPPUNIT_TRUE@        TestUnloops.h TestUnloops.cc \
+@CONFIG_CPPUNIT_TRUE@	TestMatrixElementwise.h TestMatrixElementwise.cc
+
+@CONFIG_CPPUNIT_TRUE@AM_CXXFLAGS = $(CXX_DEBUG_FLAGS) $(CXX_WARN_FLAGS) \
+@CONFIG_CPPUNIT_TRUE@        -I$(top_srcdir)/include -I$(top_builddir)/include \
+@CONFIG_CPPUNIT_TRUE@        $(CPPUNIT_CFLAGS)
+
+@CONFIG_CPPUNIT_TRUE@driver_LDADD = $(CPPUNIT_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  testsuite/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  testsuite/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+driver$(EXEEXT): $(driver_OBJECTS) $(driver_DEPENDENCIES) 
+	@rm -f driver$(EXEEXT)
+	$(CXXLINK) $(driver_LDFLAGS) $(driver_OBJECTS) $(driver_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SelfTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestComplexMatrix.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestComplexVector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestConstruction.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestDimension.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestMathOps.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestMatrixElementwise.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestMatrixEval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestMatrixFunctions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestMatrixOperators.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestNumericTraits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestNumericTraitsComplex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestSTL.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestUnFunc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestUnloops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestVectorEval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestVectorFunctions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestVectorOperators.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestXpr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestXprMatrixFunctions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestXprMatrixOperators.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestXprVectorFunctions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestXprVectorOperators.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@	if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+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)'; \
+	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; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+		echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xfail=`expr $$xfail + 1`; \
+		echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      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 \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -gt `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` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -n "$$skipped" && echo "$$skipped"; \
+	  test -n "$$report" && echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool 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-exec install-exec-am install-info \
+	install-info-am install-man 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 uninstall-info-am
+
+# 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.
+.NOEXPORT:
diff --git a/tvmet-1.7.1/testsuite/SelfTest.cc b/tvmet-1.7.1/testsuite/SelfTest.cc
new file mode 100644
index 0000000..0c42b20
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/SelfTest.cc
@@ -0,0 +1,40 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: SelfTest.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <SelfTest.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( SelfTest<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( SelfTest<int> );
+
+#if defined(TVMET_HAVE_COMPLEX)
+CPPUNIT_TEST_SUITE_REGISTRATION( SelfTest< std::complex<double> > );
+#endif
diff --git a/tvmet-1.7.1/testsuite/SelfTest.h b/tvmet-1.7.1/testsuite/SelfTest.h
new file mode 100644
index 0000000..1a49745
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/SelfTest.h
@@ -0,0 +1,144 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: SelfTest.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_SELFTEST_H
+#define TVMET_SELFTEST_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+#include <cassert>
+
+template <class T>
+class SelfTest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( SelfTest );
+  CPPUNIT_TEST( basics1 );
+  CPPUNIT_TEST( basics2 );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  SelfTest()
+    : vZero(0), vOne(1), mZero(0), mOne(1) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void basics1();
+  void basics2();
+
+private: // vectors
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1;
+
+private: // matrizes
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void SelfTest<T>::setUp () {
+  v1 = 1,2,3;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+}
+
+template <class T>
+void SelfTest<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ * these are elemental - therefore we use std::assert
+ ****************************************************************************/
+
+/*
+ * We have to guarantee that the vectors and matrizes these are what
+ * they should be. E.g. vOne: all elements should be equal to 1.
+ * Implicit we check on right construction here due to the way of
+ * construction.
+ */
+template <class T>
+void
+SelfTest<T>::basics1()
+{
+  // all elements of vZero have to be equal to zero:
+  assert(vZero(0) == T(0) && vZero(1) == T(0) && vZero(2) == T(0));
+
+  // all elements of vOne have to be equal to 1:
+  assert(vOne(0) == T(1) && vOne(1) == T(1) && vOne(2) == T(1));
+
+  // all elements of mZero have to be equal to zero:
+  assert(mZero(0,0) == T(0) && mZero(0,1) == T(0) && mZero(0,2) == T(0) &&
+	 mZero(1,0) == T(0) && mZero(1,1) == T(0) && mZero(1,2) == T(0) &&
+	 mZero(2,0) == T(0) && mZero(2,1) == T(0) && mZero(2,2) == T(0));
+
+  // all elements of mOne have to be equal to 1:
+  assert(mOne(0,0) == T(1) && mOne(0,1) == T(1) && mOne(0,2) == T(1) &&
+	 mOne(1,0) == T(1) && mOne(1,1) == T(1) && mOne(1,2) == T(1) &&
+	 mOne(2,0) == T(1) && mOne(2,1) == T(1) && mOne(2,2) == T(1));
+}
+
+
+/*
+ * We have to guarantee that the vectors and matrizes these are what
+ * they should be. E.g. v1: all elements should increase by 1.
+ * Implicit we check the CommaInitializer due to the way of
+ * construction.
+ */
+template <class T>
+void
+SelfTest<T>::basics2()
+{
+  // all elements of v1 should increase
+  assert(v1(0) == T(1) && v1(1) == T(2) && v1(2) == T(3));
+
+  // all elements of m1 should increase column-wise
+  assert(m1(0,0) == T(1) && m1(0,1) == T(4) && m1(0,2) == T(7) &&
+	 m1(1,0) == T(2) && m1(1,1) == T(5) && m1(1,2) == T(8) &&
+	 m1(2,0) == T(3) && m1(2,1) == T(6) && m1(2,2) == T(9));
+}
+
+#endif // TVMET_SELFTEST_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestComplexMatrix.cc b/tvmet-1.7.1/testsuite/TestComplexMatrix.cc
new file mode 100644
index 0000000..c0fba48
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestComplexMatrix.cc
@@ -0,0 +1,34 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestComplexMatrix.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestComplexMatrix.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestComplexMatrix<double> );
diff --git a/tvmet-1.7.1/testsuite/TestComplexMatrix.h b/tvmet-1.7.1/testsuite/TestComplexMatrix.h
new file mode 100644
index 0000000..d5e0b3d
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestComplexMatrix.h
@@ -0,0 +1,136 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestComplexMatrix.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TEST_COMPLEX_MATRIX_H
+#define TEST_COMPLEX_MATRIX_H
+
+#include <limits>
+#include <algorithm>
+#include <complex>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+#include <tvmet/util/Incrementor.h>
+
+
+template <class T>
+class TestComplexMatrix : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestComplexMatrix );
+  CPPUNIT_TEST( RealImag );
+  CPPUNIT_TEST( Abs );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef T					value_type;
+  typedef std::complex<T>			complex_type;
+  typedef tvmet::Matrix<complex_type, 3, 3>	complex_matrix;
+  typedef tvmet::Matrix<value_type, 3, 3>	real_matrix;
+
+public:
+  TestComplexMatrix()
+    { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void RealImag();
+  void Abs();
+
+private:
+  complex_matrix m1;
+
+private:
+  real_matrix m1_real;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestComplexMatrix<T>::setUp() {
+  // real part is equal to complex part, ranging from 0 to N=Rows*Cols
+  std::generate(m1.begin(), m1.end(),
+		tvmet::util::Incrementor<typename complex_matrix::value_type>());
+
+  std::generate(m1_real.begin(), m1_real.end(),
+		tvmet::util::Incrementor<typename real_matrix::value_type>());
+}
+
+template <class T>
+void TestComplexMatrix<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * real and imaginary parts, real and imag parts are equal
+ */
+template <class T>
+void
+TestComplexMatrix<T>::RealImag() {
+  real_matrix r;
+
+  r = real(m1);
+  CPPUNIT_ASSERT( all_elements( r == m1_real ) );
+
+  r = imag(m1);
+  CPPUNIT_ASSERT( all_elements( r == m1_real ) );
+}
+
+
+/*
+ * abs
+ */
+template <class T>
+void
+TestComplexMatrix<T>::Abs() {
+  real_matrix m, r;
+
+  m = abs(m1);
+
+  r = sqrt(pow(real(m1), 2) + pow(imag(m1), 2));
+
+  // we do have a precision problem
+  // CPPUNIT_ASSERT( all_elements( m == r ) );
+
+  real_matrix eps(m - r);
+  CPPUNIT_ASSERT( all_elements( abs(eps) < std::numeric_limits<T>::epsilon() ) );
+  //std::cout << eps << std::endl;
+}
+
+#endif // TEST_COMPLEX_MATRIX_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestComplexVector.cc b/tvmet-1.7.1/testsuite/TestComplexVector.cc
new file mode 100644
index 0000000..2337795
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestComplexVector.cc
@@ -0,0 +1,34 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestComplexVector.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestComplexVector.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestComplexVector<double> );
diff --git a/tvmet-1.7.1/testsuite/TestComplexVector.h b/tvmet-1.7.1/testsuite/TestComplexVector.h
new file mode 100644
index 0000000..1ed9bfd
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestComplexVector.h
@@ -0,0 +1,136 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestComplexVector.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TEST_COMPLEX_MATRIX_H
+#define TEST_COMPLEX_MATRIX_H
+
+#include <limits>
+#include <algorithm>
+#include <complex>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/util/General.h>
+#include <tvmet/util/Incrementor.h>
+
+
+template <class T>
+class TestComplexVector : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestComplexVector );
+  CPPUNIT_TEST( RealImag );
+  CPPUNIT_TEST( Abs );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef T					value_type;
+  typedef std::complex<T>			complex_type;
+  typedef tvmet::Vector<complex_type, 3>	complex_vector;
+  typedef tvmet::Vector<value_type, 3>		real_vector;
+
+public:
+  TestComplexVector()
+    { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void RealImag();
+  void Abs();
+
+private:
+  complex_vector v1;
+
+private:
+  real_vector v1_real;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestComplexVector<T>::setUp() {
+  // real part is equal to complex part, ranging from 0 to N=Sz
+  std::generate(v1.begin(), v1.end(),
+		tvmet::util::Incrementor<typename complex_vector::value_type>());
+
+  std::generate(v1_real.begin(), v1_real.end(),
+		tvmet::util::Incrementor<typename real_vector::value_type>());
+}
+
+template <class T>
+void TestComplexVector<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * real and imaginary parts, real and imag parts are equal
+ */
+template <class T>
+void
+TestComplexVector<T>::RealImag() {
+  real_vector r;
+
+  r = real(v1);
+  CPPUNIT_ASSERT( all_elements( r == v1_real ) );
+
+  r = imag(v1);
+  CPPUNIT_ASSERT( all_elements( r == v1_real ) );
+}
+
+
+/*
+ * abs
+ */
+template <class T>
+void
+TestComplexVector<T>::Abs() {
+  real_vector v, r;
+
+  v = abs(v1);
+
+  r = sqrt(pow(real(v1), 2) + pow(imag(v1), 2));
+
+  // we do have a precision problem
+  // CPPUNIT_ASSERT( all_elements( v == r ) );
+
+  real_vector eps(v - r);
+  CPPUNIT_ASSERT( all_elements( abs(eps) < std::numeric_limits<T>::epsilon() ) );
+  //std::cout << eps << std::endl;
+}
+
+#endif // TEST_COMPLEX_VECTOR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestConstruction.cc b/tvmet-1.7.1/testsuite/TestConstruction.cc
new file mode 100644
index 0000000..1071fad
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestConstruction.cc
@@ -0,0 +1,40 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestConstruction.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestConstruction.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestConstruction<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestConstruction<int> );
+
+#if defined(TVMET_HAVE_COMPLEX)
+CPPUNIT_TEST_SUITE_REGISTRATION( TestConstruction< std::complex<double> > );
+#endif
diff --git a/tvmet-1.7.1/testsuite/TestConstruction.h b/tvmet-1.7.1/testsuite/TestConstruction.h
new file mode 100644
index 0000000..5e03424
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestConstruction.h
@@ -0,0 +1,302 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestConstruction.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_CONSTRUCTION_H
+#define TVMET_TEST_CONSTRUCTION_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+template <class T>
+class TestConstruction : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestConstruction );
+  CPPUNIT_TEST( vector_ctor1 );
+  CPPUNIT_TEST( vector_ctor2 );
+  CPPUNIT_TEST( vector_ctor3 );
+  CPPUNIT_TEST( vector_ctor4 );
+  CPPUNIT_TEST( vector_ctor5 );
+  CPPUNIT_TEST( vector_ctor6 );
+  CPPUNIT_TEST( vector_cctor );
+  CPPUNIT_TEST( matrix_ctor1 );
+  CPPUNIT_TEST( matrix_ctor2 );
+  CPPUNIT_TEST( matrix_ctor3 );
+  CPPUNIT_TEST( matrix_ctor4 );
+  CPPUNIT_TEST( matrix_ctor5 );
+  CPPUNIT_TEST( matrix_cctor );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  enum { dim = 3 };
+  typedef tvmet::Vector<T, dim>			vector_type;
+  typedef tvmet::Matrix<T, dim, dim>		matrix_type;
+
+public:
+  TestConstruction()
+    : vZero(0), vOne(1), mZero(0), mOne(1) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void vector_ctor1();
+  void vector_ctor2();
+  void vector_ctor3();
+  void vector_ctor4();
+  void vector_ctor5();
+  void vector_ctor6();
+  void vector_cctor();
+
+  void matrix_ctor1();
+  void matrix_ctor2();
+  void matrix_ctor3();
+  void matrix_ctor4();
+  void matrix_ctor5();
+  void matrix_cctor();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1;
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestConstruction<T>::setUp () {
+  v1 = 1,2,3;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+}
+
+template <class T>
+void TestConstruction<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II (Vectors)
+ ****************************************************************************/
+
+/*
+ * Vector (InputIterator first, InputIterator last)
+ */
+template <class T>
+void
+TestConstruction<T>::vector_ctor1() {
+  T data[] = {1,2,3};
+
+  std::size_t sz = sizeof(data)/sizeof(T);
+  T* first = data;
+  T* last = data + sz;
+
+  vector_type v(first, last);
+
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+}
+
+/*
+ * Vector (InputIterator first, std::size_t sz)
+ */
+template <class T>
+void
+TestConstruction<T>::vector_ctor2() {
+  T data[] = {1,2,3};
+
+  std::size_t sz = sizeof(data)/sizeof(T);
+  T* first = data;
+
+  vector_type v(first, sz);
+
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+}
+
+/*
+ * Vector (value_type rhs)
+ */
+template <class T>
+void
+TestConstruction<T>::vector_ctor3() {
+
+  vector_type one(static_cast<T>(1.0));
+  vector_type zero(static_cast<T>(0.0));
+
+  CPPUNIT_ASSERT( all_elements(one  == vOne) );
+  CPPUNIT_ASSERT( all_elements(zero == vZero) );
+}
+
+/*
+ * Vector (value_type x0, value_type x1, value_type x2)
+ * TODO: check for other length too.
+ */
+template <class T>
+void
+TestConstruction<T>::vector_ctor4() {
+  vector_type v(1,2,3);
+
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+}
+
+/*
+ * Vector (XprVector< E, Sz > expr)
+ * Note: a little bit dangerous, since we haven't check expr yet.
+ */
+template <class T>
+void
+TestConstruction<T>::vector_ctor5() {
+  vector_type v(v1 - v1);
+
+  CPPUNIT_ASSERT( all_elements(v == vZero) );
+}
+
+/*
+ * operator=(const Vector< T2, Sz > &)
+ */
+template <class T>
+void
+TestConstruction<T>::vector_ctor6() {
+  vector_type v;
+  v = v1;
+
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+}
+
+/*
+ * Vector (const this_type &rhs)
+ */
+template <class T>
+void
+TestConstruction<T>::vector_cctor() {
+  vector_type v(v1);
+
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+}
+
+
+/*****************************************************************************
+ * Implementation Part III (Matrizes)
+ ****************************************************************************/
+
+/*
+ * Matrix (InputIterator first, InputIterator last)
+ */
+template <class T>
+void
+TestConstruction<T>::matrix_ctor1() {
+  T data[] = { 1,4,7,
+	       2,5,8,
+	       3,6,9 };
+
+  std::size_t sz = sizeof(data)/sizeof(T);
+  T* first = data;
+  T* last = data + sz;
+
+  matrix_type m(first, last);
+
+  CPPUNIT_ASSERT( all_elements(m == m1) );
+}
+
+/*
+ * Matrix (InputIterator first, std::size_t sz)
+ */
+template <class T>
+void
+TestConstruction<T>::matrix_ctor2() {
+  T data[] = { 1,4,7,
+	       2,5,8,
+	       3,6,9 };
+
+  std::size_t sz = sizeof(data)/sizeof(T);
+  T* first = data;
+
+  matrix_type m(first, sz);
+
+  CPPUNIT_ASSERT( all_elements(m == m1) );
+}
+
+/*
+ * Matrix (value_type rhs)
+ */
+template <class T>
+void
+TestConstruction<T>::matrix_ctor3() {
+  matrix_type one(static_cast<T>(1.0));
+  matrix_type zero(static_cast<T>(0.0));
+
+  CPPUNIT_ASSERT( all_elements(one  == mOne) );
+  CPPUNIT_ASSERT( all_elements(zero == mZero) );
+}
+
+/*
+ * Matrix (XprMatrix< E, Rows, Cols > expr)
+ * Note: a little bit dangerous, since we haven't check expr yet.
+ */
+template <class T>
+void
+TestConstruction<T>::matrix_ctor4() {
+  matrix_type m(m1 - m1);
+
+  CPPUNIT_ASSERT( all_elements(m == mZero) );
+}
+
+/*
+ * operator= (value_type rhs)
+ */
+template <class T>
+void
+TestConstruction<T>::matrix_ctor5() {
+  matrix_type m;
+  m = m1;
+
+  CPPUNIT_ASSERT( all_elements(m == m1) );
+}
+
+/*
+ * Matrix (const this_type &rhs)
+ */
+template <class T>
+void
+TestConstruction<T>::matrix_cctor() {
+  matrix_type m(m1);
+
+  CPPUNIT_ASSERT( all_elements(m == m1) );
+}
+
+#endif // TVMET_TEST_CONSTRUCTION_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestDimension.cc b/tvmet-1.7.1/testsuite/TestDimension.cc
new file mode 100644
index 0000000..3b9672b
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestDimension.cc
@@ -0,0 +1,40 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestDimension.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestDimension.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestDimension<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestDimension<int> );
+
+#if defined(TVMET_HAVE_COMPLEX)
+CPPUNIT_TEST_SUITE_REGISTRATION( TestDimension< std::complex<double> > );
+#endif
diff --git a/tvmet-1.7.1/testsuite/TestDimension.h b/tvmet-1.7.1/testsuite/TestDimension.h
new file mode 100644
index 0000000..f524b11
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestDimension.h
@@ -0,0 +1,259 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestDimension.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_DIMENSION_H
+#define TVMET_TEST_DIMENSION_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+template <class T>
+class TestDimension : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestDimension );
+  CPPUNIT_TEST( small_add );
+  CPPUNIT_TEST( Mtx );
+  CPPUNIT_TEST( MtM );
+  CPPUNIT_TEST( MMt );
+  CPPUNIT_TEST( MMt );
+  CPPUNIT_TEST( trans_MM );
+  CPPUNIT_TEST( Row );
+  CPPUNIT_TEST( Col );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  TestDimension() { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void small_add();
+  void Mtx();
+  void MtM();
+  void MMt();
+  void trans_MM();
+  void Row();
+  void Col();
+};
+
+/*****************************************************************************
+ * Implementation part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestDimension<T>::setUp() { }
+
+template <class T>
+void TestDimension<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation part II
+ ****************************************************************************/
+
+template <class T>
+void TestDimension<T>::small_add() {
+  using namespace tvmet;
+
+  Matrix<double, 5, 3>		M1, M2, M3;
+
+  M1 =
+    1,1,1,
+    1,1,1,
+    1,1,1,
+    1,1,1,
+    1,1,1;
+  M2 = M1;
+
+  M3 = M1 + M2;
+
+  CPPUNIT_ASSERT( all_elements(M3 == 2) );
+}
+
+
+template <class T>
+void TestDimension<T>::Mtx() {
+  using namespace tvmet;
+
+  Matrix<double, 6, 3>		M1;
+
+  Vector<double, 6> 		v1;
+  Vector<double, 3> 		r(0), v2(0);
+
+  M1 =
+    1, 2, 3,
+    4, 5, 6,
+    7, 8, 9,
+    10,11,12,
+    13,14,15,
+    16,17,18;
+  v1 = 1,2,3,4,5,6;
+
+  r = trans(M1)*v1;
+
+  v2 = Mtx_prod(M1, v1);
+
+  CPPUNIT_ASSERT( all_elements(r == v2) );
+}
+
+
+template <class T>
+void TestDimension<T>::MtM() {
+  using namespace tvmet;
+
+  Matrix<double, 6, 3>		M1;
+  Matrix<double, 6, 2>  	M2;
+  Matrix<double, 3, 2>		r(0), M3(0);
+
+  M1 =
+    1, 2, 3,
+    4, 5, 6,
+    7, 8, 9,
+    10,11,12,
+    13,14,15,
+    16,17,18;
+  M2 =
+    1, 2,
+    3, 4,
+    5, 6,
+    7, 8,
+    9,10,
+    11,12;
+
+  r = prod(trans(M1),M2);
+
+  M3 = MtM_prod(M1, M2);
+
+  CPPUNIT_ASSERT( all_elements(r == M3) );
+}
+
+
+template <class T>
+void TestDimension<T>::MMt() {
+  using namespace tvmet;
+
+  Matrix<double, 3, 4>		M1;
+  Matrix<double, 2, 4>  	M2;
+  Matrix<double, 3, 2>		M3(0), r(0);
+
+  M1 =
+    1, 2, 3, 4,
+    5, 6, 7, 8,
+    9, 10,11,12;
+  M2 =
+    1,2,3,4,
+    5,6,7,8;
+
+  r = M1*trans(M2);
+
+  M3 = MMt_prod(M1,M2);
+
+  CPPUNIT_ASSERT( all_elements(r == M3) );
+}
+
+
+template <class T>
+void TestDimension<T>::trans_MM() {
+  using namespace tvmet;
+
+  Matrix<double, 6, 3>		M1;
+  Matrix<double, 3, 6>  	M2;
+  Matrix<double, 6, 6>		r(0), M3(0);
+
+  M1 =
+    1, 2, 3,
+    4, 5, 6,
+    7, 8, 9,
+    10,11,12,
+    13,14,15,
+    16,17,18;
+  M2 =
+    1, 2, 3, 4, 5, 6,
+    7, 8, 9, 10,11,12,
+    13,14,15,16,17,18;
+
+  r = trans(prod(M1, M2));
+
+  M3 = trans_prod(M1, M2);
+
+  CPPUNIT_ASSERT( all_elements(r == M3) );
+}
+
+
+template <class T>
+void TestDimension<T>::Row() {
+  using namespace tvmet;
+
+  Matrix<double, 6, 3>		M;
+  Vector<double, 3>		v;
+  Vector<double, 3>		r0(1,2,3);
+  Vector<double, 3>		r5(16,17,18);
+
+  M =
+    1, 2, 3,
+    4, 5, 6,
+    7, 8, 9,
+    10,11,12,
+    13,14,15,
+    16,17,18;
+
+  v = row(M, 0);
+  CPPUNIT_ASSERT( all_elements(v == r0) );
+
+  v = row(M, 5);
+  CPPUNIT_ASSERT( all_elements(v == r5) );
+}
+
+
+template <class T>
+void TestDimension<T>::Col() {
+  using namespace tvmet;
+
+  Matrix<double, 3, 6>		M;
+  Vector<double, 3>		v;
+  Vector<double, 3>		c0(1,7,13);
+  Vector<double, 3>		c5(6,12,18);
+
+  M =
+    1, 2, 3, 4, 5, 6,
+    7, 8, 9, 10,11,12,
+    13,14,15,16,17,18;
+
+  v = col(M, 0);
+  CPPUNIT_ASSERT( all_elements(v == c0) );
+
+  v = col(M, 5);
+  CPPUNIT_ASSERT( all_elements(v == c5) );
+}
+
+#endif // TVMET_TEST_DIMENSION_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestMathOps.cc b/tvmet-1.7.1/testsuite/TestMathOps.cc
new file mode 100644
index 0000000..dfa14c2
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMathOps.cc
@@ -0,0 +1,36 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMathOps.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestMathOps.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMathOps<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMathOps<int> );
diff --git a/tvmet-1.7.1/testsuite/TestMathOps.h b/tvmet-1.7.1/testsuite/TestMathOps.h
new file mode 100644
index 0000000..47ba7a5
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMathOps.h
@@ -0,0 +1,491 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMathOps.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_MATHOPS_H
+#define TVMET_TEST_MATHOPS_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestMathOps : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestMathOps );
+  CPPUNIT_TEST( ScalarAssign );
+  CPPUNIT_TEST( Assign );
+  CPPUNIT_TEST( ScalarOps );
+  CPPUNIT_TEST( Ops1 );
+  CPPUNIT_TEST( Ops2 );
+  CPPUNIT_TEST( VectorOps );
+  CPPUNIT_TEST( VectorOps2 );
+  CPPUNIT_TEST( VectorNorm2 );
+  CPPUNIT_TEST( MatrixOps );
+  CPPUNIT_TEST( MatrixVector1 );
+  CPPUNIT_TEST( MatrixVector2 );
+  CPPUNIT_TEST( MatrixTransMatrix );
+  CPPUNIT_TEST( MatrixTransVector );
+  CPPUNIT_TEST( MatrixRowVector );
+  CPPUNIT_TEST( MatrixColVector );
+  CPPUNIT_TEST( MatrixDiagVector );
+  CPPUNIT_TEST( MatrixMatrixVector );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestMathOps()
+    : vZero(0), vOne(1), mZero(0), mOne(1), scalar(10) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void ScalarAssign();
+  void Assign();
+  void ScalarOps();
+  void Ops1();
+  void Ops2();
+  void VectorOps();
+  void VectorOps2();
+  void VectorNorm2();
+  void MatrixOps();
+  void MatrixVector1();
+  void MatrixVector2();
+  void MatrixTransMatrix();
+  void MatrixTransVector();
+  void MatrixRowVector();
+  void MatrixColVector();
+  void MatrixDiagVector();
+  void MatrixMatrixVector();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1, v1b;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1, m1b;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  vector_type m1_r0, m1_r1, m1_r2;	// row vectors
+  vector_type m1_c0, m1_c1, m1_c2;	// col vectors
+
+private:
+  const T scalar;
+};
+
+/*****************************************************************************
+ * Implementation
+ ****************************************************************************/
+
+/*
+ * cppunit part
+ */
+template <class T>
+void TestMathOps<T>::setUp() {
+  v1 = 1,2,3;
+  v1b = v1;		// same as v1, cctor test done in checkInternal
+  vBig = 10,20,30;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+
+  m1_r0 = 1,4,7;
+  m1_r1 = 2,5,8;
+  m1_r2 = 3,6,9;
+
+  m1_c0 = 1,2,3;
+  m1_c1 = 4,5,6;
+  m1_c2 = 7,8,9;
+
+  m1b = m1;		// same as m1, cctor test done in checkInternal
+
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+
+}
+
+template <class T>
+void TestMathOps<T>::tearDown() {
+
+}
+
+/*
+ * regressions
+ */
+template <class T>
+void
+TestMathOps<T>::ScalarAssign() {
+  {
+    vector_type t1(v1), t2(v1), t3(v1), t4(vBig);
+
+    t1 += scalar;
+    t2 -= scalar;
+    t3 *= scalar;
+    t4 /= scalar;
+
+    CPPUNIT_ASSERT(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar));
+    CPPUNIT_ASSERT(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar));
+    CPPUNIT_ASSERT( all_elements(t3 == vBig) );
+    CPPUNIT_ASSERT( all_elements(t4 == v1) );
+  }
+  {
+    matrix_type t1(m1), t2(m1), t3(m1), t4(mBig);
+
+    t1 += scalar;
+    t2 -= scalar;
+    t3 *= scalar;
+    t4 /= scalar;
+
+    CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) &&
+	   t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) &&
+	   t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar));
+    CPPUNIT_ASSERT(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) &&
+	   t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) &&
+	   t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar));
+    CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+    CPPUNIT_ASSERT( all_elements(t4 == m1) );
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::Assign() {
+  {
+    vector_type t1(vZero), t2(v1), t3(v1);
+
+    t1 += v1;
+    t2 -= v1;
+    t3 *= v1;
+
+    CPPUNIT_ASSERT( all_elements(t1 == v1) );
+    CPPUNIT_ASSERT( all_elements(t2 == vZero) );
+    CPPUNIT_ASSERT(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2)));
+  }
+  {
+    matrix_type t1(mZero), t2(m1), t3(m1);
+
+    t1 += m1;
+    t2 -= m1;
+
+    CPPUNIT_ASSERT( all_elements(t1 == m1) );
+    CPPUNIT_ASSERT( all_elements(t2 == mZero) );
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::ScalarOps() {
+  {
+    vector_type t1(v1), t2(v1), t3(v1), t4(vBig);
+    vector_type r1(v1), r2(v1);
+    r1 += scalar;
+    r2 -= scalar;
+
+    t1 = t1 + scalar;
+    t2 = t2 - scalar;
+    t3 = t3 * scalar;
+    t4 = t4 / scalar;
+
+    CPPUNIT_ASSERT( all_elements(t1 == r1) );
+    CPPUNIT_ASSERT( all_elements(t2 == r2) );
+    CPPUNIT_ASSERT( all_elements(t3 == vBig) );
+    CPPUNIT_ASSERT( all_elements(t4 == v1) );
+  }
+  {
+    matrix_type t1(m1), t2(m1), t3(m1), t4(mBig);
+    matrix_type r1(m1), r2(m1);
+    r1 += scalar;
+    r2 -= scalar;
+
+    t1 = t1 + scalar;
+    t2 = t2 - scalar;
+    t3 = t3 * scalar;
+    t4 = t4 / scalar;
+
+    CPPUNIT_ASSERT( all_elements(t1 == r1) );
+    CPPUNIT_ASSERT( all_elements(t2 == r2) );
+    CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+    CPPUNIT_ASSERT( all_elements(t4 == m1) );
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::Ops1() {
+  {
+    vector_type t1(0), t2(0), t3(0);
+    vector_type r(v1);
+    r *= v1;
+
+    t1 = v1 + v1;
+    t2 = v1 - v1;
+    t3 = v1 * v1;
+
+    CPPUNIT_ASSERT( all_elements(t1 == T(2)*v1) );
+    CPPUNIT_ASSERT( all_elements(t2 == vZero) );
+    CPPUNIT_ASSERT( all_elements(t3 == r) );
+  }
+  {
+    matrix_type t1(0), t2(0);
+    t1 = m1 + m1;
+    t2 = m1 - m1;
+
+    CPPUNIT_ASSERT( all_elements(t1 == T(2)*m1) );
+    CPPUNIT_ASSERT( all_elements(t2 == mZero) );
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::Ops2() {
+  const vector_type vMinusOne(-1);
+  const matrix_type mMinusOne(-1);
+
+  // negate operator
+  {
+    vector_type t1, t2;
+
+    t1 = abs(v1);
+    CPPUNIT_ASSERT( all_elements(t1 == v1) );
+
+    t1 = -vOne;
+    CPPUNIT_ASSERT( all_elements(t1 == vMinusOne) );
+  }
+  {
+    matrix_type t1, t2;
+
+    t1 = abs(m1);
+    CPPUNIT_ASSERT( all_elements(t1 == m1) );
+
+    t1 = -mOne;
+    CPPUNIT_ASSERT( all_elements(t1 == mMinusOne) );
+
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::VectorOps() {
+
+}
+
+template <class T>
+void
+TestMathOps<T>::VectorOps2() {
+}
+
+template <class T>
+void
+TestMathOps<T>::VectorNorm2() {
+  // casts for int vectors, as well as for complex<> since
+  // norm2 returns sum_type
+  CPPUNIT_ASSERT( norm2(v1) == static_cast<T>(std::sqrt(14.0)));
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixOps() {
+  matrix_type t1, t2, t3;
+  matrix_type r1, r2, r3;
+
+  tvmet::util::Gemm(m1, m1, r1);
+  tvmet::util::Gemm(m1, mBig, r2);
+  tvmet::util::Gemm(mBig, m1, r3);
+  CPPUNIT_ASSERT( all_elements(r2 == r3) );
+
+  t1 = m1 * m1;
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+
+  t2 = m1 * mBig;
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+
+  t3 = mBig * m1;
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+
+  t3 = trans(t1);
+  CPPUNIT_ASSERT( any_elements(t3 != t1) ); // XXX very simple test
+  t2 = trans(t3);
+  CPPUNIT_ASSERT( all_elements(t1 == t2) );
+
+  // trace return sum_type, therefore the cast for complex<>
+  CPPUNIT_ASSERT( static_cast<T>(trace(m1)) == static_cast<T>(15) );
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixVector1() {
+
+  vector_type t1, t2;
+  vector_type vr1(0), vr2(0);	// clear it before use due to util::Gemv algo
+
+  // Matrix-Vector
+  tvmet::util::Gemv(m1, v1, vr1);
+  tvmet::util::Gemv(mBig, vBig, vr2);
+
+  t1 = m1 * v1;
+  t2 = mBig * vBig;
+
+  CPPUNIT_ASSERT( all_elements(t1 == vr1) );
+  CPPUNIT_ASSERT( all_elements(t2 == vr2) );
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixVector2() {
+
+  vector_type t1, t2;
+  vector_type vr(0), v2(0);	// clear it before use due to util::Gemv algo
+
+  // Matrix-XprVector
+  v2 = v1 * vBig;
+  tvmet::util::Gemv(m1, v2, vr);
+
+  t1 = m1 * (v1*vBig);
+
+  CPPUNIT_ASSERT( all_elements(t1 == vr) );
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixTransMatrix() {
+  // greatings to
+  {
+    matrix_type m1t, Mr, M2;
+
+    // trans() and prod() is checked before!
+    m1t = trans(m1);
+    Mr  = prod(m1t, mBig);
+
+    M2  = MtM_prod(m1, mBig);
+
+    CPPUNIT_ASSERT( all_elements(Mr == M2) );
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixTransVector() {
+  // greatings to
+  {
+    matrix_type Mt;
+    vector_type vr, y;
+
+    // trans() and prod() is checked before!
+    Mt = trans(m1);
+    vr = Mt*v1;
+    y  = Mtx_prod(m1, v1);
+
+    CPPUNIT_ASSERT( all_elements(vr == y) );
+  }
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixRowVector() {
+  vector_type r0, r1, r2;
+
+  r0 = row(m1, 0);
+  r1 = row(m1, 1);
+  r2 = row(m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(r0 == m1_r0) );
+  CPPUNIT_ASSERT( all_elements(r1 == m1_r1) );
+  CPPUNIT_ASSERT( all_elements(r2 == m1_r2) );
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixColVector() {
+  vector_type c0, c1, c2;
+
+  c0 = col(m1, 0);
+  c1 = col(m1, 1);
+  c2 = col(m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(c0 == m1_c0) );
+  CPPUNIT_ASSERT( all_elements(c1 == m1_c1) );
+  CPPUNIT_ASSERT( all_elements(c2 == m1_c2) );
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixDiagVector() {
+  vector_type vd, t;
+
+  vd = T(1), T(5), T(9);
+
+  t = diag(m1);
+
+  CPPUNIT_ASSERT( all_elements(vd == t) );
+}
+
+template <class T>
+void
+TestMathOps<T>::MatrixMatrixVector() {
+  {
+    vector_type t1;
+    vector_type vr1(0), vr2(0);	// clear it before use due to util::Gemv algo
+
+    // Matrix-Vector-Vector, referenz is using two ops
+    tvmet::util::Gemv(m1, v1, vr1);
+    tvmet::util::Gevvmul(vr1, vBig, vr2);
+
+    t1 = m1 * v1 * vBig;
+    CPPUNIT_ASSERT( all_elements(t1 == vr2) );
+  }
+#if 0
+  {
+    // XXX not working due to missing operators for (XprMatrix, Vector)
+    vector_type t;
+    matrix_type vr1;
+    vector_type vr2;
+
+    // Matrix-Matrix-Vector
+    tvmet::util::Gemm(m1, mBig, vr1);
+    tvmet::util::Gemv(vr1, v1, vr2);
+
+  }
+#endif
+}
+
+#endif // TVMET_TEST_MATHOPS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestMatrixElementwise.cc b/tvmet-1.7.1/testsuite/TestMatrixElementwise.cc
new file mode 100644
index 0000000..a44fd83
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixElementwise.cc
@@ -0,0 +1,36 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixElementwise.cc,v 1.1 2005/03/09 11:06:21 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestMatrixElementwise.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixElementwise<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixElementwise<int> );
diff --git a/tvmet-1.7.1/testsuite/TestMatrixElementwise.h b/tvmet-1.7.1/testsuite/TestMatrixElementwise.h
new file mode 100644
index 0000000..39ec477
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixElementwise.h
@@ -0,0 +1,238 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixElementwise.h,v 1.2 2005/03/09 11:11:53 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_MATRIX_ELEMENTWISE_H
+#define TVMET_TEST_MATRIX_ELEMENTWISE_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+template <class T>
+class TestMatrixElementwise : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestMatrixElementwise );
+  CPPUNIT_TEST( sqr_add );
+  CPPUNIT_TEST( sqr_xpr_add );
+  CPPUNIT_TEST( sqr_mul );
+  CPPUNIT_TEST( sqr_xpr_mul );
+  CPPUNIT_TEST( nsqr_add );
+  CPPUNIT_TEST( nsqr_xpr_add );
+  CPPUNIT_TEST( nsqr_mul );
+  CPPUNIT_TEST( nsqr_xpr_mul );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  TestMatrixElementwise() { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void sqr_add();
+  void sqr_xpr_add();
+  void sqr_mul();
+  void sqr_xpr_mul();
+
+  void nsqr_add();
+  void nsqr_xpr_add();
+  void nsqr_mul();
+  void nsqr_xpr_mul();
+};
+
+/*****************************************************************************
+ * Implementation part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestMatrixElementwise<T>::setUp() { }
+
+template <class T>
+void TestMatrixElementwise<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation part II, square matrices
+ ****************************************************************************/
+
+template <class T>
+void TestMatrixElementwise<T>::sqr_add() {
+  using namespace tvmet;
+
+  Matrix<T, 3, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 2;
+  M2 = 2;
+
+  Mr1 = M1 + M2;
+  Mr2 = add(M1, M1);
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+template <class T>
+void TestMatrixElementwise<T>::sqr_xpr_add() {
+  using namespace tvmet;
+
+  Matrix<T, 3, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 1;
+  M2 = 1;
+
+  T c1 = 1;
+  T c2 = 1;
+
+  Mr1 = (c1+M1) + (c2+M2);
+  Mr2 = add(add(c1,M1), add(c2,M1));
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+template <class T>
+void TestMatrixElementwise<T>::sqr_mul() {
+  using namespace tvmet;
+
+  Matrix<T, 3, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 2;
+  M2 = 2;
+
+  Mr1 = element_wise::operator*(M1, M2);
+  Mr2 = element_wise::mul(M1, M2);
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+template <class T>
+void TestMatrixElementwise<T>::sqr_xpr_mul() {
+  using namespace tvmet;
+
+  Matrix<T, 3, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 2;
+  M2 = 2;
+
+  T c1 = 1;
+  T c2 = 1;
+
+  Mr1 = element_wise::operator*(c1*M1, c2*M2);
+  Mr2 = element_wise::mul(mul(c1, M1), mul(c2, M2));
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+/*****************************************************************************
+ * Implementation part II, non square matrices
+ ****************************************************************************/
+
+template <class T>
+void TestMatrixElementwise<T>::nsqr_add() {
+  using namespace tvmet;
+
+  Matrix<T, 4, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 2;
+  M2 = 2;
+
+  Mr1 = M1 + M2;
+  Mr2 = add(M1, M1);
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+template <class T>
+void TestMatrixElementwise<T>::nsqr_xpr_add() {
+  using namespace tvmet;
+
+  Matrix<T, 4, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 1;
+  M2 = 1;
+
+  T c1 = 1;
+  T c2 = 1;
+
+  Mr1 = (c1+M1) + (c2+M2);
+  Mr2 = add(add(c1,M1), add(c2,M1));
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+template <class T>
+void TestMatrixElementwise<T>::nsqr_mul() {
+  using namespace tvmet;
+
+  Matrix<T, 4, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 2;
+  M2 = 2;
+
+  Mr1 = element_wise::operator*(M1, M2);
+  Mr2 = element_wise::mul(M1, M2);
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+template <class T>
+void TestMatrixElementwise<T>::nsqr_xpr_mul() {
+  using namespace tvmet;
+
+  Matrix<T, 4, 3>		M1, M2, Mr1, Mr2;
+
+  M1 = 2;
+  M2 = 2;
+
+  T c1 = 1;
+  T c2 = 1;
+
+  Mr1 = element_wise::operator*(c1*M1, c2*M2);
+  Mr2 = element_wise::mul(mul(c1, M1), mul(c2, M2));
+
+  CPPUNIT_ASSERT( all_elements(Mr1 == 4) );
+  CPPUNIT_ASSERT( all_elements(Mr2 == 4) );
+}
+
+
+#endif // TVMET_TEST_MATRIX_ELEMENTWISE_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestMatrixEval.cc b/tvmet-1.7.1/testsuite/TestMatrixEval.cc
new file mode 100644
index 0000000..5f3d27f
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixEval.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixEval.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestMatrixEval.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixEval<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixEval<int> );
diff --git a/tvmet-1.7.1/testsuite/TestMatrixEval.h b/tvmet-1.7.1/testsuite/TestMatrixEval.h
new file mode 100644
index 0000000..63c5a95
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixEval.h
@@ -0,0 +1,307 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixEval.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_MATRIX_EVAL_H
+#define TVMET_TEST_MATRIX_EVAL_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Matrix.h>
+
+#include <cassert>
+
+template <class T>
+class TestMatrixEval : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestMatrixEval );
+  CPPUNIT_TEST( Greater );
+  CPPUNIT_TEST( Less );
+  CPPUNIT_TEST( GreaterOrEqual );
+  CPPUNIT_TEST( LessOrEqual );
+  CPPUNIT_TEST( Equal );
+  CPPUNIT_TEST( NotEqual );
+  CPPUNIT_TEST( LogicalAnd );
+  CPPUNIT_TEST( LogicalOr );
+
+  // others
+  CPPUNIT_TEST( AllElements );
+  CPPUNIT_TEST( AnyElements );
+  CPPUNIT_TEST( Eval3 );
+  CPPUNIT_TEST( EvalPod3 );
+
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestMatrixEval()
+    : mOne(1), mZero(0) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void Greater();
+  void Less();
+  void GreaterOrEqual();
+  void LessOrEqual();
+  void Equal();
+  void NotEqual();
+  void LogicalAnd();
+  void LogicalOr();
+
+  void AllElements();
+  void AnyElements();
+  void Eval3();
+  void EvalPod3();
+
+private:
+  matrix_type m1;
+  matrix_type mBig;	/**< matrix bigger than m1 */
+  const matrix_type mOne;
+  const matrix_type mZero;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestMatrixEval<T>::setUp () {
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+template <class T>
+void TestMatrixEval<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ * these are elemental - therefore we use std::assert
+ ****************************************************************************/
+
+/*
+ * on SelfTest, we have the guarantee, that the container holds the
+ * expected values. Now check comparing operation using tvmet's
+ * eval function. This is the basic for all further test since it's
+ * the way we check the correctness. The other way would be element wise
+ * compare as in SelfTest, urgh...
+ */
+template <class T>
+void
+TestMatrixEval<T>::Greater() {
+  // all test are element wise !
+  assert( all_elements(mBig >  m1) );
+}
+
+template <class T>
+void
+TestMatrixEval<T>::Less() {
+  // all test are element wise !
+  assert( all_elements(m1   <  mBig) );
+}
+
+template <class T>
+void
+TestMatrixEval<T>::GreaterOrEqual() {
+  // all test are element wise !
+  assert( all_elements(mBig >= m1) );
+  assert( all_elements(m1   >= m1) );
+  assert( all_elements(mBig >= mBig) );
+  assert( all_elements(mOne >= T(1)) );
+  assert( all_elements(mZero>= T(0)) );
+}
+
+template <class T>
+void
+TestMatrixEval<T>::LessOrEqual() {
+  // all test are element wise !
+  assert( all_elements(m1   <= mBig) );
+  assert( all_elements(m1   <= m1) );
+  assert( all_elements(mBig <= mBig) );
+  assert( all_elements(mOne <= T(1)) );
+  assert( all_elements(mZero<= T(0)) );
+}
+
+template <class T>
+void
+TestMatrixEval<T>::Equal() {
+  // all test are element wise !
+  assert( all_elements(m1   == m1) );
+  assert( all_elements(mBig == mBig) );
+  assert( all_elements(mOne == T(1)) );
+  assert( all_elements(mZero == T(0)) );
+}
+
+template <class T>
+void
+TestMatrixEval<T>::NotEqual() {
+  // all test are element wise !
+  assert( all_elements(m1   != mBig) );
+}
+
+template <class T>
+void
+TestMatrixEval<T>::LogicalAnd() {
+  // TODO: implement
+}
+
+template <class T>
+void
+TestMatrixEval<T>::LogicalOr() {
+  // TODO: implement
+}
+
+/*****************************************************************************
+ * Implementation Part III
+ * test on generell and eval functions
+ ****************************************************************************/
+
+template <class T>
+void
+TestMatrixEval<T>::AllElements() {
+  // true cases
+  CPPUNIT_ASSERT( all_elements(mBig > T(0)) );
+  CPPUNIT_ASSERT( all_elements(mBig >= T(1)) );
+
+  CPPUNIT_ASSERT( all_elements(mBig < T(1000)) );
+  CPPUNIT_ASSERT( all_elements(mBig <= T(1000)) );
+
+  CPPUNIT_ASSERT( all_elements(T(0) < mBig) );		// possible, I newer would write it
+  CPPUNIT_ASSERT( all_elements(T(1000) > mBig) );	// possible, I newer would write it
+
+  CPPUNIT_ASSERT( all_elements(mOne == T(1)) );
+  CPPUNIT_ASSERT( all_elements(mZero == T(0)) );
+
+  CPPUNIT_ASSERT( all_elements(mBig != T(1000)) );
+
+  // false cases
+  CPPUNIT_ASSERT( !all_elements(mBig < T(0)) );
+}
+
+
+template <class T>
+void
+TestMatrixEval<T>::AnyElements() {
+  // true cases
+  CPPUNIT_ASSERT( any_elements(mBig > T(0)) );
+  CPPUNIT_ASSERT( any_elements(mBig >= T(1)) );
+
+  CPPUNIT_ASSERT( any_elements(mBig < T(1000)) );
+  CPPUNIT_ASSERT( any_elements(mBig <= T(1000)) );
+
+  CPPUNIT_ASSERT( any_elements(T(2) < m1) );	// possible, I newer would write it
+  CPPUNIT_ASSERT( any_elements(T(2) > m1) );	// possible, I newer would write it
+
+  CPPUNIT_ASSERT( any_elements(mOne == T(1)) );
+  CPPUNIT_ASSERT( any_elements(mZero == T(0)) );
+
+  CPPUNIT_ASSERT( any_elements(mBig != T(1000)) );
+
+  // false cases
+  CPPUNIT_ASSERT( !any_elements(mBig < T(2)) );
+  CPPUNIT_ASSERT( !any_elements(mOne == T(0)) );
+  CPPUNIT_ASSERT( !any_elements(mZero == T(1)) );
+}
+
+
+template <class T>
+void
+TestMatrixEval<T>::Eval3() {
+  matrix_type v;
+  T a(1);	// scalar
+
+  // XprMatrix<E1, Rows, Cols> ? Matrix<T2, Rows, Cols> : Matrix<T3, Rows, Cols>
+  v = eval( m1 < mBig, m1, mBig);
+  CPPUNIT_ASSERT( all_elements(v == m1) );
+
+  v = eval( m1 > mBig, m1, mBig);
+  CPPUNIT_ASSERT( all_elements(v == mBig) );
+
+  // XprMatrix<E1, Rows, Cols> ? Matrix<T2, Rows, Cols> : XprMatrix<E3, Rows, Cols>
+  v = eval( m1 < mBig, m1, a*mBig);
+  CPPUNIT_ASSERT( all_elements(v == m1) );
+
+  v = eval( m1 > mBig, m1, a*mBig);
+  CPPUNIT_ASSERT( all_elements(v == mBig) );
+
+  // XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : Matrix<T3, Rows, Cols>
+  v = eval( m1 < mBig, a*m1, mBig);
+  CPPUNIT_ASSERT( all_elements(v == m1) );
+
+  v = eval( m1 > mBig, a*m1, mBig);
+  CPPUNIT_ASSERT( all_elements(v == mBig) );
+
+  // XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : XprMatrix<E3, Rows, Cols>
+  v = eval( m1 < mBig, a*m1, a*mBig);
+  CPPUNIT_ASSERT( all_elements(v == m1) );
+
+  v = eval( m1 > mBig, a*m1, a*mBig);
+  CPPUNIT_ASSERT( all_elements(v == mBig) );
+}
+
+
+template <class T>
+void
+TestMatrixEval<T>::EvalPod3() {
+  matrix_type v;
+  T a(1);	// scalar
+
+  // XprMatrix<E, Rows, Cols> ? POD1 : POD2
+  v = eval( m1 < mBig, T(0), T(1));
+  CPPUNIT_ASSERT( all_elements(v == T(0)) );
+
+  v = eval( m1 > mBig, T(0), T(1));
+  CPPUNIT_ASSERT( all_elements(v == T(1)) );
+
+  // XprMatrix<E1, Rows, Cols> ? POD : XprMatrix<E3, Rows, Cols>
+  v = eval( m1 < mBig, 1, a*mBig);
+  CPPUNIT_ASSERT( all_elements(v == mOne) );
+
+  v = eval( m1 > mBig, 1, a*mBig);
+  CPPUNIT_ASSERT( all_elements(v == mBig) );
+
+  // XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : POD
+  v = eval( m1 < mBig, a*m1, T(1));
+  CPPUNIT_ASSERT( all_elements(v == m1) );
+
+  v = eval( m1 > mBig, a*m1, T(1));
+  CPPUNIT_ASSERT( all_elements(v == mOne) );
+
+}
+
+
+#endif // TVMET_TEST_MATRIX_EVAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestMatrixFunctions.cc b/tvmet-1.7.1/testsuite/TestMatrixFunctions.cc
new file mode 100644
index 0000000..1f418e7
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixFunctions.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixFunctions.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestMatrixFunctions.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixFunctions<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixFunctions<int> );
diff --git a/tvmet-1.7.1/testsuite/TestMatrixFunctions.h b/tvmet-1.7.1/testsuite/TestMatrixFunctions.h
new file mode 100644
index 0000000..a234cee
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixFunctions.h
@@ -0,0 +1,713 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixFunctions.h,v 1.2 2004/07/06 06:24:23 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_MATRIXFUNC_H
+#define TVMET_TEST_MATRIXFUNC_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestMatrixFunctions : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestMatrixFunctions );
+  CPPUNIT_TEST( scalarUpdAssign1 );
+  CPPUNIT_TEST( scalarUpdAssign2 );
+  CPPUNIT_TEST( scalarUpdAssign3 );
+  CPPUNIT_TEST( scalarOps1 );
+  CPPUNIT_TEST( scalarOps2 );
+  CPPUNIT_TEST( globalMatrixFuncs1 );
+  CPPUNIT_TEST( globalMatrixFuncs2 );
+  CPPUNIT_TEST( globalMatrixFuncs3 );
+  CPPUNIT_TEST( fn_prod1 );
+  CPPUNIT_TEST( fn_prod2 );
+  CPPUNIT_TEST( fn_prod3 );
+  CPPUNIT_TEST( fn_trans );
+  CPPUNIT_TEST( fn_MtM_prod );
+  CPPUNIT_TEST( fn_MMt_prod );
+  CPPUNIT_TEST( fn_prodTrans );
+  CPPUNIT_TEST( fn_trace );
+  CPPUNIT_TEST( rowVector );
+  CPPUNIT_TEST( colVector );
+  CPPUNIT_TEST( fn_diag );
+  CPPUNIT_TEST( extremum );
+  CPPUNIT_TEST( identity_matrix );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestMatrixFunctions()
+    : mZero(0), mOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarUpdAssign1();
+  void scalarUpdAssign2();
+  void scalarUpdAssign3();
+  void scalarOps1();
+  void scalarOps2();
+  void globalMatrixFuncs1();
+  void globalMatrixFuncs2();
+  void globalMatrixFuncs3();
+  void fn_prod1();
+  void fn_prod2();
+  void fn_prod3();
+  void fn_trans();
+  void fn_MtM_prod();
+  void fn_MMt_prod();
+  void fn_prodTrans();
+  void fn_trace();
+  void rowVector();
+  void colVector();
+  void fn_diag();
+  void extremum();
+  void identity_matrix();
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  vector_type m1_r0, m1_r1, m1_r2;	// row vectors
+  vector_type m1_c0, m1_c1, m1_c2;	// col vectors
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ *** *************************************************************************/
+
+
+template <class T>
+void TestMatrixFunctions<T>::setUp() {
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+
+  m1_r0 = 1,4,7;
+  m1_r1 = 2,5,8;
+  m1_r2 = 3,6,9;
+
+  m1_c0 = 1,2,3;
+  m1_c1 = 4,5,6;
+  m1_c2 = 7,8,9;
+
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+template <class T>
+void TestMatrixFunctions<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * member math operators with scalars
+ * Since we use it to compare results, these tests are elemental.
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::scalarUpdAssign1() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(mBig);
+
+  t1 += scalar;
+  t2 -= scalar;
+  t3 *= scalar;
+  t4 /= scalar;
+
+  assert(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) &&
+	 t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) &&
+	 t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar));
+  assert(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) &&
+	 t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) &&
+	 t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar));
+  assert( all_elements(t3 == mBig) );
+  assert( all_elements(t4 == m1) );
+}
+
+
+/*
+ * member math operators with Matrizes
+ * Since we use it to compare results, these tests are elemental.
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::scalarUpdAssign2() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(m1);
+
+  t1 += m1;
+  t2 -= m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 *= m1;
+    t4 /= m1;
+  }
+
+  assert(t1(0,0) == (m1(0,0)*2) && t1(0,1) == (m1(0,1)*2) && t1(0,2) == (m1(0,2)*2) &&
+	 t1(1,0) == (m1(1,0)*2) && t1(1,1) == (m1(1,1)*2) && t1(1,2) == (m1(1,2)*2) &&
+	 t1(2,0) == (m1(2,0)*2) && t1(2,1) == (m1(2,1)*2) && t1(2,2) == (m1(2,2)*2));
+  assert( all_elements(t2 == mZero) );
+  assert(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) &&
+	 t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) &&
+	 t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2)));
+  assert( all_elements(t4 == mOne) );
+}
+
+
+/*
+ * member math operators with XprMatrizes
+ * Since we use it to compare results, these tests are elemental.
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::scalarUpdAssign3() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(m1);
+
+  t1 += T(1)*m1;
+  t2 -= T(1)*m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 *= T(1)*m1;
+    t4 /= T(1)*m1;
+  }
+
+  assert( all_elements(t1 == 2*m1) );
+  assert( all_elements(t2 == mZero) );
+  assert(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) &&
+		 t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) &&
+		 t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2)));
+  assert( all_elements(t4 == mOne) );
+}
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::scalarOps1() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+
+  t1 = add(m1, scalar);
+  t2 = sub(m1, scalar);
+  t3 = mul(m1, scalar);
+  t4 = div(mBig, scalar);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::scalarOps2() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  t1 = add(scalar, m1);
+  t2 = mul(scalar, m1);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with matrizes
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::globalMatrixFuncs1() {
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  t1 = add(m1, m1);
+  t2 = sub(m1, m1);
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 = mul(m1, mOne);
+    t4 = div(m1, mOne);
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == 2*m1) );
+  CPPUNIT_ASSERT( all_elements(t2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(t3 == m1) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * global math operators with matrizes and xpr
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::globalMatrixFuncs2() {
+  matrix_type r1(m1), r2(m1), r3(m1), r4(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += T(1)*m1;
+  r2 -= T(1)*m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    r3 *= T(1)*m1;
+    r4 /= T(1)*m1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(m1, m1*T(1));
+  t2 = sub(m1, m1*T(1));
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 = mul(m1, m1*T(1));
+    t4 = div(m1, m1*T(1));
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with matrizes and xpr
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::globalMatrixFuncs3() {
+  matrix_type r1(m1), r2(m1), r3(m1), r4(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += T(1)*m1;
+  r2 -= T(1)*m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    r3 *= T(1)*m1;
+    r4 /= T(1)*m1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(T(1)*m1, m1);
+  t2 = sub(T(1)*m1, m1);
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 = mul(T(1)*m1, m1);
+    t4 = div(T(1)*m1, m1);
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * product functions with matrizes
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_prod1() {
+  matrix_type t1, t2, t3;
+  matrix_type r1, r2, r3;
+
+  tvmet::util::Gemm(m1, m1, r1);
+  tvmet::util::Gemm(m1, mBig, r2);
+  tvmet::util::Gemm(mBig, m1, r3);
+  CPPUNIT_ASSERT( all_elements(r2 == r3) );
+
+  t1 = prod(m1, m1);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+
+  t2 = prod(m1, mBig);
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+
+  t3 = prod(mBig, m1);
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+}
+
+
+/*
+ * product functions with matrizes and xpr
+ * Note: Take care on aliasing!
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_prod2() {
+  matrix_type r1(0), rm(0);
+  matrix_type m2(m1);
+  matrix_type t1;
+
+  rm = scalar*m1;
+
+  tvmet::util::Gemm(m1, rm, r1);
+
+  t1 = prod(m1, scalar*m2 /* alias mBig */);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+}
+
+
+/*
+ * product functions with matrizes
+ * Note: Take care on aliasing!
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_prod3() {
+  matrix_type r1(0), rm(0);
+  matrix_type m2(m1);
+  matrix_type t1;
+
+  rm = scalar*m1;
+
+  tvmet::util::Gemm(rm, m1, r1);
+
+  t1 = prod(scalar*m1 /* alias mBig */, m2);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+}
+
+
+/*
+ * transpose functions with matrizes
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_trans() {
+  matrix_type t1, t2;
+
+  t1 = trans(m1);
+  CPPUNIT_ASSERT( any_elements(t1 != m1) ); // XXX not very clever test
+
+  t2 = trans(t1);	// transpose back
+  CPPUNIT_ASSERT( all_elements(t2 == m1) );
+}
+
+
+/*
+ * matrix function M^T * M
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_MtM_prod() {
+  matrix_type m1t, r1;
+  matrix_type m2;
+
+  // trans() and prod() is checked before!
+  m1t = trans(m1);
+  r1  = prod(m1t, mBig);
+
+  m2  = MtM_prod(m1, mBig);
+
+  CPPUNIT_ASSERT( all_elements(r1 == m2) );
+}
+
+
+/*
+ * matrix function M * M^T
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_MMt_prod() {
+  matrix_type m1t, r1;
+  matrix_type m2;
+
+  // trans() and prod() is checked before!
+  m1t = trans(m1);
+  r1  = prod(mBig, m1t);
+
+  m2  = MMt_prod(mBig, m1);
+
+  CPPUNIT_ASSERT( all_elements(r1 == m2) );
+}
+
+
+/*
+ * matrix function (M * M)^T
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_prodTrans() {
+  matrix_type r1, r1t;
+  matrix_type m2;
+
+  // trans() and prod() is checked before!
+  r1  = prod(m1, mBig);
+  r1t = trans(r1);
+
+  m2  = trans_prod(m1, mBig);
+
+  CPPUNIT_ASSERT( all_elements(r1t == m2) );
+}
+
+
+/*
+ * trace
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_trace() {
+  T t1 = trace(m1);
+  T t2 = trace(mBig);
+
+  CPPUNIT_ASSERT( t1 == (m1(0,0)+m1(1,1)+m1(2,2)) );
+  CPPUNIT_ASSERT( t2 == (mBig(0,0)+mBig(1,1)+mBig(2,2)) );
+}
+
+
+/*
+ * matrix row vector
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::rowVector() {
+  vector_type r0, r1, r2;
+
+  r0 = row(m1, 0);
+  r1 = row(m1, 1);
+  r2 = row(m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(r0 == m1_r0) );
+  CPPUNIT_ASSERT( all_elements(r1 == m1_r1) );
+  CPPUNIT_ASSERT( all_elements(r2 == m1_r2) );
+}
+
+
+/*
+ * matrix col vector
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::colVector() {
+  vector_type c0, c1, c2;
+
+  c0 = col(m1, 0);
+  c1 = col(m1, 1);
+  c2 = col(m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(c0 == m1_c0) );
+  CPPUNIT_ASSERT( all_elements(c1 == m1_c1) );
+  CPPUNIT_ASSERT( all_elements(c2 == m1_c2) );
+}
+
+
+/*
+ * matrix diag vector
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::fn_diag() {
+  vector_type r, v;
+
+  r = 1, 5, 9;
+
+  v = diag(m1);
+
+  CPPUNIT_ASSERT( all_elements(r == v) );
+}
+
+
+/*
+ * extremums
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::extremum() {
+  CPPUNIT_ASSERT(max(m1) == 9);
+  CPPUNIT_ASSERT(min(m1) == 1);
+
+  CPPUNIT_ASSERT(max(mBig) == 90);
+  CPPUNIT_ASSERT(min(mBig) == 10);
+
+  CPPUNIT_ASSERT(maximum(m1).value() == 9);
+  CPPUNIT_ASSERT(maximum(m1).row() == 2);
+  CPPUNIT_ASSERT(maximum(m1).col() == 2);
+
+  CPPUNIT_ASSERT(minimum(m1).value() == 1);
+  CPPUNIT_ASSERT(minimum(m1).row() == 0);
+  CPPUNIT_ASSERT(minimum(m1).col() == 0);
+
+  CPPUNIT_ASSERT(maximum(mBig).value() == 90);
+  CPPUNIT_ASSERT(maximum(mBig).row() == 2);
+  CPPUNIT_ASSERT(maximum(mBig).col() == 2);
+
+  CPPUNIT_ASSERT(minimum(mBig).value() == 10);
+  CPPUNIT_ASSERT(minimum(mBig).row() == 0);
+  CPPUNIT_ASSERT(minimum(mBig).col() == 0);
+}
+
+
+/*
+ * identity
+ */
+template <class T>
+void
+TestMatrixFunctions<T>::identity_matrix() {
+  // XXX strange, why does we have to specify the namespace here?
+  // got error: identifier "identity" is undefined
+  matrix_type E( tvmet::identity<matrix_type>() );
+
+  CPPUNIT_ASSERT( E(0,0) == 1 &&
+		  E(1,1) == 1 &&
+		  E(2,2) == 1);
+
+  CPPUNIT_ASSERT( E(0,1) == 0 &&
+		  E(0,2) == 0 &&
+		  E(1,0) == 0 &&
+		  E(1,2) == 0 &&
+		  E(2,0) == 0 &&
+		  E(2,1) == 0);
+}
+
+
+/*****************************************************************************
+ * Implementation Part II (specialized for ints)
+ ****************************************************************************/
+
+
+/*
+ * member math operators with scalars
+ */
+template <>
+void
+TestMatrixFunctions<int>::scalarUpdAssign1() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(mBig);
+  matrix_type t5(m1), t6(mBig), t7(mBig), t8(mBig), t9(mBig);
+  matrix_type t10(m1), t11(m1);
+
+  t1 += scalar;
+  t2 -= scalar;
+  t3 *= scalar;
+  t4 /= scalar;
+
+  t5 %= scalar;
+  t6 %= scalar;
+  t7 ^= scalar;
+  t8 &= scalar;
+  t9 |= scalar;
+  t10 <<= scalar;
+  t11 >>= scalar2;
+
+  CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) &&
+		 t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) &&
+		 t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar));
+
+  CPPUNIT_ASSERT(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) &&
+		 t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) &&
+		 t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar));
+
+  CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+
+  CPPUNIT_ASSERT( all_elements(t5 == m1) );
+  CPPUNIT_ASSERT( all_elements(t6 == mZero) );
+
+  CPPUNIT_ASSERT(t7(0,0) == (mBig(0,0)^scalar) && t7(0,1) == (mBig(0,1)^scalar) && t7(0,2) == (mBig(0,2)^scalar) &&
+		 t7(1,0) == (mBig(1,0)^scalar) && t7(1,1) == (mBig(1,1)^scalar) && t7(1,2) == (mBig(1,2)^scalar) &&
+		 t7(2,0) == (mBig(2,0)^scalar) && t7(2,1) == (mBig(2,1)^scalar) && t7(2,2) == (mBig(2,2)^scalar));
+
+  CPPUNIT_ASSERT(t8(0,0) == (mBig(0,0)&scalar) && t8(0,1) == (mBig(0,1)&scalar) && t8(0,2) == (mBig(0,2)&scalar) &&
+		 t8(1,0) == (mBig(1,0)&scalar) && t8(1,1) == (mBig(1,1)&scalar) && t8(1,2) == (mBig(1,2)&scalar) &&
+		 t8(2,0) == (mBig(2,0)&scalar) && t8(2,1) == (mBig(2,1)&scalar) && t8(2,2) == (mBig(2,2)&scalar));
+
+  CPPUNIT_ASSERT(t9(0,0) == (mBig(0,0)|scalar) && t9(0,1) == (mBig(0,1)|scalar) && t9(0,2) == (mBig(0,2)|scalar) &&
+		 t9(1,0) == (mBig(1,0)|scalar) && t9(1,1) == (mBig(1,1)|scalar) && t9(1,2) == (mBig(1,2)|scalar) &&
+		 t9(2,0) == (mBig(2,0)|scalar) && t9(2,1) == (mBig(2,1)|scalar) && t9(2,2) == (mBig(2,2)|scalar));
+
+  CPPUNIT_ASSERT(t10(0,0) == (m1(0,0)<<scalar) && t10(0,1) == (m1(0,1)<<scalar) && t10(0,2) == (m1(0,2)<<scalar) &&
+		 t10(1,0) == (m1(1,0)<<scalar) && t10(1,1) == (m1(1,1)<<scalar) && t10(1,2) == (m1(1,2)<<scalar) &&
+		 t10(2,0) == (m1(2,0)<<scalar) && t10(2,1) == (m1(2,1)<<scalar) && t10(2,2) == (m1(2,2)<<scalar));
+
+  CPPUNIT_ASSERT(t11(0,0) == (m1(0,0)>>scalar2) && t11(0,1) == (m1(0,1)>>scalar2) && t11(0,2) == (m1(0,2)>>scalar2) &&
+		 t11(1,0) == (m1(1,0)>>scalar2) && t11(1,1) == (m1(1,1)>>scalar2) && t11(1,2) == (m1(1,2)>>scalar2) &&
+		 t11(2,0) == (m1(2,0)>>scalar2) && t11(2,1) == (m1(2,1)>>scalar2) && t11(2,2) == (m1(2,2)>>scalar2));
+}
+
+/*
+ * TODO: implement other UpdAssign functions, esp. for bit ops
+ * (since functions above are working, all others should work)
+ */
+
+
+#endif // TVMET_TEST_MATRIXFUNC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestMatrixOperators.cc b/tvmet-1.7.1/testsuite/TestMatrixOperators.cc
new file mode 100644
index 0000000..f3e5317
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixOperators.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixOperators.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestMatrixOperators.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixOperators<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestMatrixOperators<int> );
diff --git a/tvmet-1.7.1/testsuite/TestMatrixOperators.h b/tvmet-1.7.1/testsuite/TestMatrixOperators.h
new file mode 100644
index 0000000..ecd28e7
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestMatrixOperators.h
@@ -0,0 +1,317 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestMatrixOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_MATRIXOPS_H
+#define TVMET_TEST_MATRIXOPS_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestMatrixOperators : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestMatrixOperators );
+  CPPUNIT_TEST( scalarUpdAssign1 );
+  CPPUNIT_TEST( scalarUpdAssign2 );
+  CPPUNIT_TEST( scalarUpdAssign3 );
+  CPPUNIT_TEST( scalarOps1 );
+  CPPUNIT_TEST( scalarOps2 );
+  CPPUNIT_TEST( globalMatrixOps );
+  CPPUNIT_TEST( negate );
+  CPPUNIT_TEST( prodOps );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestMatrixOperators()
+    : mZero(0), mOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarUpdAssign1();
+  void scalarUpdAssign2();
+  void scalarUpdAssign3();
+  void scalarOps1();
+  void scalarOps2();
+  void globalMatrixOps();
+  void negate();
+  void prodOps();
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  vector_type m1_r0, m1_r1, m1_r2;	// row vectors
+  vector_type m1_c0, m1_c1, m1_c2;	// col vectors
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestMatrixOperators<T>::setUp() {
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+
+  m1_r0 = 1,4,7;
+  m1_r1 = 2,5,8;
+  m1_r2 = 3,6,9;
+
+  m1_c0 = 1,2,3;
+  m1_c1 = 4,5,6;
+  m1_c2 = 7,8,9;
+
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+template <class T>
+void TestMatrixOperators<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * member math operators with scalars
+ */
+template <class T>
+void
+TestMatrixOperators<T>::scalarUpdAssign1() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(mBig);
+
+  t1 += scalar;
+  t2 -= scalar;
+  t3 *= scalar;
+  t4 /= scalar;
+
+  CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) &&
+		 t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) &&
+		 t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar));
+  CPPUNIT_ASSERT(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) &&
+		 t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) &&
+		 t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar));
+  CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * member math operators with Matrizes
+ */
+template <class T>
+void
+TestMatrixOperators<T>::scalarUpdAssign2() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(m1);
+
+  t1 += m1;
+  t2 -= m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 *= m1;
+    t4 /= m1;
+  }
+
+  CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)*2) && t1(0,1) == (m1(0,1)*2) && t1(0,2) == (m1(0,2)*2) &&
+		 t1(1,0) == (m1(1,0)*2) && t1(1,1) == (m1(1,1)*2) && t1(1,2) == (m1(1,2)*2) &&
+		 t1(2,0) == (m1(2,0)*2) && t1(2,1) == (m1(2,1)*2) && t1(2,2) == (m1(2,2)*2));
+  CPPUNIT_ASSERT( all_elements(t2 == mZero) );
+  CPPUNIT_ASSERT(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) &&
+		 t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) &&
+		 t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2)));
+  CPPUNIT_ASSERT( all_elements(t4 == mOne) );
+}
+
+
+/*
+ * member math operators with XprMatrizes
+ */
+template <class T>
+void
+TestMatrixOperators<T>::scalarUpdAssign3() {
+  // all these functions are element wise
+  matrix_type t1(m1), t2(m1), t3(m1), t4(m1);
+
+  t1 += T(1)*m1;
+  t2 -= T(1)*m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 *= T(1)*m1;
+    t4 /= T(1)*m1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == 2*m1) );
+  CPPUNIT_ASSERT( all_elements(t2 == mZero) );
+  CPPUNIT_ASSERT(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) &&
+		 t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) &&
+		 t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2)));
+  CPPUNIT_ASSERT( all_elements(t4 == mOne) );
+}
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestMatrixOperators<T>::scalarOps1() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+
+  t1 = m1 + scalar;
+  t2 = m1 - scalar;
+  t3 = m1 * scalar;
+  t4 = mBig / scalar;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestMatrixOperators<T>::scalarOps2() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  t1 = scalar + m1;
+  t2 = scalar * m1;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with matrizes
+ */
+template <class T>
+void
+TestMatrixOperators<T>::globalMatrixOps() {
+    matrix_type t1(0), t2(0), t3(0), t4(0);
+
+    t1 = m1 + m1;
+    t2 = m1 - m1;
+
+    {
+      using namespace tvmet::element_wise;
+
+      //t3 = m1 * mOne; // overloaded by global op*()
+      t4 = m1 / mOne;
+    }
+
+    CPPUNIT_ASSERT( all_elements(t1 == 2*m1) );
+    CPPUNIT_ASSERT( all_elements(t2 == T(0)) );
+    //CPPUNIT_ASSERT( all_elements(t3 == m1) );
+    CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * negate operators with matrizes
+ */
+template <class T>
+void
+TestMatrixOperators<T>::negate() {
+  matrix_type m1;
+
+  m1 = -mOne;
+
+  CPPUNIT_ASSERT( all_elements(m1 == T(-1)) );
+}
+
+
+/*
+ * product functions with matrizes
+ * Note: Take care on aliasing!
+ */
+template <class T>
+void
+TestMatrixOperators<T>::prodOps() {
+  matrix_type t1, t2, t3;
+  matrix_type r1, r2, r3;
+  matrix_type m2(m1);;
+
+  tvmet::util::Gemm(m1, m1, r1);
+  tvmet::util::Gemm(m1, mBig, r2);
+  tvmet::util::Gemm(mBig, m1, r3);
+  CPPUNIT_ASSERT( all_elements(r2 == r3) );
+
+  t1 = m1 * m2;
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+
+  t2 = m1 * mBig;
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+
+  t3 = mBig * m1;
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+}
+
+
+#endif // TVMET_TEST_MATRIXOPS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestNumericTraits.cc b/tvmet-1.7.1/testsuite/TestNumericTraits.cc
new file mode 100644
index 0000000..dd0fdfd
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestNumericTraits.cc
@@ -0,0 +1,48 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestNumericTraits.cc,v 1.1 2004/09/15 07:51:43 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestNumericTraits.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<char> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<unsigned char> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<short int> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<unsigned short int> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<int> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<unsigned int> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<long> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<unsigned long> );
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<float> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<double> );
+#if defined(TVMET_HAVE_LONG_DOUBLE)
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraits<long double> );
+#endif
diff --git a/tvmet-1.7.1/testsuite/TestNumericTraits.h b/tvmet-1.7.1/testsuite/TestNumericTraits.h
new file mode 100644
index 0000000..c04d7d1
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestNumericTraits.h
@@ -0,0 +1,261 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestNumericTraits.h,v 1.2 2004/11/04 18:12:40 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_NUMERIC_TRAITS_H
+#define TVMET_TEST_NUMERIC_TRAITS_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <complex>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+#include <cassert>
+
+template <class T>
+class TestNumericTraits : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestNumericTraits );
+  CPPUNIT_TEST( Real );
+  CPPUNIT_TEST( Imag );
+  CPPUNIT_TEST( Conj );
+  CPPUNIT_TEST( Abs );
+  CPPUNIT_TEST( Sqrt );
+  CPPUNIT_TEST( Norm_1 );
+  CPPUNIT_TEST( Norm_2 );
+  CPPUNIT_TEST( Norm_Inf );
+  CPPUNIT_TEST( Equals );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestNumericTraits()
+    : m_real(4), m_imag(9),
+      m_conj(16),
+      m_abs_Q1(7), m_abs_Q2(-m_abs_Q1)
+  { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void Real();
+  void Imag();
+  void Conj();
+  void Abs();
+  void Sqrt();
+  void Norm_1();
+  void Norm_2();
+  void Norm_Inf();
+  void Equals();
+
+protected:
+  // Helper
+  void AbsHelper(tvmet::dispatch<true>, const T&);
+  void AbsHelper(tvmet::dispatch<false>, const T&);
+
+private:
+  const T					m_real;
+  const T					m_imag;
+  const T					m_conj;
+  const T					m_abs_Q1;
+  const T					m_abs_Q2;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestNumericTraits<T>::setUp () { }
+
+template <class T>
+void TestNumericTraits<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+template <class T>
+void
+TestNumericTraits<T>::Real()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type real_type;
+
+  real_type r = tvmet::NumericTraits<T>::real(m_real);
+
+  CPPUNIT_ASSERT( r == m_real );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Imag()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type imag_type;
+
+  imag_type r = tvmet::NumericTraits<T>::imag(m_imag);
+
+  CPPUNIT_ASSERT( r == 0 );
+}
+
+
+// conj only for signed types !!
+template <> void TestNumericTraits<unsigned char>::Conj() { }
+template <> void TestNumericTraits<unsigned short int>::Conj() { }
+template <> void TestNumericTraits<unsigned int>::Conj() { }
+template <> void TestNumericTraits<unsigned long>::Conj() { }
+
+template <class T>
+void
+TestNumericTraits<T>::Conj()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type conj_type;
+
+  conj_type r = tvmet::NumericTraits<T>::conj(m_conj);
+
+  CPPUNIT_ASSERT( r == m_conj );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Abs()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type value_type;
+
+  enum {
+    is_signed = std::numeric_limits<value_type>::is_signed
+  };
+
+  value_type r1 = tvmet::NumericTraits<T>::abs(m_abs_Q1);
+  value_type r2 = tvmet::NumericTraits<T>::abs(m_abs_Q2);
+
+  CPPUNIT_ASSERT( r1 == m_abs_Q1 );
+
+  // result depends on signed type
+  AbsHelper(tvmet::dispatch<is_signed>(), r2);
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::AbsHelper(tvmet::dispatch<true>, const T& r)
+{
+  // signed type
+  CPPUNIT_ASSERT( r == (m_abs_Q1) );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::AbsHelper(tvmet::dispatch<false>, const T& r)
+{
+  // unsigned type
+  CPPUNIT_ASSERT( r == T(-m_abs_Q1) );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Sqrt()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type value_type;
+
+  value_type r1 = tvmet::NumericTraits<T>::sqrt(m_real);
+  value_type r2 = tvmet::NumericTraits<T>::sqrt(m_imag);
+
+  CPPUNIT_ASSERT( r1 == 2 );
+  CPPUNIT_ASSERT( r2 == 3 );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Norm_1()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type value_type;
+
+  value_type r = tvmet::NumericTraits<T>::norm_1(m_real);
+
+  CPPUNIT_ASSERT( r == tvmet::NumericTraits<T>::abs(m_real) );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Norm_2()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type value_type;
+
+  value_type r = tvmet::NumericTraits<T>::norm_2(m_real);
+
+  CPPUNIT_ASSERT( r == tvmet::NumericTraits<T>::abs(m_real) );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Norm_Inf()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type value_type;
+
+  value_type r = tvmet::NumericTraits<T>::norm_inf(m_real);
+
+  CPPUNIT_ASSERT( r == tvmet::NumericTraits<T>::abs(m_real) );
+}
+
+
+template <class T>
+void
+TestNumericTraits<T>::Equals()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type value_type;
+
+  value_type lhs, rhs;
+
+  lhs = rhs = 47;
+
+  CPPUNIT_ASSERT( true == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+
+  // a not very intelligent test
+  rhs += 1;
+
+  CPPUNIT_ASSERT( false == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+}
+
+
+#endif // TVMET_TEST_NUMERIC_TRAITS_H
+
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestNumericTraitsComplex.cc b/tvmet-1.7.1/testsuite/TestNumericTraitsComplex.cc
new file mode 100644
index 0000000..6518724
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestNumericTraitsComplex.cc
@@ -0,0 +1,45 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestNumericTraitsComplex.cc,v 1.1 2004/09/15 07:51:44 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestNumericTraitsComplex.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+#if defined(TVMET_HAVE_COMPLEX)
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<int> > );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<unsigned int> > );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<long> > );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<unsigned long> > );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<float> > );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<double> > );
+# if defined(TVMET_HAVE_LONG_DOUBLE)
+CPPUNIT_TEST_SUITE_REGISTRATION( TestNumericTraitsComplex< std::complex<long double> > );
+# endif
+#endif
diff --git a/tvmet-1.7.1/testsuite/TestNumericTraitsComplex.h b/tvmet-1.7.1/testsuite/TestNumericTraitsComplex.h
new file mode 100644
index 0000000..8591dcf
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestNumericTraitsComplex.h
@@ -0,0 +1,463 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestNumericTraitsComplex.h,v 1.2 2004/11/04 18:12:40 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_NUMERIC_TRAITS_H
+#define TVMET_TEST_NUMERIC_TRAITS_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <complex>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+#include <cassert>
+
+template <class T>
+class TestNumericTraitsComplex : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestNumericTraitsComplex );
+  CPPUNIT_TEST( Real );
+  CPPUNIT_TEST( Imag );
+  CPPUNIT_TEST( Conj );
+  CPPUNIT_TEST( Abs );
+  CPPUNIT_TEST( Sqrt );
+  CPPUNIT_TEST( Norm_1 );
+  CPPUNIT_TEST( Norm_2 );
+  CPPUNIT_TEST( Norm_Inf );
+  CPPUNIT_TEST( Equals );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>				vector_type;
+  typedef tvmet::Matrix<T, 3, 3>			matrix_type;
+
+public:
+  TestNumericTraitsComplex()
+    : m_p_real( 3), m_p_imag( 4),
+      m_n_real(-3), m_n_imag(-4),
+      m_z1(m_p_real, m_p_imag),
+      m_z2(m_n_real, m_p_imag),
+      m_z3(m_n_real, m_n_imag),
+      m_z4(m_p_real, m_n_imag)
+  { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void Real();
+  void Imag();
+  void Conj();
+  void Abs();
+  void Sqrt();
+  void Norm_1();
+  void Norm_2();
+  void Norm_Inf();
+  void Equals();
+
+private:
+  // Helper
+  void AbsHelper(tvmet::dispatch<true>,
+		 typename tvmet::NumericTraits<T>::base_type);
+  void AbsHelper(tvmet::dispatch<false>,
+		 typename tvmet::NumericTraits<T>::base_type);
+  void SqrtHelper(tvmet::dispatch<true>);
+  void SqrtHelper(tvmet::dispatch<false>);
+  void NormHelper(tvmet::dispatch<true>,
+		  typename tvmet::NumericTraits<T>::base_type);
+  void NormHelper(tvmet::dispatch<false>,
+		  typename tvmet::NumericTraits<T>::base_type);
+
+
+private:
+  typedef typename tvmet::NumericTraits<T>::base_type 	base_type;
+  typedef T						value_type;
+
+  const base_type					m_p_real;
+  const base_type					m_p_imag;
+  const base_type					m_n_real;
+  const base_type					m_n_imag;
+
+  // complex quadrant I ... IV
+  const value_type					m_z1;
+  const value_type					m_z2;
+  const value_type					m_z3;
+  const value_type					m_z4;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestNumericTraitsComplex<T>::setUp () { }
+
+template <class T>
+void TestNumericTraitsComplex<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Real()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  base_type r1 = tvmet::NumericTraits<T>::real(m_z1);
+  base_type r2 = tvmet::NumericTraits<T>::real(m_z2);
+  base_type r3 = tvmet::NumericTraits<T>::real(m_z3);
+  base_type r4 = tvmet::NumericTraits<T>::real(m_z4);
+
+  CPPUNIT_ASSERT( r1 == m_p_real );
+  CPPUNIT_ASSERT( r2 == m_n_real );
+  CPPUNIT_ASSERT( r3 == m_n_real );
+  CPPUNIT_ASSERT( r4 == m_p_real );
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Imag()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  base_type i1 = tvmet::NumericTraits<T>::imag(m_z1);
+  base_type i2 = tvmet::NumericTraits<T>::imag(m_z2);
+  base_type i3 = tvmet::NumericTraits<T>::imag(m_z3);
+  base_type i4 = tvmet::NumericTraits<T>::imag(m_z4);
+
+  CPPUNIT_ASSERT( i1 == m_p_imag );
+  CPPUNIT_ASSERT( i2 == m_p_imag );
+  CPPUNIT_ASSERT( i3 == m_n_imag );
+  CPPUNIT_ASSERT( i4 == m_n_imag );
+}
+
+
+// conj only for signed types !!
+template <> void TestNumericTraitsComplex<std::complex<unsigned char> >::Conj() { }
+template <> void TestNumericTraitsComplex<std::complex<unsigned short int> >::Conj() { }
+template <> void TestNumericTraitsComplex<std::complex<unsigned int> >::Conj() { }
+template <> void TestNumericTraitsComplex<std::complex<unsigned long> >::Conj() { }
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Conj()
+{
+  typedef typename tvmet::NumericTraits<T>::value_type value_type;
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  enum {
+    is_signed = std::numeric_limits<base_type>::is_signed
+  };
+
+  // conjugate
+  value_type conj_z1 = tvmet::NumericTraits<T>::conj(m_z1);
+  value_type conj_z2 = tvmet::NumericTraits<T>::conj(m_z2);
+  value_type conj_z3 = tvmet::NumericTraits<T>::conj(m_z3);
+  value_type conj_z4 = tvmet::NumericTraits<T>::conj(m_z4);
+
+  // real part
+  base_type r1 = tvmet::NumericTraits<T>::real(conj_z1);
+  base_type r2 = tvmet::NumericTraits<T>::real(conj_z2);
+  base_type r3 = tvmet::NumericTraits<T>::real(conj_z3);
+  base_type r4 = tvmet::NumericTraits<T>::real(conj_z4);
+
+  // imag part
+  base_type i1 = tvmet::NumericTraits<T>::imag(conj_z1);
+  base_type i2 = tvmet::NumericTraits<T>::imag(conj_z2);
+  base_type i3 = tvmet::NumericTraits<T>::imag(conj_z3);
+  base_type i4 = tvmet::NumericTraits<T>::imag(conj_z4);
+
+  // check on real part; real is tested before
+  CPPUNIT_ASSERT( r1 == tvmet::NumericTraits<T>::real(m_z1) );
+  CPPUNIT_ASSERT( r2 == tvmet::NumericTraits<T>::real(m_z2) );
+  CPPUNIT_ASSERT( r3 == tvmet::NumericTraits<T>::real(m_z3) );
+  CPPUNIT_ASSERT( r4 == tvmet::NumericTraits<T>::real(m_z4) );
+
+  // check on imag part
+  CPPUNIT_ASSERT( i1 == -tvmet::NumericTraits<T>::imag(m_z1) );
+  CPPUNIT_ASSERT( i2 == -tvmet::NumericTraits<T>::imag(m_z2) );
+  CPPUNIT_ASSERT( i3 == -tvmet::NumericTraits<T>::imag(m_z3) );
+  CPPUNIT_ASSERT( i4 == -tvmet::NumericTraits<T>::imag(m_z4) );
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Abs()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  enum {
+    is_signed = std::numeric_limits<base_type>::is_signed
+  };
+
+  base_type a1 = tvmet::NumericTraits<T>::abs(m_z1);
+  base_type a2 = tvmet::NumericTraits<T>::abs(m_z2);
+  base_type a3 = tvmet::NumericTraits<T>::abs(m_z3);
+  base_type a4 = tvmet::NumericTraits<T>::abs(m_z4);
+
+  // result depends on signed type
+  AbsHelper(tvmet::dispatch<is_signed>(), a1);
+  AbsHelper(tvmet::dispatch<is_signed>(), a2);
+  AbsHelper(tvmet::dispatch<is_signed>(), a3);
+  AbsHelper(tvmet::dispatch<is_signed>(), a4);
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::AbsHelper(tvmet::dispatch<true>,
+				typename tvmet::NumericTraits<T>::base_type r)
+{
+  // signed type
+  CPPUNIT_ASSERT( r == 5 );
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::AbsHelper(tvmet::dispatch<false>,
+				typename tvmet::NumericTraits<T>::base_type r)
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  base_type x = m_z1.real();	// sign doesn't matter on abs()
+  base_type y = m_z1.imag();	// sign doesn't matter on abs()
+
+  // unsigned type
+  CPPUNIT_ASSERT( r == static_cast<base_type>(
+			 tvmet::NumericTraits<base_type>::sqrt(x * x + y * y))
+		);
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Sqrt()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  enum {
+    is_signed = std::numeric_limits<base_type>::is_signed
+  };
+
+  // delegate tests
+  SqrtHelper(tvmet::dispatch<is_signed>());
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::SqrtHelper(tvmet::dispatch<true>)
+{
+  // signed type
+  typedef typename tvmet::NumericTraits<T>::value_type value_type;
+
+  // sqrt
+  value_type z1 = tvmet::NumericTraits<T>::sqrt(m_z1);
+  value_type z2 = tvmet::NumericTraits<T>::sqrt(m_z2);
+  value_type z3 = tvmet::NumericTraits<T>::sqrt(m_z3);
+  value_type z4 = tvmet::NumericTraits<T>::sqrt(m_z4);
+
+  CPPUNIT_ASSERT( z1 == value_type(2,1) );
+  CPPUNIT_ASSERT( z2 == value_type(1,2) );
+  CPPUNIT_ASSERT( z3 == value_type(1,-2) );
+  CPPUNIT_ASSERT( z4 == value_type(2,-1) );
+
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::SqrtHelper(tvmet::dispatch<false>)
+{
+  // unsigned type
+
+  /* XXX
+   * very dirty - we assume we calculate right
+   * on "negative" complex types */
+
+  typedef typename tvmet::NumericTraits<T>::value_type value_type;
+
+  // sqrt
+  value_type z1 = tvmet::NumericTraits<T>::sqrt(m_z1);
+  value_type z2 = tvmet::NumericTraits<T>::sqrt(m_z2);
+
+  CPPUNIT_ASSERT( z1 == value_type(2,1) );
+  CPPUNIT_ASSERT( z2 == value_type(1,2) );
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Norm_1()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  enum {
+    is_signed = std::numeric_limits<base_type>::is_signed
+  };
+
+  // norm_1
+  base_type n1 = tvmet::NumericTraits<T>::norm_1(m_z1);
+  base_type n2 = tvmet::NumericTraits<T>::norm_1(m_z2);
+  base_type n3 = tvmet::NumericTraits<T>::norm_1(m_z3);
+  base_type n4 = tvmet::NumericTraits<T>::norm_1(m_z4);
+
+  // result depends on signed type
+  NormHelper(tvmet::dispatch<is_signed>(), n1);
+  NormHelper(tvmet::dispatch<is_signed>(), n2);
+  NormHelper(tvmet::dispatch<is_signed>(), n3);
+  NormHelper(tvmet::dispatch<is_signed>(), n4);
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Norm_2()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  enum {
+    is_signed = std::numeric_limits<base_type>::is_signed
+  };
+
+  // norm_2
+  base_type n1 = tvmet::NumericTraits<T>::norm_2(m_z1);
+  base_type n2 = tvmet::NumericTraits<T>::norm_2(m_z2);
+  base_type n3 = tvmet::NumericTraits<T>::norm_2(m_z3);
+  base_type n4 = tvmet::NumericTraits<T>::norm_2(m_z4);
+
+  // result depends on signed type
+  NormHelper(tvmet::dispatch<is_signed>(), n1);
+  NormHelper(tvmet::dispatch<is_signed>(), n2);
+  NormHelper(tvmet::dispatch<is_signed>(), n3);
+  NormHelper(tvmet::dispatch<is_signed>(), n4);
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Norm_Inf()
+{
+  typedef typename tvmet::NumericTraits<T>::base_type base_type;
+
+  enum {
+    is_signed = std::numeric_limits<base_type>::is_signed
+  };
+
+  // norm_inf
+  base_type n1 = tvmet::NumericTraits<T>::norm_inf(m_z1);
+  base_type n2 = tvmet::NumericTraits<T>::norm_inf(m_z2);
+  base_type n3 = tvmet::NumericTraits<T>::norm_inf(m_z3);
+  base_type n4 = tvmet::NumericTraits<T>::norm_inf(m_z4);
+
+  // result depends on signed type
+  NormHelper(tvmet::dispatch<is_signed>(), n1);
+  NormHelper(tvmet::dispatch<is_signed>(), n2);
+  NormHelper(tvmet::dispatch<is_signed>(), n3);
+  NormHelper(tvmet::dispatch<is_signed>(), n4);
+}
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::NormHelper(tvmet::dispatch<true>,
+				typename tvmet::NumericTraits<T>::base_type)
+{
+  // XXX To be implement
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::NormHelper(tvmet::dispatch<false>,
+				typename tvmet::NumericTraits<T>::base_type)
+{
+  // XXX To be implement
+}
+
+
+template <class T>
+void
+TestNumericTraitsComplex<T>::Equals()
+{
+  // XXX this test is to simple
+
+  typedef typename tvmet::NumericTraits<T>::value_type value_type;
+
+  value_type lhs, rhs;
+
+  {
+    lhs = rhs = m_z1;
+
+    CPPUNIT_ASSERT( true == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+
+    rhs += m_z1;
+
+    CPPUNIT_ASSERT( false == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+  }
+  {
+    lhs = rhs = m_z2;
+
+    CPPUNIT_ASSERT( true == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+
+    rhs += m_z2;
+
+    CPPUNIT_ASSERT( false == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+  }
+  {
+    lhs = rhs = m_z3;
+
+    CPPUNIT_ASSERT( true == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+
+    rhs += m_z3;
+
+    CPPUNIT_ASSERT( false == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+  }
+  {
+    lhs = rhs = m_z4;
+
+    CPPUNIT_ASSERT( true == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+
+    rhs += m_z4;
+
+    CPPUNIT_ASSERT( false == tvmet::NumericTraits<T>::equals(lhs,rhs) );
+  }
+}
+
+
+#endif // TVMET_TEST_NUMERIC_TRAITS_H
+
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestSTL.cc b/tvmet-1.7.1/testsuite/TestSTL.cc
new file mode 100644
index 0000000..8b6d3e5
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestSTL.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestSTL.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestSTL.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestSTL<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestSTL<int> );
diff --git a/tvmet-1.7.1/testsuite/TestSTL.h b/tvmet-1.7.1/testsuite/TestSTL.h
new file mode 100644
index 0000000..25a58cc
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestSTL.h
@@ -0,0 +1,160 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestSTL.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_STL_H
+#define TVMET_TEST_STL_H
+
+#include <vector>
+#include <algorithm>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+/**
+ * gernell test case
+ */
+template <class T>
+class TestSTL : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestSTL );
+  CPPUNIT_TEST( vector_ctor );
+  CPPUNIT_TEST( vector_copy );
+  CPPUNIT_TEST( matrix_ctor );
+  CPPUNIT_TEST( matrix_copy );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+  typedef std::vector<T>			stlvec;
+
+public:
+  TestSTL() { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void vector_ctor();
+  void vector_copy();
+
+  void matrix_ctor();
+  void matrix_copy();
+
+private:
+  stlvec					stl_v1;
+  stlvec					stl_v2;
+  vector_type					v1;
+  matrix_type					m1;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ *** *************************************************************************/
+
+template <class T>
+void TestSTL<T>::setUp() {
+  stl_v1.push_back(static_cast<T>(1));
+  stl_v1.push_back(static_cast<T>(2));
+  stl_v1.push_back(static_cast<T>(3));
+
+  stl_v2.push_back(static_cast<T>(1));
+  stl_v2.push_back(static_cast<T>(2));
+  stl_v2.push_back(static_cast<T>(3));
+  stl_v2.push_back(static_cast<T>(4));
+  stl_v2.push_back(static_cast<T>(5));
+  stl_v2.push_back(static_cast<T>(6));
+  stl_v2.push_back(static_cast<T>(7));
+  stl_v2.push_back(static_cast<T>(8));
+  stl_v2.push_back(static_cast<T>(9));
+}
+
+
+template <class T>
+void TestSTL<T>::tearDown() {
+
+}
+
+
+/*****************************************************************************
+ * Implementation Part II (vector)
+ ****************************************************************************/
+
+
+template <class T>
+void
+TestSTL<T>::vector_ctor() {
+  vector_type v(stl_v1.begin(), stl_v1.end());
+
+  CPPUNIT_ASSERT( std::equal(stl_v1.begin(), stl_v1.end(), v.begin()) == true );
+}
+
+
+template <class T>
+void
+TestSTL<T>::vector_copy() {
+  vector_type v;
+
+  std::copy(stl_v1.begin(), stl_v1.end(), v.begin());
+
+  CPPUNIT_ASSERT( std::equal(stl_v1.begin(), stl_v1.end(), v.begin()) == true );
+}
+
+
+/*****************************************************************************
+ * Implementation Part II (matrix)
+ ****************************************************************************/
+
+
+template <class T>
+void
+TestSTL<T>::matrix_ctor() {
+  matrix_type m(stl_v2.begin(), stl_v2.end());
+
+  CPPUNIT_ASSERT( std::equal(stl_v2.begin(), stl_v2.end(), m.begin()) == true );
+}
+
+
+template <class T>
+void
+TestSTL<T>::matrix_copy() {
+  matrix_type m;
+
+  std::copy(stl_v2.begin(), stl_v2.end(), m.begin());
+
+  CPPUNIT_ASSERT( std::equal(stl_v2.begin(), stl_v2.end(), m.begin()) == true );
+}
+
+
+#endif // TVMET_TEST_STL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestUnFunc.cc b/tvmet-1.7.1/testsuite/TestUnFunc.cc
new file mode 100644
index 0000000..d41b6e1
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestUnFunc.cc
@@ -0,0 +1,67 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestUnFunc.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestUnFunc.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+/*****************************************************************************
+ * Implementation Part I (cppunit integer part)
+ ****************************************************************************/
+
+/*
+ * Is specialized for int, therefore it's like a normal class definition
+ * and can placed into a cc file.
+ */
+TestUnFunc<int>::TestUnFunc()
+  : vZero(0), vOne(1), vMinusOne(-1), vTwo(2)
+  , mZero(0), mOne(1), mMinusOne(-1), mTwo(2)
+{ }
+
+void TestUnFunc<int>::setUp() { }
+
+void TestUnFunc<int>::tearDown() { }
+
+
+/*****************************************************************************
+ * Implementation Part II (integer part)
+ ****************************************************************************/
+void TestUnFunc<int>::fn_abs() {
+  vector_type v;
+  matrix_type m;
+
+  // abs
+  v = abs(vMinusOne);
+  m = abs(mMinusOne);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+}
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestUnFunc<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestUnFunc<int> );
diff --git a/tvmet-1.7.1/testsuite/TestUnFunc.h b/tvmet-1.7.1/testsuite/TestUnFunc.h
new file mode 100644
index 0000000..45aee9c
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestUnFunc.h
@@ -0,0 +1,383 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestUnFunc.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_UNFUNC_H
+#define TVMET_TEST_UNFUNC_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+
+/**
+ * generic
+ */
+template <class T>
+class TestUnFunc : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestUnFunc );
+  CPPUNIT_TEST( fn_abs );
+  CPPUNIT_TEST( Round );
+  CPPUNIT_TEST( Arc );
+  CPPUNIT_TEST( Log );
+  CPPUNIT_TEST( Nan );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestUnFunc()
+    : vZero(0), vOne(1), vMinusOne(-1), vTwo(2), vE(M_E),
+      mZero(0), mOne(1), mMinusOne(-1), mTwo(2), mE(M_E),
+      scalar(10)
+  { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void fn_abs();
+  void Round();
+  void Arc();
+  void Log();
+  void Nan();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  const vector_type vMinusOne;
+  const vector_type vTwo;
+  const vector_type vE;
+  vector_type v1, v1b;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  const matrix_type mMinusOne;
+  const matrix_type mTwo;
+  const matrix_type mE;
+  matrix_type m1, m1b;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  const T scalar;
+};
+
+
+/**
+ * specialized for int's (it doesn't support all binary functions, like sqrt(int))
+ */
+template <>
+class TestUnFunc<int> : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestUnFunc<int> );
+  CPPUNIT_TEST( fn_abs );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<int, 3>			vector_type;
+  typedef tvmet::Matrix<int, 3, 3>		matrix_type;
+
+public:
+  TestUnFunc();
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void fn_abs();
+
+private:
+  const vector_type vZero, vOne, vMinusOne, vTwo;
+
+private:
+  const matrix_type mZero, mOne, mMinusOne, mTwo;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestUnFunc<T>::setUp() {
+  v1 = 1,2,3;
+  v1b = v1;		// same as v1, cctor test done in checkInternal
+  vBig = 10,20,30;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+  m1b = m1;		// same as m1, cctor test done in checkInternal
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+template <class T>
+void TestUnFunc<T>::tearDown() {
+
+}
+
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+template <class T>
+void
+TestUnFunc<T>::fn_abs() {
+  vector_type v, tv;
+  matrix_type m, tm;
+}
+
+
+template <class T>
+void
+TestUnFunc<T>::Round() {
+  vector_type v, tv;
+  matrix_type m, tm;
+
+  // abs
+  v = abs(vMinusOne);
+  m = abs(mMinusOne);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+
+#if 0  // XXX cbrt not in std ?!
+  v = cbrt(vOne);
+  m = cbrt(mOne);
+  CPPUNIT_ASSERT( all_elements(v == std::cbrt(1)) );
+  CPPUNIT_ASSERT( all_elements(m == std::cbrt(1)) );
+#endif
+
+  // ceil
+  tv = vOne + 0.5;
+  tm = mOne + 0.5;
+  v = ceil(tv);
+  m = ceil(tm);
+  CPPUNIT_ASSERT( all_elements(v == vTwo) );
+  CPPUNIT_ASSERT( all_elements(m == mTwo) );
+
+  // floor
+  tv = vTwo - 0.5;
+  tm = mTwo - 0.5;
+  v = floor(tv);
+  m = floor(tm);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+
+#if 0  // XXX rint not in std ?!
+  tv = vTwo - 0.5;
+  tm = mTwo - 0.5;
+  v = rint(tv);
+  m = rint(tm);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+#endif
+}
+
+template <class T>
+void
+TestUnFunc<T>::Arc() {
+  vector_type v, tv;
+  matrix_type m, tm;
+
+  // sin
+  tv = M_PI/2.0;
+  tm = M_PI/2.0;
+  v = sin(tv);
+  m = sin(tm);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+
+  // cos
+  tv = 2.0*M_PI;
+  tm = 2.0*M_PI;
+  v = cos(tv);
+  m = cos(tm);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+
+  // tan
+  tv = M_PI/4.0;
+  tm = M_PI/4.0;
+  v = tan(tv);
+  m = tan(tm);
+  // precision problems, using element wise compare
+  CPPUNIT_ASSERT( all_elements(v == tan(M_PI/4.0) ) ); // this failed by OP
+  CPPUNIT_ASSERT( all_elements(m == tan(M_PI/4.0) ) ); // this not ...
+
+  // asin
+  v = asin(vOne);
+  m = asin(mOne);
+  // precision problems, using element wise compare
+  CPPUNIT_ASSERT( all_elements(v == M_PI/2.0 ) );
+  CPPUNIT_ASSERT( all_elements(m == M_PI/2.0 ) );
+
+  // acos
+  v = acos(vOne);
+  m = acos(mOne);
+  CPPUNIT_ASSERT( all_elements(v == 0.0) );
+  CPPUNIT_ASSERT( all_elements(m == 0.0) );
+
+  // atan
+  v = atan(vOne);
+  m = atan(mOne);
+  CPPUNIT_ASSERT( all_elements(v == M_PI/4.0) );
+  CPPUNIT_ASSERT( all_elements(m == M_PI/4.0) );
+}
+
+template <class T>
+void
+TestUnFunc<T>::Log() {
+  vector_type v, tv;
+  matrix_type m, tm;
+
+  // exp
+  tv = vOne;
+  tm = mOne;
+  v = exp(tv);
+  m = exp(tm);
+  CPPUNIT_ASSERT( all_elements(v == vE) );
+  CPPUNIT_ASSERT( all_elements(m == mE) );
+
+  // log naturalis
+  tv = vE;
+  tm = mE;
+  v = log(tv);
+  m = log(tm);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+  CPPUNIT_ASSERT( all_elements(m == mOne) );
+
+  // log10
+  tv = vOne;
+  tm = mOne;
+  v = log10(tv);
+  m = log10(tm);
+  // precision problems, using element wise compare
+  CPPUNIT_ASSERT( all_elements(v == log10(1.0)) );
+  CPPUNIT_ASSERT( all_elements(m == log10(1.0)) );
+
+  // sqrt
+  tv = 9;
+  tm = 9;
+  v = sqrt(tv);
+  m = sqrt(tm);
+  CPPUNIT_ASSERT( all_elements(v == 3) );
+  CPPUNIT_ASSERT( all_elements(m == 3) );
+}
+
+template <class T>
+void
+TestUnFunc<T>::Nan() {
+#ifdef HAVE_IEEE_MATH
+  vector_type v;
+  matrix_type m;
+
+  // isnan
+  v = NAN;
+  m = NAN;
+  CPPUNIT_ASSERT( all_elements(isnan(v)) );
+  CPPUNIT_ASSERT( all_elements(isnan(m)) );
+
+  CPPUNIT_ASSERT( all_elements(!isnan(v1)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(vBig)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(vOne)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(vZero)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(m1)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(mBig)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(mOne)) );
+  CPPUNIT_ASSERT( all_elements(!isnan(mZero)) );
+
+  // isinf(1)
+  v = HUGE_VAL;
+  m = HUGE_VAL;
+  CPPUNIT_ASSERT( all_elements(isinf(v) > 0) ); 	// == 1
+  CPPUNIT_ASSERT( all_elements(isinf(m) > 0) );		// == 1
+
+  v = -HUGE_VAL;
+  m = -HUGE_VAL;
+
+  CPPUNIT_ASSERT( all_elements(isinf(v) < 0) ); 	// == -1
+  CPPUNIT_ASSERT( all_elements(isinf(m) < 0) );		// == -1
+
+  // isinf(2)
+  CPPUNIT_ASSERT( all_elements(!isinf(v1)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(vBig)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(vOne)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(vZero)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(m1)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(mBig)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(mOne)) );
+  CPPUNIT_ASSERT( all_elements(!isinf(mZero)) );
+
+#if 0  // XXX finite not in std ?!
+  v = NAN;
+  m = NAN;
+  CPPUNIT_ASSERT( all_elements(finite(v) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(m) != 0) );
+
+  CPPUNIT_ASSERT( all_elements(finite(v1) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(vBig) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(vOne) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(vZero) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(m1) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(mBig) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(mOne) != 0) );
+  CPPUNIT_ASSERT( all_elements(finite(mZero) != 0) );
+
+  v = HUGE_VAL;
+  m = HUGE_VAL;
+  CPPUNIT_ASSERT( all_elements(finite(v) == 0) );
+  CPPUNIT_ASSERT( all_elements(finite(m) == 0) );
+
+  v = -HUGE_VAL;
+  m = -HUGE_VAL;
+
+  CPPUNIT_ASSERT( all_elements(finite(v) == 0) );
+  CPPUNIT_ASSERT( all_elements(finite(m) == 0) );
+#endif
+
+#endif // HAVE_IEEE_MATH
+}
+
+
+
+#endif // TVMET_TEST_UNFUNC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestUnloops.cc b/tvmet-1.7.1/testsuite/TestUnloops.cc
new file mode 100644
index 0000000..81b1219
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestUnloops.cc
@@ -0,0 +1,36 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestUnloops.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestUnloops.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestUnloops<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestUnloops<int> );
diff --git a/tvmet-1.7.1/testsuite/TestUnloops.h b/tvmet-1.7.1/testsuite/TestUnloops.h
new file mode 100644
index 0000000..36830de
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestUnloops.h
@@ -0,0 +1,417 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestUnloops.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_UNLOOPS_H
+#define TVMET_TEST_UNLOOPS_H
+
+#include <algorithm>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/Incrementor.h>
+
+
+template <class T>
+class TestUnloops : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestUnloops );
+  CPPUNIT_TEST( Mx );
+  CPPUNIT_TEST( Mtx );
+  CPPUNIT_TEST( MM );
+//   CPPUNIT_TEST( MtM );
+//   CPPUNIT_TEST( MMt );
+//   CPPUNIT_TEST( tMM );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  TestUnloops() { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  template<class A, class B, class C>
+  void mv_product(const A&, const B&, C&);
+
+  template<class A, class B, class C>
+  void mm_product(const A&, const B&, C&);
+
+  template<class A, class B, class C>
+  void mtm_product(const A&, const B&, C&);
+
+  template<class A, class B, class C>
+  void mmt_product(const A&, const B&, C&);
+
+protected:
+  void Mx();
+  void Mtx();
+  void MM();
+  void MtM();
+  void MMt();
+  void tMM();
+
+public:
+  typedef T				value_type;
+
+private:
+  enum {
+    dim = 8,
+    foo = 2
+  };
+};
+
+/*****************************************************************************
+ * Implementation part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestUnloops<T>::setUp() { }
+
+template <class T>
+void TestUnloops<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation part II (reference loops)
+ ****************************************************************************/
+template<class T>
+template<class LHS, class RHS, class RES>
+void TestUnloops<T>::mv_product(const LHS& A, const RHS& B, RES& X) {
+  assert(int(LHS::Rows) == int(RES::Size));
+  assert(int(LHS::Cols) == int(RHS::Size));
+
+  enum {
+    M = LHS::Rows,
+    N = RHS::Size // is Vector
+  };
+
+  for (std::size_t i = 0; i < M; i++){
+    value_type sum(0);
+    for (std::size_t j = 0; j < N; j++){
+      sum += A(i, j) * B(j);
+    }
+    X(i) = sum;
+  }
+}
+
+template<class T>
+template<class LHS, class RHS, class RES>
+void TestUnloops<T>::mm_product(const LHS& A, const RHS& B, RES& X) {
+  assert(int(LHS::Rows) == int(RES::Rows));
+  assert(int(LHS::Cols) == int(RHS::Rows));
+  assert(int(RHS::Cols) == int(RES::Cols));
+
+  enum {
+    M = LHS::Rows,
+    N = RHS::Cols,
+    K = RHS::Rows
+  };
+
+  for (std::size_t i = 0; i < M; ++i) {
+    for (std::size_t j = 0; j < N; ++j) {
+      value_type sum(0);
+      for (std::size_t k = 0; k < K; ++k) {
+	sum += A(i, k) * B(k, j);
+      }
+      X(i, j) = sum;
+    }
+  }
+}
+
+template<class T>
+template<class LHS, class RHS, class RES>
+void TestUnloops<T>::mtm_product(const LHS& A, const RHS& B, RES& X) {
+  assert(int(LHS::Rows) == int(RHS::Rows));
+  assert(int(LHS::Cols) == int(RES::Rows));
+  assert(int(RHS::Cols) == int(RES::Cols));
+
+  enum {
+    M = LHS::Cols,
+    N = RHS::Cols,
+    K = RHS::Rows
+  };
+
+  for (std::size_t i = 0; i < N; i++){
+    for (std::size_t j = 0; j < N; j++){
+      value_type sum(0);
+      for (std::size_t k = 0; k < K; k++){
+	sum += A(k, i) * B(k, j);
+      }
+      X(i, j) = sum;
+    }
+  }
+}
+
+template<class T>
+template<class LHS, class RHS, class RES>
+void TestUnloops<T>::mmt_product(const LHS& A, const RHS& B, RES& X) {
+  assert(int(LHS::Rows) == int(RES::Rows));
+  assert(int(LHS::Cols) == int(RHS::Cols));
+  assert(int(RHS::Rows) == int(RES::Cols));
+
+  enum {
+    M = LHS::Rows,
+    N = RHS::Rows,
+    K = LHS::Cols
+  };
+
+  for (std::size_t i = 0;i < N; i++){
+    for (std::size_t j = 0;j < N; j++){
+      value_type sum(0);
+      for (std::size_t k = 0;k < N; k++){
+	sum += A(i, k)*A(j, k);
+      }
+      X(i, j) = sum;
+    }
+  }
+}
+
+/*****************************************************************************
+ * Implementation part III
+ ****************************************************************************/
+
+template <class T>
+void TestUnloops<T>::Mx() {
+  using namespace tvmet;
+
+  enum {
+    Rows = dim-foo,
+    Cols = dim+foo,
+  };
+
+  typedef Matrix<T, Rows, Cols>          	matrix1_type;
+  typedef Vector<T, matrix1_type::Cols>		vector1_type;
+  typedef Vector<T, matrix1_type::Rows>		vector2_type;
+
+  matrix1_type          			M;
+  vector1_type          			x;
+
+  std::generate(M.begin(), M.end(),
+		tvmet::util::Incrementor<typename vector1_type::value_type>());
+  std::generate(x.begin(), x.end(),
+		tvmet::util::Incrementor<typename vector2_type::value_type>());
+
+  vector2_type          			r;
+  mv_product(M, x, r);
+
+  vector2_type          			y;
+  y = prod(M, x);
+
+  CPPUNIT_ASSERT( all_elements( y == r ) );
+}
+
+
+template <class T>
+void TestUnloops<T>::Mtx() {
+  using namespace tvmet;
+
+  enum {
+    Rows = dim-foo,
+    Cols = dim+foo,
+  };
+
+  typedef Matrix<T, Rows, Cols>          	matrix1_type;
+  typedef Matrix<T,
+    matrix1_type::Cols, matrix1_type::Rows>    	matrix1t_type;
+  typedef Vector<T, matrix1t_type::Cols>        vector1_type;
+  typedef Vector<T, matrix1t_type::Rows>	vector2_type;
+
+  matrix1_type          			M;
+  vector1_type          			x;
+
+  std::generate(M.begin(), M.end(),
+		tvmet::util::Incrementor<typename matrix1_type::value_type>());
+  std::generate(x.begin(), x.end(),
+		tvmet::util::Incrementor<typename vector1_type::value_type>());
+
+  vector2_type          			r;
+  matrix1t_type					Mt(trans(M));
+  mv_product(Mt, x, r);
+
+  vector2_type          			y;
+  y = Mtx_prod(M, x);
+
+  CPPUNIT_ASSERT( all_elements( y == r ) );
+}
+
+
+template <class T>
+void TestUnloops<T>::MM() {
+  using namespace tvmet;
+
+  enum {
+    Rows1 = dim-foo,
+    Cols1 = dim+foo,
+    Cols2 = dim
+  };
+
+  typedef Matrix<T, Rows1, Cols1>          	matrix1_type;
+  typedef Matrix<T, Cols1, Cols2>          	matrix2_type;
+  typedef Matrix<T,
+    matrix1_type::Rows, matrix2_type::Cols>	matrix3_type;
+
+  matrix1_type          			M1;
+  matrix2_type          			M2;
+
+  std::generate(M1.begin(), M1.end(),
+		tvmet::util::Incrementor<typename matrix1_type::value_type>());
+  std::generate(M2.begin(), M2.end(),
+		tvmet::util::Incrementor<typename matrix2_type::value_type>());
+
+  matrix3_type          			R;
+  mm_product(M1, M2, R);
+
+  matrix3_type          			M3;
+  M3 = prod(M1, M2);
+
+  CPPUNIT_ASSERT( all_elements( M3 == R ) );
+}
+
+
+template <class T>
+void TestUnloops<T>::MtM() {
+  using namespace tvmet;
+
+  enum {
+    Rows1 = dim-foo,
+    Cols1 = dim+foo,
+    Cols2 = dim
+  };
+
+  typedef Matrix<T, Rows1, Cols1>          	matrix1_type;
+  typedef Matrix<T, Rows1, Cols2>          	matrix2_type;
+  typedef Matrix<T,
+    matrix1_type::Cols, matrix2_type::Cols>	matrix3_type;
+
+  matrix1_type          			M1;
+  matrix2_type          			M2;
+
+  std::generate(M1.begin(), M1.end(),
+		tvmet::util::Incrementor<typename matrix1_type::value_type>());
+  std::generate(M2.begin(), M2.end(),
+		tvmet::util::Incrementor<typename matrix2_type::value_type>());
+
+  matrix3_type          			R;
+  mtm_product(M1, M2, R);
+
+  matrix3_type          			M3;
+  M3 = MtM_prod(M1, M2);
+
+  std::cout << "M1=" << M1 << std::endl;
+  std::cout << "M2=" << M2 << std::endl;
+  std::cout << "M3=" << M3 << std::endl;
+  std::cout << "R=" << R << std::endl;
+
+  CPPUNIT_ASSERT( all_elements( M3 == R ) );
+}
+
+
+template <class T>
+void TestUnloops<T>::MMt() {
+  using namespace tvmet;
+
+  enum {
+    Rows1 = dim-foo,
+    Cols1 = dim+foo,
+    Rows2 = dim
+  };
+
+  typedef Matrix<T, Rows1, Cols1>          	matrix1_type;
+  typedef Matrix<T, Rows2, Cols1>          	matrix2_type;
+  typedef Matrix<T,
+    matrix1_type::Rows, matrix2_type::Rows>	matrix3_type;
+
+  matrix1_type          			M1;
+  matrix2_type          			M2;
+
+  std::generate(M1.begin(), M1.end(),
+		tvmet::util::Incrementor<typename matrix1_type::value_type>());
+  std::generate(M2.begin(), M2.end(),
+		tvmet::util::Incrementor<typename matrix2_type::value_type>());
+
+  matrix3_type          			R;
+  mmt_product(M1, M2, R);
+
+  matrix3_type          			M3;
+  M3 = MMt_prod(M1, M2);
+
+  std::cout << "M1=" << M1 << std::endl;
+  std::cout << "M2=" << M2 << std::endl;
+  std::cout << "M3=" << M3 << std::endl;
+  std::cout << "R=" << R << std::endl;
+
+  CPPUNIT_ASSERT( all_elements( M3 == R ) );
+}
+
+
+template <class T>
+void TestUnloops<T>::tMM() {
+  using namespace tvmet;
+
+  enum {
+    Rows1 = dim-foo,
+    Cols1 = dim+foo,
+    Cols2 = dim
+  };
+
+  typedef Matrix<T, Rows1, Cols1>          	matrix1_type;
+  typedef Matrix<T, Cols1, Cols2>          	matrix2_type;
+  typedef Matrix<T,
+    matrix1_type::Rows, matrix2_type::Cols>	matrix3_type;
+  typedef Matrix<T,
+    matrix3_type::Cols, matrix3_type::Rows>	matrix3t_type;
+
+  matrix1_type          			M1;
+  matrix2_type          			M2;
+
+  std::generate(M1.begin(), M1.end(),
+		tvmet::util::Incrementor<typename matrix1_type::value_type>());
+  std::generate(M2.begin(), M2.end(),
+		tvmet::util::Incrementor<typename matrix2_type::value_type>());
+
+  matrix3_type          			R;
+  matrix3t_type          			Rt;
+  mm_product(M1, M2, R);
+  Rt = trans(R);
+
+  matrix3t_type          			M3;
+  M3 = trans_prod(M1, M2);
+
+  std::cout << "M1=" << M1 << std::endl;
+  std::cout << "M2=" << M2 << std::endl;
+  std::cout << "M3=" << M3 << std::endl;
+  std::cout << "Rt=" << Rt << std::endl;
+
+  CPPUNIT_ASSERT( all_elements( M3 == Rt ) );
+}
+
+#endif // TVMET_TEST_UNLOOPS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestVectorEval.cc b/tvmet-1.7.1/testsuite/TestVectorEval.cc
new file mode 100644
index 0000000..bbef4e7
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestVectorEval.cc
@@ -0,0 +1,36 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestVectorEval.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+#include <complex>
+
+#include <TestVectorEval.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestVectorEval<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestVectorEval<int> );
diff --git a/tvmet-1.7.1/testsuite/TestVectorEval.h b/tvmet-1.7.1/testsuite/TestVectorEval.h
new file mode 100644
index 0000000..8beee50
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestVectorEval.h
@@ -0,0 +1,304 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestVectorEval.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_VECTOR_EVAL_H
+#define TVMET_TEST_VECTOR_EVAL_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+
+#include <cassert>
+
+template <class T>
+class TestVectorEval : public CppUnit::TestFixture
+{
+  // basic tests
+  CPPUNIT_TEST_SUITE( TestVectorEval );
+  CPPUNIT_TEST( Greater );
+  CPPUNIT_TEST( Less );
+  CPPUNIT_TEST( GreaterOrEqual );
+  CPPUNIT_TEST( LessOrEqual );
+  CPPUNIT_TEST( Equal );
+  CPPUNIT_TEST( NotEqual );
+  CPPUNIT_TEST( LogicalAnd );
+  CPPUNIT_TEST( LogicalOr );
+
+  // others
+  CPPUNIT_TEST( AllElements );
+  CPPUNIT_TEST( AnyElements );
+  CPPUNIT_TEST( Eval3 );
+  CPPUNIT_TEST( EvalPod3 );
+
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+
+public:
+  TestVectorEval()
+    : vOne(1), vZero(0) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void Greater();
+  void Less();
+  void GreaterOrEqual();
+  void LessOrEqual();
+  void Equal();
+  void NotEqual();
+  void LogicalAnd();
+  void LogicalOr();
+
+  void AllElements();
+  void AnyElements();
+  void Eval3();
+  void EvalPod3();
+
+private:
+  vector_type v1;
+  vector_type vBig;	/**< vector bigger than v1 */
+  const vector_type vOne;
+  const vector_type vZero;
+
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestVectorEval<T>::setUp () {
+  v1 = 1,2,3;
+  vBig = 10,20,30;
+}
+
+template <class T>
+void TestVectorEval<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ * these are elemental - therefore we use std::assert
+ ****************************************************************************/
+
+/*
+ * on SelfTest, we have the guarantee, that the container holds the
+ * expected values. Now check comparing operation using tvmet's
+ * eval function. This is the basic for all further test since it's
+ * the way we check the correctness. The other way would be element wise
+ * compare as in SelfTest, urgh...
+ */
+template <class T>
+void
+TestVectorEval<T>::Greater() {
+  // all test are element wise !
+  assert( all_elements(vBig >  v1) );
+}
+
+template <class T>
+void
+TestVectorEval<T>::Less() {
+  // all test are element wise !
+  assert( all_elements(v1   <  vBig) );
+}
+
+template <class T>
+void
+TestVectorEval<T>::GreaterOrEqual() {
+  // all test are element wise !
+  assert( all_elements(vBig >= v1) );
+  assert( all_elements(v1   >= v1) );
+  assert( all_elements(vBig >= vBig) );
+  assert( all_elements(vOne >= T(1)) );
+  assert( all_elements(vZero>= T(0)) );
+}
+
+template <class T>
+void
+TestVectorEval<T>::LessOrEqual() {
+  // all test are element wise !
+  assert( all_elements(v1   <= vBig) );
+  assert( all_elements(v1   <= v1) );
+  assert( all_elements(vBig <= vBig) );
+  assert( all_elements(vOne <= T(1)) );
+  assert( all_elements(vZero<= T(0)) );
+}
+
+template <class T>
+void
+TestVectorEval<T>::Equal() {
+  // all test are element wise !
+  assert( all_elements(v1   == v1) );
+  assert( all_elements(vBig == vBig) );
+  assert( all_elements(vOne == 1) );
+  assert( all_elements(vZero == T(0)) );
+}
+
+template <class T>
+void
+TestVectorEval<T>::NotEqual() {
+  // all test are element wise !
+  assert( all_elements(v1   != vBig) );
+}
+
+template <class T>
+void
+TestVectorEval<T>::LogicalAnd() {
+  // TODO: implement
+}
+
+template <class T>
+void
+TestVectorEval<T>::LogicalOr() {
+  // TODO: implement
+}
+
+/*****************************************************************************
+ * Implementation Part III
+ * test on generell and eval functions
+ ****************************************************************************/
+
+template <class T>
+void
+TestVectorEval<T>::AllElements() {
+  // true cases
+  CPPUNIT_ASSERT( all_elements(vBig > T(0)) );
+  CPPUNIT_ASSERT( all_elements(vBig >= T(1)) );
+
+  CPPUNIT_ASSERT( all_elements(vBig < T(1000)) );
+  CPPUNIT_ASSERT( all_elements(vBig <= T(1000)) );
+
+  CPPUNIT_ASSERT( all_elements(T(0) < vBig) );		// possible, I newer would write it
+  CPPUNIT_ASSERT( all_elements(T(1000) > vBig) );	// possible, I newer would write it
+
+  CPPUNIT_ASSERT( all_elements(vOne == T(1)) );
+  CPPUNIT_ASSERT( all_elements(vZero == T(0)) );
+
+  CPPUNIT_ASSERT( all_elements(vBig != T(1000)) );
+
+  // false cases
+  CPPUNIT_ASSERT( !all_elements(vBig < T(0)) );
+}
+
+
+template <class T>
+void
+TestVectorEval<T>::AnyElements() {
+  // true cases
+  CPPUNIT_ASSERT( any_elements(vBig > T(0)) );
+  CPPUNIT_ASSERT( any_elements(vBig >= T(1)) );
+
+  CPPUNIT_ASSERT( any_elements(vBig < T(1000)) );
+  CPPUNIT_ASSERT( any_elements(vBig <= T(1000)) );
+
+  CPPUNIT_ASSERT( any_elements(T(2) < v1) );	// possible, I newer would write it
+  CPPUNIT_ASSERT( any_elements(T(2) > v1) );	// possible, I newer would write it
+
+  CPPUNIT_ASSERT( any_elements(vOne == T(1)) );
+  CPPUNIT_ASSERT( any_elements(vZero == T(0)) );
+
+  CPPUNIT_ASSERT( any_elements(vBig != T(1000)) );
+
+  // false cases
+  CPPUNIT_ASSERT( !any_elements(vBig < T(2)) );
+  CPPUNIT_ASSERT( !any_elements(vOne == T(0)) );
+  CPPUNIT_ASSERT( !any_elements(vZero == T(1)) );
+}
+
+
+template <class T>
+void
+TestVectorEval<T>::Eval3() {
+  vector_type v;
+  T a(1);	// scalar
+
+  // XprVector<E1, Sz> ? Vector<T2, Sz> : Vector<T3, Sz>
+  v = eval( v1 < vBig, v1, vBig);
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+
+  v = eval( v1 > vBig, v1, vBig);
+  CPPUNIT_ASSERT( all_elements(v == vBig) );
+
+  // XprVector<E1, Sz> ? Vector<T2, Sz> : XprVector<E3, Sz>
+  v = eval( v1 < vBig, v1, a*vBig);
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+
+  v = eval( v1 > vBig, v1, a*vBig);
+  CPPUNIT_ASSERT( all_elements(v == vBig) );
+
+  // XprVector<E1, Sz> ? XprVector<E2, Sz> : Vector<T3, Sz>
+  v = eval( v1 < vBig, a*v1, vBig);
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+
+  v = eval( v1 > vBig, a*v1, vBig);
+  CPPUNIT_ASSERT( all_elements(v == vBig) );
+
+  // XprVector<E1, Sz> ? XprVector<E2, Sz> : XprVector<E3, Sz>
+  v = eval( v1 < vBig, a*v1, a*vBig);
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+
+  v = eval( v1 > vBig, a*v1, a*vBig);
+  CPPUNIT_ASSERT( all_elements(v == vBig) );
+}
+
+
+template <class T>
+void
+TestVectorEval<T>::EvalPod3() {
+  vector_type v;
+  T a(1);	// scalar
+
+  // XprVector<E, Sz> ? POD1 : POD2
+  v = eval( v1 < vBig, T(0), T(1));
+  CPPUNIT_ASSERT( all_elements(v == T(0)) );
+
+  v = eval( v1 > vBig, T(0), T(1));
+  CPPUNIT_ASSERT( all_elements(v == T(1)) );
+
+  // XprVector<E1, Sz> ? POD : XprVector<E3, Sz>
+  v = eval( v1 < vBig, 1, a*vBig);
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+
+  v = eval( v1 > vBig, 1, a*vBig);
+  CPPUNIT_ASSERT( all_elements(v == vBig) );
+
+  // XprVector<E1, Sz> ? XprVector<E2, Sz> : POD
+  v = eval( v1 < vBig, a*v1, T(1));
+  CPPUNIT_ASSERT( all_elements(v == v1) );
+
+  v = eval( v1 > vBig, a*v1, T(1));
+  CPPUNIT_ASSERT( all_elements(v == vOne) );
+}
+
+
+#endif // TVMET_TEST_VECTOR_EVAL_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestVectorFunctions.cc b/tvmet-1.7.1/testsuite/TestVectorFunctions.cc
new file mode 100644
index 0000000..2fec21e
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestVectorFunctions.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestVectorFunctions.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestVectorFunctions.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestVectorFunctions<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestVectorFunctions<int> );
diff --git a/tvmet-1.7.1/testsuite/TestVectorFunctions.h b/tvmet-1.7.1/testsuite/TestVectorFunctions.h
new file mode 100644
index 0000000..77a3233
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestVectorFunctions.h
@@ -0,0 +1,500 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestVectorFunctions.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_VECTORFUNC_H
+#define TVMET_TEST_VECTORFUNC_H
+
+#include <limits>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestVectorFunctions : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestVectorFunctions );
+  CPPUNIT_TEST( scalarUpdAssign1 );
+  CPPUNIT_TEST( scalarUpdAssign2 );
+  CPPUNIT_TEST( scalarUpdAssign3 );
+  CPPUNIT_TEST( scalarFuncs1 );
+  CPPUNIT_TEST( scalarFuncs2 );
+  CPPUNIT_TEST( globalVectorFuncs1 );
+  CPPUNIT_TEST( globalVectorFuncs2 );
+  CPPUNIT_TEST( globalVectorFuncs3 );
+  CPPUNIT_TEST( fn_sum );
+  CPPUNIT_TEST( fn_product );
+  CPPUNIT_TEST( fn_dot );
+  CPPUNIT_TEST( fn_cross );
+  CPPUNIT_TEST( fn_norm );
+  CPPUNIT_TEST( extremum );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+
+public:
+  TestVectorFunctions()
+    : vZero(0), vOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarUpdAssign1();
+  void scalarUpdAssign2();
+  void scalarUpdAssign3();
+  void scalarFuncs1();
+  void scalarFuncs2();
+  void globalVectorFuncs1();
+  void globalVectorFuncs2();
+  void globalVectorFuncs3();
+  void fn_sum();
+  void fn_product();
+  void fn_dot();
+  void fn_cross();
+  void fn_norm();
+  void extremum();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+
+template <class T>
+void TestVectorFunctions<T>::setUp() {
+  v1 = 1,2,3;
+  vBig = 10,20,30;
+}
+
+
+template <class T>
+void TestVectorFunctions<T>::tearDown() { }
+
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * member math operators with scalars
+ * Since we use it to compare results, these tests are elemental.
+ */
+template <class T>
+void
+TestVectorFunctions<T>::scalarUpdAssign1() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(vBig);
+
+  t1 += scalar;
+  t2 -= scalar;
+  t3 *= scalar;
+  t4 /= scalar;
+
+  assert(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar));
+  assert(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar));
+  assert( all_elements(t3 == vBig) );
+  assert( all_elements(t4 == v1) );
+}
+
+
+/*
+ * member math operators with Vectors
+ * Since we use it to compare results, these tests are elemental.
+ */
+template <class T>
+void
+TestVectorFunctions<T>::scalarUpdAssign2() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(v1);
+
+  t1 += v1;
+  t2 -= v1;
+  t3 *= v1;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 /= v1;
+  }
+
+  assert( all_elements(t1 == 2*v1) );
+  assert( all_elements(t2 == vZero) );
+  assert(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2)));
+  assert( all_elements(t4 == 1) );
+}
+
+
+/*
+ * member math operators with XprVector
+ * Since we use it to compare results, these tests are elemental.
+ */
+template <class T>
+void
+TestVectorFunctions<T>::scalarUpdAssign3() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(v1);
+
+  t1 += T(1)*v1;
+  t2 -= T(1)*v1;
+  t3 *= T(1)*v1;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 /= T(1)*v1;
+  }
+
+  assert( all_elements(t1 == 2*v1) );
+  assert( all_elements(t2 == vZero) );
+  assert(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2)));
+  assert( all_elements(t4 == vOne) );
+}
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestVectorFunctions<T>::scalarFuncs1() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(vBig);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+  r3 *= scalar;
+  r4 /= scalar;
+
+  // all element wise
+  t1 = add(v1, scalar);
+  t2 = sub(v1, scalar);
+  t3 = mul(v1, scalar);
+  t4 = div(vBig, scalar);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestVectorFunctions<T>::scalarFuncs2() {
+  vector_type r1(v1), r2(v1);
+  vector_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  // all element wise
+  t1 = add(scalar, v1);
+  t2 = mul(scalar, v1);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with vectors (using functions)
+ */
+template <class T>
+void
+TestVectorFunctions<T>::globalVectorFuncs1() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += v1;
+  r2 -= v1;
+  r3 *= v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(v1, v2);
+  t2 = sub(v1, v2);
+  t3 = mul(v1, v2);
+  t4 = tvmet::element_wise::div(v1, v1);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with vectors and xpr (using functions)
+ */
+template <class T>
+void
+TestVectorFunctions<T>::globalVectorFuncs2() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += T(1)*v1;
+  r2 -= T(1)*v1;
+  r3 *= T(1)*v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= T(1)*v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(v1, T(1)*v2);
+  t2 = sub(v1, T(1)*v2);
+  t3 = mul(v1, T(1)*v2);
+  t4 = tvmet::element_wise::div(v1, T(1)*v1);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with vectors with xpr (using functions)
+ */
+template <class T>
+void
+TestVectorFunctions<T>::globalVectorFuncs3() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += T(1)*v1;
+  r2 -= T(1)*v1;
+  r3 *= T(1)*v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= T(1)*v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(T(1)*v1, v2);
+  t2 = sub(T(1)*v1, v2);
+  t3 = mul(T(1)*v1, v2);
+  t4 = tvmet::element_wise::div(T(1)*v1, v1);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * sum of vector
+ */
+template <class T>
+void
+TestVectorFunctions<T>::fn_sum() {
+  T t = sum(v1);
+
+  CPPUNIT_ASSERT( t == (v1(0) + v1(1) + v1(2)));
+}
+
+
+/*
+ * prod of vector
+ */
+template <class T>
+void
+TestVectorFunctions<T>::fn_product() {
+  T t = product(v1);
+
+  CPPUNIT_ASSERT( t == (v1(0) * v1(1) * v1(2)));
+}
+
+
+/*
+ * dot product
+ */
+template <class T>
+void
+TestVectorFunctions<T>::fn_dot() {
+  vector_type v2(v1);
+
+  T t1 = dot(v1, v2);
+  CPPUNIT_ASSERT( t1 == 14 );
+
+  T t2 = dot(v1, vBig);
+  CPPUNIT_ASSERT( t2 == 140 );
+
+  T t3 = dot(v1, vOne);
+  CPPUNIT_ASSERT( t3 == 6 );
+
+  T t4 = dot(v1, vZero);
+  CPPUNIT_ASSERT( t4 == 0 );
+}
+
+
+/*
+ * cross product
+ */
+template <class T>
+void
+TestVectorFunctions<T>::fn_cross() {
+  vector_type v2(v1);
+
+  vector_type t1 = cross(v1, v2);
+  CPPUNIT_ASSERT( all_elements(t1 == vZero) );	// orthogonal vectors
+
+  vector_type t2 = cross(v1, vBig);
+  CPPUNIT_ASSERT( all_elements(t2 == vZero) );	// orthogonal vectors
+
+  const vector_type r(-1,2,-1);
+  vector_type t3 = cross(v1, vOne);
+  CPPUNIT_ASSERT( all_elements(t3 == r) );
+
+  vector_type t4 = cross(v1, vZero);
+  CPPUNIT_ASSERT( all_elements(t4 == vZero) );
+}
+
+
+/*
+ * norm
+ * Note: norm2 for ints specialized
+ */
+template <class T>
+void
+TestVectorFunctions<T>::fn_norm() {
+  vector_type v2;
+  vector_type r;
+  vector_type t5;
+
+  v2 = -v1;		// norm can't handle XprVector<> yet
+
+  T t1 = norm1(v1);
+  T t2 = norm1(v2);
+  T t3 = norm2(v1);
+  T t4 = norm2(v2);
+
+  CPPUNIT_ASSERT( t1 == sum(v1) );
+  CPPUNIT_ASSERT( t2 == sum(v1) );
+  CPPUNIT_ASSERT( std::abs(t3 - std::sqrt(static_cast<typename tvmet::NumericTraits<T>::float_type>(14)))
+		  < std::numeric_limits<T>::epsilon() );
+  CPPUNIT_ASSERT( std::abs(t4 - std::sqrt(static_cast<typename tvmet::NumericTraits<T>::float_type>(14)))
+		  < std::numeric_limits<T>::epsilon() );
+
+  r = v1/norm2(v1); 	// norm2 is checked before
+  t5 = normalize(v1);
+
+  CPPUNIT_ASSERT( all_elements(t5 == r) );
+}
+
+
+/*
+ * min/max functions
+ */
+template <class T>
+void
+TestVectorFunctions<T>::extremum() {
+  CPPUNIT_ASSERT(max(v1) == 3);
+  CPPUNIT_ASSERT(min(v1) == 1);
+
+  CPPUNIT_ASSERT(max(vBig) == 30);
+  CPPUNIT_ASSERT(min(vBig) == 10);
+
+  CPPUNIT_ASSERT(maximum(v1).value() == 3);
+  CPPUNIT_ASSERT(maximum(v1).index() == 2);
+
+  CPPUNIT_ASSERT(minimum(v1).value() == 1);
+  CPPUNIT_ASSERT(minimum(v1).index() == 0);
+
+  CPPUNIT_ASSERT(maximum(vBig).value() == 30);
+  CPPUNIT_ASSERT(maximum(vBig).index() == 2);
+
+  CPPUNIT_ASSERT(minimum(vBig).value() == 10);
+  CPPUNIT_ASSERT(minimum(vBig).index() == 0);
+}
+
+
+/*****************************************************************************
+ * Implementation Part II (specialized for ints)
+ ****************************************************************************/
+
+
+/*
+ * norm on int specialized due to rounding problems
+ */
+template <>
+void
+TestVectorFunctions<int>::fn_norm() {
+  vector_type v2;
+  v2 = -v1;
+
+  int t1 = norm1(v1);
+  int t2 = norm1(v2);
+  CPPUNIT_ASSERT( t1 == sum(v1) );
+  CPPUNIT_ASSERT( t2 == sum(v1) );
+}
+
+
+#endif // TVMET_TEST_VECTORFUNC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestVectorOperators.cc b/tvmet-1.7.1/testsuite/TestVectorOperators.cc
new file mode 100644
index 0000000..3633964
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestVectorOperators.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestVectorOperators.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestVectorOperators.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestVectorOperators<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestVectorOperators<int> );
diff --git a/tvmet-1.7.1/testsuite/TestVectorOperators.h b/tvmet-1.7.1/testsuite/TestVectorOperators.h
new file mode 100644
index 0000000..78e14bf
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestVectorOperators.h
@@ -0,0 +1,414 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestVectorOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_VECTORPOS_H
+#define TVMET_TEST_VECTORPOS_H
+
+#include <limits>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestVectorOperators : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestVectorOperators );
+  CPPUNIT_TEST( scalarUpdAssign1 );
+  CPPUNIT_TEST( scalarUpdAssign2 );
+  CPPUNIT_TEST( scalarUpdAssign3 );
+  CPPUNIT_TEST( scalarOps1 );
+  CPPUNIT_TEST( scalarOps2 );
+  CPPUNIT_TEST( globalVectorOps1 );
+  CPPUNIT_TEST( globalVectorOps2 );
+  CPPUNIT_TEST( globalVectorOps3 );
+  CPPUNIT_TEST( negate );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+
+public:
+  TestVectorOperators()
+    : vZero(0), vOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarUpdAssign1();
+  void scalarUpdAssign2();
+  void scalarUpdAssign3();
+  void scalarOps1();
+  void scalarOps2();
+  void globalVectorOps1();
+  void globalVectorOps2();
+  void globalVectorOps3();
+  void negate();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+
+template <class T>
+void TestVectorOperators<T>::setUp() {
+  v1 = 1,2,3;
+  vBig = 10,20,30;
+}
+
+
+template <class T>
+void TestVectorOperators<T>::tearDown() { }
+
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * member math operators with scalars;
+ */
+template <class T>
+void
+TestVectorOperators<T>::scalarUpdAssign1() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(vBig);
+
+  t1 += scalar;
+  t2 -= scalar;
+  t3 *= scalar;
+  t4 /= scalar;
+
+  CPPUNIT_ASSERT(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar));
+  CPPUNIT_ASSERT(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar));
+  CPPUNIT_ASSERT( all_elements(t3 == vBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == v1) );
+}
+
+
+/*
+ * member math operators with Vectors
+ */
+template <class T>
+void
+TestVectorOperators<T>::scalarUpdAssign2() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(v1);
+
+  t1 += v1;
+  t2 -= v1;
+  t3 *= v1;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 /= v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == 2*v1) );
+  CPPUNIT_ASSERT( all_elements(t2 == vZero) );
+  CPPUNIT_ASSERT(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2)));
+  CPPUNIT_ASSERT( all_elements(t4 == 1) );
+}
+
+
+/*
+ * member math operators with XprVector
+ */
+template <class T>
+void
+TestVectorOperators<T>::scalarUpdAssign3() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(v1);
+
+  t1 += T(1)*v1;
+  t2 -= T(1)*v1;
+  t3 *= T(1)*v1;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 /= T(1)*v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == 2*v1) );
+  CPPUNIT_ASSERT( all_elements(t2 == vZero) );
+  CPPUNIT_ASSERT(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2)));
+  CPPUNIT_ASSERT( all_elements(t4 == vOne) );
+}
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestVectorOperators<T>::scalarOps1() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(vBig);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+  r3 *= scalar;
+  r4 /= scalar;
+
+  // all element wise
+  t1 = v1 + scalar;
+  t2 = v1 - scalar;
+  t3 = v1 * scalar;
+  t4 = vBig / scalar;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestVectorOperators<T>::scalarOps2() {
+  vector_type r1(v1), r2(v1);
+  vector_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  // all element wise
+  t1 = scalar + v1;
+  t2 = scalar * v1;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with vectors
+ */
+template <class T>
+void
+TestVectorOperators<T>::globalVectorOps1() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += v1;
+  r2 -= v1;
+  r3 *= v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = v1 + v2;
+  t2 = v1 - v2;
+  t3 = v1 * v2;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 = v1 / v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with vectors and xpr
+ */
+template <class T>
+void
+TestVectorOperators<T>::globalVectorOps2() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += T(1)*v1;
+  r2 -= T(1)*v1;
+  r3 *= T(1)*v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= T(1)*v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = v1 + T(1)*v2;
+  t2 = v1 - T(1)*v2;
+  t3 = v1 * T(1)*v2;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 = v1 / ( T(1)*v1 );
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with vectors with xpr
+ */
+template <class T>
+void
+TestVectorOperators<T>::globalVectorOps3() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += T(1)*v1;
+  r2 -= T(1)*v1;
+  r3 *= T(1)*v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= T(1)*v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = (T(1)*v1) + v2;
+  t2 = (T(1)*v1) - v2;
+  t3 = (T(1)*v1) * v2;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 = (T(1)*v1) / v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * negate operators
+ */
+template <class T>
+void
+TestVectorOperators<T>::negate() {
+  vector_type v2;
+
+  v2 = -vOne;
+
+  CPPUNIT_ASSERT( all_elements(v2 == T(-1)) );
+}
+
+
+/*****************************************************************************
+ * Implementation Part II (specialized for ints)
+ ****************************************************************************/
+
+
+/*
+ * member math operators with scalars
+ */
+template <>
+void
+TestVectorOperators<int>::scalarUpdAssign1() {
+  // all these functions are element wise
+  vector_type t1(v1), t2(v1), t3(v1), t4(vBig);
+  vector_type t5(v1), t6(vBig), t7(vBig), t8(vBig), t9(vBig);
+  vector_type t10(v1), t11(v1);
+
+  t1 += scalar;
+  t2 -= scalar;
+  t3 *= scalar;
+  t4 /= scalar;
+
+  t5 %= scalar;
+  t6 %= scalar;
+  t7 ^= scalar;
+  t8 &= scalar;
+  t9 |= scalar;
+  t10 <<= scalar;
+  t11 >>= scalar2;
+
+  CPPUNIT_ASSERT(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar));
+  CPPUNIT_ASSERT(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar));
+  CPPUNIT_ASSERT( all_elements(t3 == vBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == v1) );
+  CPPUNIT_ASSERT( all_elements(t5 == v1) );
+  CPPUNIT_ASSERT( all_elements(t6 == vZero) );
+  CPPUNIT_ASSERT(t7(0) == (vBig(0)^scalar)  && t7(1) == (vBig(1)^scalar) && t7(2) == (vBig(2)^scalar) );
+  CPPUNIT_ASSERT(t8(0) == (vBig(0)&scalar)  && t8(1) == (vBig(1)&scalar) && t8(2) == (vBig(2)&scalar) );
+  CPPUNIT_ASSERT(t9(0) == (vBig(0)|scalar)  && t9(1) == (vBig(1)|scalar) && t9(2) == (vBig(2)|scalar) );
+  CPPUNIT_ASSERT(t10(0) == (v1(0)<<scalar)  && t10(1) == (v1(1)<<scalar) && t10(2) == (v1(2)<<scalar) );
+  CPPUNIT_ASSERT(t11(0) == (v1(0)>>scalar2) && t11(1) == (v1(1)>>scalar2) && t11(2) == (v1(2)>>scalar2) );
+}
+
+/*
+ * TODO: implement other UpdAssign functions, esp. for bit ops
+ * (since functions above are working, all others should work)
+ */
+
+
+#endif // TVMET_TEST_VECTORPOS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestXpr.cc b/tvmet-1.7.1/testsuite/TestXpr.cc
new file mode 100644
index 0000000..002fb18
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXpr.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXpr.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestXpr.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXpr<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXpr<int> );
diff --git a/tvmet-1.7.1/testsuite/TestXpr.h b/tvmet-1.7.1/testsuite/TestXpr.h
new file mode 100644
index 0000000..ce472fd
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXpr.h
@@ -0,0 +1,223 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXpr.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_XPR_H
+#define TVMET_TEST_XPR_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestXpr : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestXpr );
+  CPPUNIT_TEST( fn_MMProd );
+  CPPUNIT_TEST( fn_MMMProd );
+  CPPUNIT_TEST( fn_MVProd );
+  CPPUNIT_TEST( op_MMProd );
+  CPPUNIT_TEST( op_MMMProd );
+  CPPUNIT_TEST( op_MVProd );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestXpr()
+    : vZero(0), vOne(1), mZero(0), mOne(1), scalar(10) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void fn_MMProd();
+  void fn_MMMProd();
+  void fn_MVProd();
+  void op_MMProd();
+  void op_MMMProd();
+  void op_MVProd();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1, v1b;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1, m1b;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  const T scalar;
+};
+
+/*****************************************************************************
+ * Implementation part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestXpr<T>::setUp() {
+  v1 = 1,2,3;
+  v1b = v1;
+  vBig = 10,20,30;
+
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+  m1b = m1;
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+template <class T>
+void TestXpr<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation part II
+ ****************************************************************************/
+
+/*
+ * XprMatrix - XprMatrix
+ */
+template <class T>
+void
+TestXpr<T>::fn_MMProd() {
+  matrix_type mr1(0), mr2(0), mr(0);
+  matrix_type m;
+
+  tvmet::util::Gemm(m1, mOne, mr1);
+  tvmet::util::Gemm(m1, mOne, mr2);
+  tvmet::util::Gemm(mr1, mr2, mr);
+
+  // XprMatrix * XprMatrix
+  m = prod(prod(m1,mOne), prod(m1,mOne));
+
+  CPPUNIT_ASSERT( all_elements(mr == m) );
+}
+
+/*
+ * Matrix - XprMatrix - XprMatrix
+ */
+template <class T>
+void
+TestXpr<T>::fn_MMMProd() {
+  matrix_type m;
+  matrix_type rhs(0), r(0);
+
+  tvmet::util::Gemm(m1, m1, rhs);
+  tvmet::util::Gemm(m1, rhs, r);
+
+  // Matrix * XprMatrix * XprMatrix
+  m = prod(m1, prod(m1, m1));
+
+  CPPUNIT_ASSERT( all_elements(r == m) );
+}
+
+/*
+ * XprMatrix - XprVector
+ */
+template <class T>
+void
+TestXpr<T>::fn_MVProd() {
+  matrix_type mr1(0);
+  vector_type vr(0), v;
+
+  tvmet::util::Gemm(m1, mOne, mr1);
+  tvmet::util::Gemv(mr1, v1, vr);
+
+  // XprMatrix * XprVector
+  v = prod(prod(m1,mOne), mul(v1,vOne));
+
+  CPPUNIT_ASSERT( all_elements(vr == v) );
+}
+
+/*
+ * XprMatrix - XprMatrix
+ */
+template <class T>
+void
+TestXpr<T>::op_MMProd() {
+  matrix_type mr1(0), mr2(0), mr(0), m;
+
+  tvmet::util::Gemm(m1, mOne, mr1);
+  tvmet::util::Gemm(m1, mOne, mr2);
+  tvmet::util::Gemm(mr1, mr2, mr);
+
+  // XprMatrix * XprMatrix
+  m = (m1*mOne)*(m1*mOne);
+
+  CPPUNIT_ASSERT( all_elements(mr == m) );
+}
+
+/*
+ * Matrix - XprMatrix - XprMatrix
+ */
+template <class T>
+void
+TestXpr<T>::op_MMMProd() {
+  matrix_type m;
+  matrix_type rhs(0), r(0);
+
+  tvmet::util::Gemm(m1, m1, rhs);
+  tvmet::util::Gemm(m1, rhs, r);
+
+  // Matrix * XprMatrix * XprMatrix
+  m = m1 * m1 * m1;
+
+  CPPUNIT_ASSERT( all_elements(r == m) );
+}
+
+/*
+ * XprMatrix - XprVector
+ */
+template <class T>
+void
+TestXpr<T>::op_MVProd() {
+  matrix_type mr1(0);
+  vector_type vr(0), v;
+
+  tvmet::util::Gemm(m1, mOne, mr1);
+  tvmet::util::Gemv(mr1, v1, vr);
+
+  // XprMatrix * XprVector
+  v = (m1*mOne)*(v1*vOne);
+
+  CPPUNIT_ASSERT( all_elements(vr == v) );
+}
+
+#endif // TVMET_TEST_XPR_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.cc b/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.cc
new file mode 100644
index 0000000..cde5a04
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprMatrixFunctions.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestXprMatrixFunctions.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprMatrixFunctions<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprMatrixFunctions<int> );
diff --git a/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h b/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h
new file mode 100644
index 0000000..c0d53df
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h
@@ -0,0 +1,562 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprMatrixFunctions.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_XPR_MATRIXFUNC_H
+#define TVMET_TEST_XPR_MATRIXFUNC_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestXprMatrixFunctions : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestXprMatrixFunctions );
+  CPPUNIT_TEST( scalarFuncs1 );
+  CPPUNIT_TEST( scalarFuncs2 );
+  CPPUNIT_TEST( globalXprMatrixFuncs1 );
+  CPPUNIT_TEST( globalXprMatrixFuncs2 );
+  CPPUNIT_TEST( globalXprMatrixFuncs3 );
+  CPPUNIT_TEST( fn_prod1 );
+  CPPUNIT_TEST( fn_prod2 );
+  CPPUNIT_TEST( fn_prod3 );
+  CPPUNIT_TEST( fn_trans );
+  CPPUNIT_TEST( fn_MtM_prod );
+  CPPUNIT_TEST( fn_MMt_prod );
+  CPPUNIT_TEST( fn_prodTrans );
+  CPPUNIT_TEST( fn_trace );
+  CPPUNIT_TEST( rowVector1 );
+  CPPUNIT_TEST( rowVector2 );
+  CPPUNIT_TEST( colVector1 );
+  CPPUNIT_TEST( colVector2 );
+  CPPUNIT_TEST( fn_diag1 );
+  CPPUNIT_TEST( fn_diag2 );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestXprMatrixFunctions()
+    : mZero(0), mOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarFuncs1();
+  void scalarFuncs2();
+  void globalXprMatrixFuncs1();
+  void globalXprMatrixFuncs2();
+  void globalXprMatrixFuncs3();
+  void fn_prod1();
+  void fn_prod2();
+  void fn_prod3();
+  void fn_trans();
+  void fn_MtM_prod();
+  void fn_MMt_prod();
+  void fn_prodTrans();
+  void fn_trace();
+  void rowVector1();
+  void rowVector2();
+  void colVector1();
+  void colVector2();
+  void fn_diag1();
+  void fn_diag2();
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  vector_type m1_r0, m1_r1, m1_r2;	// row vectors
+  vector_type m1_c0, m1_c1, m1_c2;	// col vectors
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ *** *************************************************************************/
+
+
+template <class T>
+void TestXprMatrixFunctions<T>::setUp() {
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+
+  m1_r0 = 1,4,7;
+  m1_r1 = 2,5,8;
+  m1_r2 = 3,6,9;
+
+  m1_c0 = 1,2,3;
+  m1_c1 = 4,5,6;
+  m1_c2 = 7,8,9;
+
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+
+template <class T>
+void TestXprMatrixFunctions<T>::tearDown() { }
+
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::scalarFuncs1() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+
+  t1 = add(T(1)*m1, scalar);
+  t2 = sub(T(1)*m1, scalar);
+  t3 = mul(T(1)*m1, scalar);
+  t4 = div(T(1)*mBig, scalar);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::scalarFuncs2() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  t1 = add(scalar, T(1)*m1);
+  t2 = mul(scalar, T(1)*m1);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with matrizes
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::globalXprMatrixFuncs1() {
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+  matrix_type m2(m1);
+
+  t1 = add(T(1)*m1, T(1)*m2);
+  t2 = sub(T(1)*m1, T(1)*m2);
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 = mul(T(1)*m1, T(1)*mOne);
+    t4 = div(T(1)*m1, T(1)*mOne);
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == 2*m1) );
+  CPPUNIT_ASSERT( all_elements(t2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(t3 == m1) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * global math operators with matrizes and xpr
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::globalXprMatrixFuncs2() {
+  matrix_type r1(m1), r2(m1), r3(m1), r4(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+  matrix_type m2(m1);
+
+  r1 += T(1)*m1;
+  r2 -= T(1)*m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    r3 *= T(1)*m1;
+    r4 /= T(1)*m1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(T(1)*m1, m2*T(1));
+  t2 = sub(T(1)*m1, m2*T(1));
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 = mul(T(1)*m1, m2*T(1));
+    t4 = div(T(1)*m1, m2*T(1));
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with matrizes and xpr
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::globalXprMatrixFuncs3() {
+  matrix_type r1(m1), r2(m1), r3(m1), r4(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+  matrix_type m2(m1);
+
+  r1 += T(1)*m1;
+  r2 -= T(1)*m1;
+
+  {
+    using namespace tvmet::element_wise;
+
+    r3 *= T(1)*m1;
+    r4 /= T(1)*m1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(T(1)*m1, m2*T(1));
+  t2 = sub(T(1)*m1, m2*T(1));
+
+  {
+    using namespace tvmet::element_wise;
+
+    t3 = mul(T(1)*m1, m2*T(1));
+    t4 = div(T(1)*m1, m2*T(1));
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * product functions with matrizes
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_prod1() {
+  matrix_type t1, t2, t3;
+  matrix_type r1, r2, r3;
+  matrix_type m2(m1);
+
+  tvmet::util::Gemm(m1, m1, r1);
+  tvmet::util::Gemm(m1, mBig, r2);
+  tvmet::util::Gemm(mBig, m1, r3);
+  CPPUNIT_ASSERT( all_elements(r2 == r3) );
+
+  t1 = prod(T(1)*m1, T(1)*m2);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+
+  t2 = prod(T(1)*m1, T(1)*mBig);
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+
+  t3 = prod(T(1)*mBig, T(1)*m1);
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+}
+
+
+/*
+ * product functions with matrizes and xpr
+ * Note: Take care on aliasing!
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_prod2() {
+  matrix_type r1(0), rm(0);
+  matrix_type m2(m1);
+  matrix_type t1;
+
+  rm = scalar*m1;
+
+  tvmet::util::Gemm(m1, rm, r1);
+
+  t1 = prod(T(1)*m1, scalar*m2 /* alias mBig */);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+}
+
+
+/*
+ * product functions with matrizes
+ * Note: Take care on aliasing!
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_prod3() {
+  matrix_type r1(0), rm(0);
+  matrix_type m2(m1);
+  matrix_type t1;
+
+  rm = scalar*m1;
+
+  tvmet::util::Gemm(rm, m1, r1);
+
+  t1 = prod(scalar*m1 /* alias mBig */, T(1)*m2);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+}
+
+
+/*
+ * transpose functions with matrizes
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_trans() {
+  matrix_type t1, t2;
+
+  t1 = trans(T(1)*m1);
+  CPPUNIT_ASSERT( any_elements(t1 == m1) ); // XXX not very clever
+
+  t2 = trans(T(1)*t1);	// transpose back
+  CPPUNIT_ASSERT( all_elements(t2 == m1) );
+}
+
+
+/*
+ * matrix function M^T * M
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_MtM_prod() {
+  matrix_type m1t, r1;
+  matrix_type m2;
+
+  // trans() and prod() is checked before!
+  m1t = trans(m1);
+  r1  = prod(m1t, mBig);
+
+  m2  = MtM_prod(T(1)*m1, T(1)*mBig);
+
+  CPPUNIT_ASSERT( all_elements(r1 == m2) );
+}
+
+
+/*
+ * matrix function M * M^T
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_MMt_prod() {
+  matrix_type m1t, r1;
+  matrix_type m2;
+
+  // trans() and prod() is checked before!
+  m1t = trans(m1);
+  r1  = prod(mBig, m1t);
+
+  m2  = MMt_prod(T(1)*mBig, T(1)*m1);
+
+  CPPUNIT_ASSERT( all_elements(r1 == m2) );
+}
+
+
+/*
+ * matrix function (M * M)^T
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_prodTrans() {
+  matrix_type r1, r1t;
+  matrix_type m2;
+
+  // trans() and prod() is checked before!
+  r1  = prod(m1, mBig);
+  r1t = trans(r1);
+
+  m2  = trans_prod(T(1)*m1, T(1)*mBig);
+
+  CPPUNIT_ASSERT( all_elements(r1t == m2) );
+}
+
+
+/*
+ * trace
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_trace() {
+//   declaration on trace not yet.
+//   T t1 = trace(T(1)*m1);
+//   T t2 = trace(T(1)*mBig);
+
+//   CPPUNIT_ASSERT( t1 == (m1(0,0)+m1(1,1)+m1(2,2)) );
+//   CPPUNIT_ASSERT( t2 == (mBig(0,0)+mBig(1,1)+mBig(2,2)) );
+}
+
+
+/*
+ * matrix row vector I
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::rowVector1() {
+  vector_type r0, r1, r2;
+
+   r0 =  row(m1+m1, 0);
+   r1 =  row(m1+m1, 1);
+   r2 =  row(m1+m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(r0 == 2*m1_r0) );
+  CPPUNIT_ASSERT( all_elements(r1 == 2*m1_r1) );
+  CPPUNIT_ASSERT( all_elements(r2 == 2*m1_r2) );
+}
+
+
+/*
+ * matrix row vector II
+ * g++ produce wrong results only for row0
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::rowVector2() {
+  vector_type r0, r1, r2;
+
+   r0 =  row(T(1)*m1, 0);
+   r1 =  row(T(1)*m1, 1);
+   r2 =  row(T(1)*m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(r0 == m1_r0) );
+  CPPUNIT_ASSERT( all_elements(r1 == m1_r1) );
+  CPPUNIT_ASSERT( all_elements(r2 == m1_r2) );
+}
+
+
+/*
+ * matrix col vector I
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::colVector1() {
+  vector_type c0, c1, c2;
+
+  c0 = col(m1+m1, 0);
+  c1 = col(m1+m1, 1);
+  c2 = col(m1+m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(c0 == 2*m1_c0) );
+  CPPUNIT_ASSERT( all_elements(c1 == 2*m1_c1) );
+  CPPUNIT_ASSERT( all_elements(c2 == 2*m1_c2) );
+}
+
+
+/*
+ * matrix col vector II
+ * g++ produce wrong results only for col0
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::colVector2() {
+  vector_type c0, c1, c2;
+
+  c0 = col(T(1)*m1, 0);
+  c1 = col(T(1)*m1, 1);
+  c2 = col(T(1)*m1, 2);
+
+  CPPUNIT_ASSERT( all_elements(c0 == m1_c0) );
+  CPPUNIT_ASSERT( all_elements(c1 == m1_c1) );
+  CPPUNIT_ASSERT( all_elements(c2 == m1_c2) );
+}
+
+
+/*
+ * matrix diag vector I
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_diag1() {
+  vector_type r, v;
+
+  r = 2*diag(m1);
+
+  v = diag(m1+m1);
+
+  CPPUNIT_ASSERT( all_elements(r == v) );
+}
+
+
+/*
+ * matrix diag vector II
+ * g++ produce wrong results opposite to diag1
+ */
+template <class T>
+void
+TestXprMatrixFunctions<T>::fn_diag2() {
+  vector_type r, v;
+
+  r = diag(m1);
+
+  v = diag(T(1)*m1);
+
+  CPPUNIT_ASSERT( all_elements(r == v) );
+}
+
+
+#endif // TVMET_TEST_XPR_MATRIXFUNC_H
+
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestXprMatrixOperators.cc b/tvmet-1.7.1/testsuite/TestXprMatrixOperators.cc
new file mode 100644
index 0000000..1d4ce37
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprMatrixOperators.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprMatrixOperators.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestXprMatrixOperators.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprMatrixOperators<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprMatrixOperators<int> );
diff --git a/tvmet-1.7.1/testsuite/TestXprMatrixOperators.h b/tvmet-1.7.1/testsuite/TestXprMatrixOperators.h
new file mode 100644
index 0000000..3a5691c
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprMatrixOperators.h
@@ -0,0 +1,228 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprMatrixOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_XPR_MATRIXOPS_H
+#define TVMET_TEST_XPR_MATRIXOPS_H
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/Matrix.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestXprMatrixOperators : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestXprMatrixOperators );
+  CPPUNIT_TEST( scalarOps1 );
+  CPPUNIT_TEST( scalarOps2 );
+  CPPUNIT_TEST( globalMatrixOps );
+  CPPUNIT_TEST( negate );
+  CPPUNIT_TEST( prodOps );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+  typedef tvmet::Matrix<T, 3, 3>		matrix_type;
+
+public:
+  TestXprMatrixOperators()
+    : mZero(0), mOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarOps1();
+  void scalarOps2();
+  void globalMatrixOps();
+  void negate();
+  void prodOps();
+
+private:
+  const matrix_type mZero;
+  const matrix_type mOne;
+  matrix_type m1;
+  matrix_type mBig;	/**< matrix 10x bigger than m1 */
+
+private:
+  vector_type m1_r0, m1_r1, m1_r2;	// row vectors
+  vector_type m1_c0, m1_c1, m1_c2;	// col vectors
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+template <class T>
+void TestXprMatrixOperators<T>::setUp() {
+  m1 = 1,4,7,
+       2,5,8,
+       3,6,9;
+
+  m1_r0 = 1,4,7;
+  m1_r1 = 2,5,8;
+  m1_r2 = 3,6,9;
+
+  m1_c0 = 1,2,3;
+  m1_c1 = 4,5,6;
+  m1_c2 = 7,8,9;
+
+  mBig = 10,40,70,
+         20,50,80,
+         30,60,90;
+}
+
+template <class T>
+void TestXprMatrixOperators<T>::tearDown() { }
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestXprMatrixOperators<T>::scalarOps1() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+
+  t1 = T(1)*m1 + scalar;
+  t2 = T(1)*m1 - scalar;
+  t3 = T(1)*m1 * scalar;
+  t4 = T(1)*mBig / scalar;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == mBig) );
+  CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestXprMatrixOperators<T>::scalarOps2() {
+  matrix_type r1(m1), r2(m1);
+  matrix_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  t1 = scalar + T(1)*m1;
+  t2 = scalar * (T(1)*m1);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with matrizes
+ */
+template <class T>
+void
+TestXprMatrixOperators<T>::globalMatrixOps() {
+    matrix_type t1(0), t2(0), t3(0), t4(0);
+
+    t1 = T(1)*m1 + T(1)*m1;
+    t2 = T(1)*m1 - T(1)*m1;
+
+    {
+      using namespace tvmet::element_wise;
+
+      //t3 = m1 * mOne; // overloaded by global op*()
+      t4 = T(1)*m1 / (T(1)*mOne);
+    }
+
+    CPPUNIT_ASSERT( all_elements(t1 == 2*m1) );
+    CPPUNIT_ASSERT( all_elements(t2 == T(0)) );
+    //CPPUNIT_ASSERT( all_elements(t3 == m1) );
+    CPPUNIT_ASSERT( all_elements(t4 == m1) );
+}
+
+
+/*
+ * negate operators with matrizes
+ */
+template <class T>
+void
+TestXprMatrixOperators<T>::negate() {
+  matrix_type m1;
+
+  m1 = -(T(1)*mOne);
+
+  CPPUNIT_ASSERT( all_elements(m1 == T(-1)) );
+}
+
+
+/*
+ * product functions with matrizes
+ * Note: Take care on aliasing!
+ */
+template <class T>
+void
+TestXprMatrixOperators<T>::prodOps() {
+  matrix_type t1, t2, t3;
+  matrix_type r1, r2, r3;
+  matrix_type m2(m1);;
+
+  tvmet::util::Gemm(m1, m1, r1);
+  tvmet::util::Gemm(m1, mBig, r2);
+  tvmet::util::Gemm(mBig, m1, r3);
+  CPPUNIT_ASSERT( all_elements(r2 == r3) );
+
+  t1 = (T(1)*m1) * (T(1)*m2);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+
+  t2 = (T(1)*m1) * (T(1)*mBig);
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+
+  t3 = (T(1))*mBig * (T(1)*m1);
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+}
+
+
+#endif // TVMET_TEST_XPR_MATRIXOPS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestXprVectorFunctions.cc b/tvmet-1.7.1/testsuite/TestXprVectorFunctions.cc
new file mode 100644
index 0000000..f9f16b7
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprVectorFunctions.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprVectorFunctions.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestXprVectorFunctions.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprVectorFunctions<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprVectorFunctions<int> );
diff --git a/tvmet-1.7.1/testsuite/TestXprVectorFunctions.h b/tvmet-1.7.1/testsuite/TestXprVectorFunctions.h
new file mode 100644
index 0000000..0056679
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprVectorFunctions.h
@@ -0,0 +1,324 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprVectorFunctions.h,v 1.2 2005/03/25 07:12:07 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_XPR_VECTORFUNC_H
+#define TVMET_TEST_XPR_VECTORFUNC_H
+
+#include <limits>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestXprVectorFunctions : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestXprVectorFunctions );
+  CPPUNIT_TEST( scalarFuncs1 );
+  CPPUNIT_TEST( scalarFuncs2 );
+  CPPUNIT_TEST( globalXprVectorFuncs );
+  CPPUNIT_TEST( fn_sum );
+  CPPUNIT_TEST( fn_product );
+  CPPUNIT_TEST( fn_dot );
+  CPPUNIT_TEST( fn_cross );
+  CPPUNIT_TEST( fn_norm );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+
+public:
+  TestXprVectorFunctions()
+    : vZero(0), vOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarFuncs1();
+  void scalarFuncs2();
+  void globalXprVectorFuncs();
+  void fn_sum();
+  void fn_product();
+  void fn_dot();
+  void fn_cross();
+  void fn_norm();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+
+template <class T>
+void TestXprVectorFunctions<T>::setUp() {
+  v1 = 1,2,3;
+  vBig = 10,20,30;
+}
+
+
+template <class T>
+void TestXprVectorFunctions<T>::tearDown() { }
+
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * global math operators with scalars
+ * function(XprVector, scalar)
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::scalarFuncs1() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(vBig);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+  r3 *= scalar;
+  r4 /= scalar;
+
+  // all element wise
+  t1 = add(T(1)*v1, scalar);
+  t2 = sub(T(1)*v1, scalar);
+  t3 = mul(T(1)*v1, scalar);
+  t4 = div(T(1)*vBig, scalar);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * function(scalar, XprVector)
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::scalarFuncs2() {
+  vector_type r1(v1), r2(v1);
+  vector_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  // all element wise
+  t1 = add(scalar, T(1)*v1);
+  t2 = mul(scalar, T(1)*v1);
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with xpr vectors (using functions)
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::globalXprVectorFuncs() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += v1;
+  r2 -= v1;
+  r3 *= v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = add(T(1)*v1, T(1)*v2);
+  t2 = sub(T(1)*v1, T(1)*v2);
+  t3 = mul(T(1)*v1, T(1)*v2);
+  t4 = tvmet::element_wise::div(T(1)*v1, T(1)*v2);
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * sum of vector
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::fn_sum() {
+  T t = sum(scalar*v1);	// alias vBig
+
+  CPPUNIT_ASSERT( t == (vBig(0) + vBig(1) + vBig(2)));
+}
+
+
+/*
+ * product of vector
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::fn_product() {
+  T t = product(scalar*v1); // alias vBig
+
+  CPPUNIT_ASSERT( t == (vBig(0) * vBig(1) * vBig(2)));
+}
+
+/*
+ * dot product
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::fn_dot() {
+  vector_type v2(v1);
+
+  T t1 = dot(T(1)*v1, T(1)*v2);
+  CPPUNIT_ASSERT( t1 == 14 );
+
+  T t2 = dot(T(1)*v1, T(1)*vBig);
+  CPPUNIT_ASSERT( t2 == 140 );
+
+  T t3 = dot(T(1)*v1, T(1)*vOne);
+  CPPUNIT_ASSERT( t3 == 6 );
+
+  T t4 = dot(T(1)*v1, T(1)*vZero);
+  CPPUNIT_ASSERT( t4 == 0 );
+
+  T t5 = dot(T(1)*v1, vOne);
+  CPPUNIT_ASSERT( t5 == 6 );
+
+  T t6 = dot(vOne, T(1)*v1);
+  CPPUNIT_ASSERT( t6 == 6 );
+}
+
+
+/*
+ * cross product
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::fn_cross() {
+  vector_type v2(v1);
+
+  vector_type t1 = cross(T(1)*v1, T(1)*v2);
+  CPPUNIT_ASSERT( all_elements(t1 == vZero) );	// orthogonal vectors
+
+  vector_type t2 = cross(T(1)*v1, T(1)*vBig);
+  CPPUNIT_ASSERT( all_elements(t2 == vZero) );	// orthogonal vectors
+
+  const vector_type r(-1,2,-1);
+  vector_type t3 = cross(T(1)*v1, T(1)*vOne);
+  CPPUNIT_ASSERT( all_elements(t3 == r) );
+
+  vector_type t4 = cross(T(1)*v1, T(1)*vZero);
+  CPPUNIT_ASSERT( all_elements(t4 == vZero) );
+
+  vector_type t5 = cross(T(1)*v2, v1);		// orthogonal
+  CPPUNIT_ASSERT( all_elements(t5 == vZero) );
+
+  vector_type t6 = cross(v1, T(1)*v2);		// orthogonal
+  CPPUNIT_ASSERT( all_elements(t6 == vZero) );
+}
+
+
+/*
+ * norm
+ * Note: norm2 for ints specialized
+ */
+template <class T>
+void
+TestXprVectorFunctions<T>::fn_norm() {
+  vector_type v2;
+  vector_type r;
+  vector_type t5;
+
+  T t1 = norm1(T(1)*v1);
+  T t2 = norm1(-v1);
+  T t3 = norm2(T(1)*v1);
+  T t4 = norm2(-v1);
+
+  CPPUNIT_ASSERT( t1 == sum(v1) );
+  CPPUNIT_ASSERT( t2 == sum(v1) );
+  CPPUNIT_ASSERT( std::abs(t3 - std::sqrt(static_cast<typename tvmet::NumericTraits<T>::float_type>(14)))
+		  < std::numeric_limits<T>::epsilon() );
+  CPPUNIT_ASSERT( std::abs(t4 - std::sqrt(static_cast<typename tvmet::NumericTraits<T>::float_type>(14)))
+		  < std::numeric_limits<T>::epsilon() );
+
+  r = v1/norm2(v1); 	// norm2 is checked before
+  t5 = normalize(T(1)*v1);
+
+  CPPUNIT_ASSERT( all_elements(t5 == r) );
+}
+
+
+/*****************************************************************************
+ * Implementation Part II (specialized for ints)
+ ****************************************************************************/
+
+
+/*
+ * norm on int specialized due to rounding problems
+ */
+template <>
+void
+TestXprVectorFunctions<int>::fn_norm() {
+  vector_type v2;
+
+  int t1 = norm1(int(1)*v1);
+  int t2 = norm1(-v1);
+  CPPUNIT_ASSERT( t1 == sum(v1) );
+  CPPUNIT_ASSERT( t2 == sum(v1) );
+}
+
+
+#endif // TVMET_TEST_XPR_VECTORFUNC_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/TestXprVectorOperators.cc b/tvmet-1.7.1/testsuite/TestXprVectorOperators.cc
new file mode 100644
index 0000000..c6e7fb4
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprVectorOperators.cc
@@ -0,0 +1,35 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprVectorOperators.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <TestXprVectorOperators.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/****************************************************************************
+ * instance
+ ****************************************************************************/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprVectorOperators<double> );
+CPPUNIT_TEST_SUITE_REGISTRATION( TestXprVectorOperators<int> );
diff --git a/tvmet-1.7.1/testsuite/TestXprVectorOperators.h b/tvmet-1.7.1/testsuite/TestXprVectorOperators.h
new file mode 100644
index 0000000..6bf0b28
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/TestXprVectorOperators.h
@@ -0,0 +1,204 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: TestXprVectorOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#ifndef TVMET_TEST_XPR_VECTOROPS_H
+#define TVMET_TEST_XPR_VECTOROPS_H
+
+#include <limits>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <tvmet/Vector.h>
+#include <tvmet/util/General.h>
+
+template <class T>
+class TestXprVectorOperators : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( TestXprVectorOperators );
+  CPPUNIT_TEST( scalarOps1 );
+  CPPUNIT_TEST( scalarOps2 );
+  CPPUNIT_TEST( globalXprVectorOps );
+  CPPUNIT_TEST( negate );
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  typedef tvmet::Vector<T, 3>			vector_type;
+
+public:
+  TestXprVectorOperators()
+    : vZero(0), vOne(1), scalar(10), scalar2(2) { }
+
+public: // cppunit interface
+  /** cppunit hook for fixture set up. */
+  void setUp();
+
+  /** cppunit hook for fixture tear down. */
+  void tearDown();
+
+protected:
+  void scalarOps1();
+  void scalarOps2();
+  void globalXprVectorOps();
+  void negate();
+
+private:
+  const vector_type vZero;
+  const vector_type vOne;
+  vector_type v1;
+  vector_type vBig;	/**< vector 10x bigger than v1 */
+
+private:
+  const T scalar;
+  const T scalar2;
+};
+
+
+/*****************************************************************************
+ * Implementation Part I (cppunit part)
+ ****************************************************************************/
+
+
+template <class T>
+void TestXprVectorOperators<T>::setUp() {
+  v1 = 1,2,3;
+  vBig = 10,20,30;
+}
+
+
+template <class T>
+void TestXprVectorOperators<T>::tearDown() { }
+
+
+/*****************************************************************************
+ * Implementation Part II
+ ****************************************************************************/
+
+
+/*
+ * global math operators with scalars
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestXprVectorOperators<T>::scalarOps1() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(vBig);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+
+  r1 += scalar;
+  r2 -= scalar;
+  r3 *= scalar;
+  r4 /= scalar;
+
+  // all element wise
+  t1 = T(1)*v1 + scalar;
+  t2 = T(1)*v1 - scalar;
+  t3 = T(1)*v1 * scalar;
+  t4 = T(1)*vBig / scalar;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * global math operators with scalars, part II
+ * Note: checked against member operators since they are allready checked
+ */
+template <class T>
+void
+TestXprVectorOperators<T>::scalarOps2() {
+  vector_type r1(v1), r2(v1);
+  vector_type t1(0), t2(0);
+
+  r1 += scalar;
+  r2 *= scalar;
+
+  // all element wise
+  t1 = scalar + T(1)*v1;
+  t2 = scalar * T(1)*v1;
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+}
+
+
+/*
+ * global math operators with vector expressions
+ */
+template <class T>
+void
+TestXprVectorOperators<T>::globalXprVectorOps() {
+  vector_type r1(v1), r2(v1), r3(v1), r4(v1);
+  vector_type t1(0), t2(0), t3(0), t4(0);
+  vector_type v2(v1);
+
+  CPPUNIT_ASSERT( all_elements( v1 == v2) );
+
+  r1 += v1;
+  r2 -= v1;
+  r3 *= v1;
+
+  {
+    using namespace tvmet::element_wise;
+    r4 /= v1;
+  }
+
+  CPPUNIT_ASSERT( all_elements(r2 == T(0)) );
+  CPPUNIT_ASSERT( all_elements(r4 == T(1)) );
+
+  t1 = T(1)*v1 + T(1)*v2;
+  t2 = T(1)*v1 - T(1)*v2;
+  t3 = T(1)*v1 * T(1)*v2;
+
+  {
+    using namespace tvmet::element_wise;
+    t4 = (T(1)*v1) / (T(1)*v1);
+  }
+
+  CPPUNIT_ASSERT( all_elements(t1 == r1) );
+  CPPUNIT_ASSERT( all_elements(t2 == r2) );
+  CPPUNIT_ASSERT( all_elements(t3 == r3) );
+  CPPUNIT_ASSERT( all_elements(t4 == r4) );
+}
+
+
+/*
+ * negate operators
+ */
+template <class T>
+void
+TestXprVectorOperators<T>::negate() {
+  vector_type v2;
+
+  v2 = -(T(1)*vOne);
+
+  CPPUNIT_ASSERT( all_elements(v2 == T(-1)) );
+}
+
+#endif // TVMET_TEST_XPR_VECTOROPS_H
+
+// Local Variables:
+// mode:C++
+// End:
diff --git a/tvmet-1.7.1/testsuite/main.cc b/tvmet-1.7.1/testsuite/main.cc
new file mode 100644
index 0000000..59b4b9d
--- /dev/null
+++ b/tvmet-1.7.1/testsuite/main.cc
@@ -0,0 +1,50 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * 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
+ *
+ * $Id: main.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $
+ */
+
+#include <iostream>
+
+#include <cppunit/TextTestResult.h>
+#include <cppunit/TestSuite.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+using std::cout;
+using std::endl;
+
+int main()
+{
+  CppUnit::TextUi::TestRunner runner;
+
+  // retreive the instance of the TestFactoryRegistry
+  CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
+
+  // obtain and add a new TestSuite created by the TestFactoryRegistry
+  runner.addTest( registry.makeTest() );
+
+  // Run the test.
+  bool wasSucessful = runner.run();
+
+  // Return error code 1 if the one of test failed; disturbs
+  // the distrib process due to the return error code -> no return code
+  return wasSucessful ? 0 : 1;
+}
diff --git a/tvmet-1.7.1/tvmet-config.1 b/tvmet-1.7.1/tvmet-config.1
new file mode 100644
index 0000000..0801bbe
--- /dev/null
+++ b/tvmet-1.7.1/tvmet-config.1
@@ -0,0 +1,67 @@
+.TH tvmet 1 "August 2002"
+.SH NAME
+tvmet-config - script to get information about the installed version of tvmet
+.SH SYNOPSIS
+.B tvmet-config
+[\-\-prefix\fI[=DIR]\fP] [\-\-exec\-prefix\fI[=DIR]\fP] [\-\-version] [\-\-libs] [\-\-cxxflags]
+.SH DESCRIPTION
+.PP
+\fItvmet-config\fP is a tool that is used to configure to determine
+the compiler and linker flags that should be used to compile and link
+programs that use \fItvmet\fP. It is also used internally to the .m4
+macros for GNU autoconf that are included with \fItvmet\fP.
+.
+.SH OPTIONS
+.l
+\fItvmet-config\fP accepts the following options:
+.TP 8
+.B  \-\-version
+Print the currently installed version of \fItvmet\fP on the standard
+output.
+.TP 8
+.B  \-\-libs
+Print the linker flags that are necessary to link a \fItvmet\fP
+program.
+.TP 8
+.B  \-\-cxxflags
+Print the compiler flags that are necessary to compile a \fItvmet\fP
+program.
+.TP 8
+.B  \-\-prefix
+Print the prefix with which \fItvmet\fP was compiled.
+.TP 8
+.B  \-\-prefix=PREFIX
+If specified, use PREFIX instead of the installation prefix that
+\fItvmet\fP was built with when computing the output for the
+\-\-cflags and \-\-libs options. This option is also used for the exec
+prefix if \-\-exec\-prefix was not specified. This option must be
+specified before any \-\-libs or \-\-cflags options.
+.TP 8
+.B  \-\-exec\-prefix
+Print the exec\-prefix with which \fItvmet\fP was compiled.
+.TP 8
+.B  \-\-exec\-prefix=PREFIX
+If specified, use PREFIX instead of the installation exec prefix that
+\fItvmet\fP was built with when computing the output for the
+\-\-cflags and \-\-libs options.  This option must be specified before
+any \-\-libs or \-\-cflags options.
+.SH COPYRIGHT
+tvmet Copyright \(co 2001, 2001 by Olaf Petzold <opetzold@users.sourceforge.net>
+.PP
+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.
+.PP
+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.
+.PP
+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
+.SH AUTHOR
+This manpage is an almost word-for-word copy of the gtk-config
+manpage, written by Owen Taylor.  It was modified by Olaf Petzold
+<opetzold@users.regiocom.net>
diff --git a/tvmet-1.7.1/tvmet-config.in b/tvmet-1.7.1/tvmet-config.in
new file mode 100644
index 0000000..9c98120
--- /dev/null
+++ b/tvmet-1.7.1/tvmet-config.in
@@ -0,0 +1,104 @@
+#!/bin/sh
+# $Id: tvmet-config.in,v 1.2 2003/05/24 08:19:42 opetzold Exp $
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+exec_prefix_set=no
+includedir=@includedir@
+
+usage()
+{
+    cat <<EOF
+Usage: tvmet-config [OPTION] ...
+
+Generic options
+  --version	output tvmet version information.
+  --help	display this help and exit.
+
+Compilation support options
+  --cxxflags	print pre-processor and compiler flags
+  --includes	print include path
+  --libs	print library linking information
+
+Install directories tvmet was configured to
+  --prefix[=DIR]
+  --exec-prefix[=DIR]
+
+EOF
+	exit $1
+}
+
+if test $# -eq 0; then
+	usage 1 1>&2
+fi
+
+while test $# -gt 0; do
+  case "$1" in
+  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  case $1 in
+    --prefix=*)
+      prefix=$optarg
+      if test $exec_prefix_set = no ; then
+        exec_prefix=$optarg
+      fi
+      ;;
+    --prefix)
+      echo_prefix=yes
+      ;;
+    --exec-prefix=*)
+      exec_prefix=$optarg
+      exec_prefix_set=yes
+      ;;
+    --exec-prefix)
+      echo_exec_prefix=yes
+      ;;
+    --version)
+      echo @VERSION@
+      ;;
+    --help)
+      usage 0
+      ;;
+    --cxxflags)
+      echo_cxxflags=yes
+      ;;
+    --includes)
+      echo_includes=yes
+      ;;
+    --libs)
+      echo_libs=yes
+      ;;
+    *)
+      usage 1 1>&2
+      ;;
+  esac
+  shift
+done
+
+if test "$echo_prefix" = "yes"; then
+	echo $prefix
+fi
+
+if test "$echo_exec_prefix" = "yes"; then
+	echo $exec_prefix
+fi
+
+if test "$echo_includes" = "yes"; then
+      if test "$includedir" != "/usr/include" ; then
+            echo -I$includedir
+      fi
+fi
+
+if test "$echo_cxxflags" = "yes"; then
+    echo @CXXFLAGS@
+fi
+
+if test "$echo_libs" = "yes"; then
+      if test @libdir@ != /usr/lib ; then
+            echo "-L@libdir@"
+      fi
+fi
+
+exit 0
diff --git a/tvmet-1.7.1/tvmet.m4 b/tvmet-1.7.1/tvmet.m4
new file mode 100644
index 0000000..a32d58f
--- /dev/null
+++ b/tvmet-1.7.1/tvmet.m4
@@ -0,0 +1,79 @@
+dnl $Id: tvmet.m4,v 1.3 2004/04/23 21:03:29 opetzold Exp $
+
+dnl
+dnl AM_PATH_TVMET([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl
+AC_DEFUN([AM_PATH_TVMET],
+[
+
+AC_ARG_WITH(tvmet-prefix,[  --with-tvmet-prefix=PFX   Prefix where tvmet is installed (optional)],
+            tvmet_config_prefix="$withval", tvmet_config_prefix="")
+AC_ARG_WITH(tvmet-exec-prefix,[  --with-tvmet-exec-prefix=PFX  Exec prefix where tvmet is installed (optional)],
+            tvmet_config_exec_prefix="$withval", tvmet_config_exec_prefix="")
+
+  if test x$tvmet_config_exec_prefix != x ; then
+     tvmet_config_args="$tvmet_config_args --exec-prefix=$tvmet_config_exec_prefix"
+     if test x${TVMET_CONFIG+set} != xset ; then
+        TVMET_CONFIG=$tvmet_config_exec_prefix/bin/tvmet-config
+     fi
+  fi
+  if test x$tvmet_config_prefix != x ; then
+     tvmet_config_args="$tvmet_config_args --prefix=$tvmet_config_prefix"
+     if test x${TVMET_CONFIG+set} != xset ; then
+        TVMET_CONFIG=$tvmet_config_prefix/bin/tvmet-config
+     fi
+  fi
+
+  AC_PATH_PROG(TVMET_CONFIG, tvmet-config, no)
+  tvmet_version_min=$1
+
+  AC_MSG_CHECKING(for tvmet - version >= $tvmet_version_min)
+  no_tvmet=""
+  if test "$TVMET_CONFIG" = "no" ; then
+    no_tvmet=yes
+  else
+    TVMET_CXXFLAGS=`$TVMET_CONFIG --cxxflags`
+    TVMET_LIBS=`$TVMET_CONFIG --libs`
+    tvmet_version=`$TVMET_CONFIG --version`
+
+    tvmet_major_version=`echo $tvmet_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    tvmet_minor_version=`echo $tvmet_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    tvmet_micro_version=`echo $tvmet_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+    tvmet_major_min=`echo $tvmet_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    tvmet_minor_min=`echo $tvmet_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    tvmet_micro_min=`echo $tvmet_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+    tvmet_version_proper=`expr \
+        $tvmet_major_version \> $tvmet_major_min \| \
+        $tvmet_major_version \= $tvmet_major_min \& \
+        $tvmet_minor_version \> $tvmet_minor_min \| \
+        $tvmet_major_version \= $tvmet_major_min \& \
+        $tvmet_minor_version \= $tvmet_minor_min \& \
+        $tvmet_micro_version \>= $tvmet_micro_min `
+
+    if test "$tvmet_version_proper" = "1" ; then
+      AC_MSG_RESULT([$tvmet_major_version.$tvmet_minor_version.$tvmet_micro_version])
+    else
+      AC_MSG_RESULT(no)
+      no_tvmet=yes
+    fi
+  fi
+
+  if test "x$no_tvmet" = x ; then
+     ifelse([$2], , :, [$2])
+  else
+     TVMET_CXXFLAGS=""
+     TVMET_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+
+  AC_SUBST(TVMET_CXXFLAGS)
+  AC_SUBST(TVMET_LIBS)
+])
diff --git a/tvmet-1.7.1/tvmet.spec b/tvmet-1.7.1/tvmet.spec
new file mode 100644
index 0000000..69e2972
--- /dev/null
+++ b/tvmet-1.7.1/tvmet.spec
@@ -0,0 +1,49 @@
+%define  RELEASE 1
+%define  rel     %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE}
+
+%define lib_name tvmet
+
+Name: tvmet
+Version: 1.7.1
+Release: %rel
+
+Summary: Tiny Vector Matrix library using Expression Templates
+Copyright: LGPL
+Group: Development/Libraries
+Vendor: The TVMET Project
+Packager: Olaf Petzold
+Url: http://tvmet.sourceforge.net/
+
+Source: ftp://download.sourceforge.net/pub/sourceforge/tvmet/%name-%version.tar.gz
+
+Prefix: %_prefix
+BuildRoot: %_tmppath/%name-%version-root
+
+%description
+Tiny Template Matrix Library is an expression template matrix and vector
+library for fast calculations in C++. This make it fast for small (tiny)
+linear algebraic systems.
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+
+%setup
+./configure --prefix=%{prefix} --enable-docs --enable-optimize
+
+%build
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make prefix=$RPM_BUILD_ROOT%{prefix} install
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root,755)
+%doc AUTHORS COPYING LICENSE INSTALL NEWS README THANKS ChangeLog doc/html/*
+%attr(755,root,root) %prefix/bin/tvmet-config
+%prefix/include/tvmet/*
+%prefix/man/*
+%prefix/share/aclocal/
diff --git a/tvmet-1.7.1/tvmet.spec.in b/tvmet-1.7.1/tvmet.spec.in
new file mode 100644
index 0000000..c220f47
--- /dev/null
+++ b/tvmet-1.7.1/tvmet.spec.in
@@ -0,0 +1,49 @@
+%define  RELEASE 1
+%define  rel     %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE}
+
+%define lib_name tvmet
+
+Name: @PACKAGE@
+Version: @VERSION@
+Release: %rel
+
+Summary: Tiny Vector Matrix library using Expression Templates
+Copyright: LGPL
+Group: Development/Libraries
+Vendor: The TVMET Project
+Packager: Olaf Petzold
+Url: http://tvmet.sourceforge.net/
+
+Source: ftp://download.sourceforge.net/pub/sourceforge/tvmet/%name-%version.tar.gz
+
+Prefix: %_prefix
+BuildRoot: %_tmppath/%name-%version-root
+
+%description
+Tiny Template Matrix Library is an expression template matrix and vector
+library for fast calculations in C++. This make it fast for small (tiny)
+linear algebraic systems.
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+
+%setup
+./configure --prefix=%{prefix} --enable-docs --enable-optimize
+
+%build
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make prefix=$RPM_BUILD_ROOT%{prefix} install
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root,755)
+%doc AUTHORS COPYING LICENSE INSTALL NEWS README THANKS ChangeLog doc/html/*
+%attr(755,root,root) %prefix/bin/tvmet-config
+%prefix/include/tvmet/*
+%prefix/man/*
+%prefix/share/aclocal/