Browse files

Initial commit

  • Loading branch information...
0 parents commit 7fe5ffcd812c7fcc46413276d9a3fbaaaac49688 Le Zhang committed Sep 2, 2011
Showing with 30,856 additions and 0 deletions.
  1. +121 −0 ChangeLog
  2. +62 −0 INSTALL
  3. +7 −0 Jamfile
  4. +35 −0 Jamrules.in
  5. +421 −0 LICENSE
  6. +32 −0 Makefile
  7. +55 −0 README
  8. +14 −0 THANKS
  9. +543 −0 aclocal.m4
  10. +80 −0 config.h.in
  11. +7,347 −0 configure
  12. +137 −0 configure.in
  13. +1,101 −0 doc/Doxyfile
  14. +33 −0 doc/Makefile
  15. +278 −0 doc/classmaxent_1_1MaxentModel.tex
  16. +40 −0 doc/classmaxent_1_1Trainer.tex
  17. +65 −0 doc/doxygen.sty
  18. +3,723 −0 doc/manual.lyx
  19. BIN doc/manual.pdf
  20. +153 −0 doc/maxent.bib
  21. +35 −0 doc/namespacemaxent.tex
  22. +4 −0 doc/namespaces.tex
  23. +3 −0 example/README
  24. +32 −0 example/postagger/README
  25. +45 −0 example/postagger/colorize.py
  26. +891 −0 example/postagger/context.py
  27. +175 −0 example/postagger/evaltag.py
  28. +100 −0 example/postagger/maxent_tagger.py
  29. +314 −0 example/postagger/postagger.py
  30. +298 −0 example/postagger/postrainer.py
  31. +38 −0 lib/boost/assert.hpp
  32. +71 −0 lib/boost/checked_delete.hpp
  33. +70 −0 lib/boost/config.hpp
  34. +27 −0 lib/boost/config/abi/borland_prefix.hpp
  35. +12 −0 lib/boost/config/abi/borland_suffix.hpp
  36. +8 −0 lib/boost/config/abi/msvc_prefix.hpp
  37. +8 −0 lib/boost/config/abi/msvc_suffix.hpp
  38. +20 −0 lib/boost/config/abi_prefix.hpp
  39. +23 −0 lib/boost/config/abi_suffix.hpp
  40. +331 −0 lib/boost/config/auto_link.hpp
  41. +167 −0 lib/boost/config/compiler/borland.hpp
  42. +64 −0 lib/boost/config/compiler/comeau.hpp
  43. +53 −0 lib/boost/config/compiler/common_edg.hpp
  44. +19 −0 lib/boost/config/compiler/compaq_cxx.hpp
  45. +31 −0 lib/boost/config/compiler/digitalmars.hpp
  46. +99 −0 lib/boost/config/compiler/gcc.hpp
  47. +28 −0 lib/boost/config/compiler/greenhills.hpp
  48. +67 −0 lib/boost/config/compiler/hp_acc.hpp
  49. +114 −0 lib/boost/config/compiler/intel.hpp
  50. +35 −0 lib/boost/config/compiler/kai.hpp
  51. +94 −0 lib/boost/config/compiler/metrowerks.hpp
  52. +51 −0 lib/boost/config/compiler/mpw.hpp
  53. +24 −0 lib/boost/config/compiler/sgi_mipspro.hpp
  54. +89 −0 lib/boost/config/compiler/sunpro_cc.hpp
  55. +56 −0 lib/boost/config/compiler/vacpp.hpp
  56. +146 −0 lib/boost/config/compiler/visualc.hpp
  57. +33 −0 lib/boost/config/platform/aix.hpp
  58. +15 −0 lib/boost/config/platform/amigaos.hpp
  59. +26 −0 lib/boost/config/platform/beos.hpp
  60. +68 −0 lib/boost/config/platform/bsd.hpp
  61. +48 −0 lib/boost/config/platform/cygwin.hpp
  62. +62 −0 lib/boost/config/platform/hpux.hpp
  63. +31 −0 lib/boost/config/platform/irix.hpp
  64. +98 −0 lib/boost/config/platform/linux.hpp
  65. +70 −0 lib/boost/config/platform/macos.hpp
  66. +21 −0 lib/boost/config/platform/solaris.hpp
  67. +86 −0 lib/boost/config/platform/win32.hpp
  68. +87 −0 lib/boost/config/posix_features.hpp
  69. +92 −0 lib/boost/config/requires_threads.hpp
  70. +83 −0 lib/boost/config/select_compiler_config.hpp
  71. +86 −0 lib/boost/config/select_platform_config.hpp
  72. +68 −0 lib/boost/config/select_stdlib_config.hpp
  73. +96 −0 lib/boost/config/stdlib/dinkumware.hpp
  74. +37 −0 lib/boost/config/stdlib/libcomo.hpp
  75. +27 −0 lib/boost/config/stdlib/libstdcpp3.hpp
  76. +30 −0 lib/boost/config/stdlib/modena.hpp
  77. +52 −0 lib/boost/config/stdlib/msl.hpp
  78. +121 −0 lib/boost/config/stdlib/roguewave.hpp
  79. +111 −0 lib/boost/config/stdlib/sgi.hpp
  80. +169 −0 lib/boost/config/stdlib/stlport.hpp
  81. +17 −0 lib/boost/config/stdlib/vacpp.hpp
  82. +508 −0 lib/boost/config/suffix.hpp
  83. +124 −0 lib/boost/config/user.hpp
  84. +404 −0 lib/boost/cstdint.hpp
  85. +495 −0 lib/boost/detail/iterator.hpp
  86. +99 −0 lib/boost/detail/lightweight_mutex.hpp
  87. +37 −0 lib/boost/detail/lwm_nop.hpp
  88. +87 −0 lib/boost/detail/lwm_pthreads.hpp
  89. +123 −0 lib/boost/detail/lwm_win32.hpp
  90. +64 −0 lib/boost/detail/lwm_win32_nt.hpp
  91. +555 −0 lib/boost/detail/shared_count.hpp
  92. +74 −0 lib/boost/detail/workaround.hpp
  93. +60 −0 lib/boost/iterator.hpp
  94. +137 −0 lib/boost/iterator/detail/config_def.hpp
  95. +27 −0 lib/boost/iterator/detail/config_undef.hpp
  96. +88 −0 lib/boost/iterator/detail/enable_if.hpp
  97. +214 −0 lib/boost/iterator/detail/facade_iterator_category.hpp
  98. +110 −0 lib/boost/iterator/detail/minimum_category.hpp
  99. +52 −0 lib/boost/iterator/interoperable.hpp
  100. +345 −0 lib/boost/iterator/iterator_adaptor.hpp
  101. +165 −0 lib/boost/iterator/iterator_categories.hpp
  102. +664 −0 lib/boost/iterator/iterator_facade.hpp
  103. +93 −0 lib/boost/iterator/iterator_traits.hpp
  104. +205 −0 lib/boost/lexical_cast.hpp
  105. +141 −0 lib/boost/limits.hpp
  106. +48 −0 lib/boost/mpl/always.hpp
  107. +42 −0 lib/boost/mpl/and.hpp
  108. +355 −0 lib/boost/mpl/apply.hpp
  109. +64 −0 lib/boost/mpl/apply_if.hpp
  110. +141 −0 lib/boost/mpl/arg.hpp
  111. +30 −0 lib/boost/mpl/arg_fwd.hpp
  112. +34 −0 lib/boost/mpl/aux_/algorithm_namespace.hpp
  113. +72 −0 lib/boost/mpl/aux_/apply.hpp
  114. +28 −0 lib/boost/mpl/aux_/arg_typedef.hpp
  115. +46 −0 lib/boost/mpl/aux_/arity.hpp
  116. +49 −0 lib/boost/mpl/aux_/arity_spec.hpp
  117. +57 −0 lib/boost/mpl/aux_/config/compiler.hpp
  118. +49 −0 lib/boost/mpl/aux_/config/dtp.hpp
  119. +30 −0 lib/boost/mpl/aux_/config/eti.hpp
  120. +35 −0 lib/boost/mpl/aux_/config/lambda.hpp
  121. +23 −0 lib/boost/mpl/aux_/config/msvc.hpp
  122. +56 −0 lib/boost/mpl/aux_/config/nttp.hpp
  123. +33 −0 lib/boost/mpl/aux_/config/overload_resolution.hpp
  124. +38 −0 lib/boost/mpl/aux_/config/preprocessor.hpp
  125. +25 −0 lib/boost/mpl/aux_/config/static_constant.hpp
  126. +41 −0 lib/boost/mpl/aux_/config/ttp.hpp
  127. +22 −0 lib/boost/mpl/aux_/config/use_preprocessed.hpp
  128. +22 −0 lib/boost/mpl/aux_/config/workaround.hpp
  129. +34 −0 lib/boost/mpl/aux_/include_preprocessed.hpp
  130. +95 −0 lib/boost/mpl/aux_/integral_wrapper.hpp
  131. +28 −0 lib/boost/mpl/aux_/lambda_arity_param.hpp
  132. +50 −0 lib/boost/mpl/aux_/lambda_spec.hpp
  133. +136 −0 lib/boost/mpl/aux_/lambda_support.hpp
  134. +40 −0 lib/boost/mpl/aux_/msvc_never_true.hpp
  135. +45 −0 lib/boost/mpl/aux_/nested_type_wknd.hpp
  136. +62 −0 lib/boost/mpl/aux_/preprocessed/bcc551/and.hpp
  137. +509 −0 lib/boost/mpl/aux_/preprocessed/bcc551/apply.hpp
  138. +106 −0 lib/boost/mpl/aux_/preprocessed/bcc551/arg.hpp
  139. +62 −0 lib/boost/mpl/aux_/preprocessed/bcc551/or.hpp
  140. +54 −0 lib/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp
  141. +62 −0 lib/boost/mpl/aux_/preprocessed/gcc/and.hpp
  142. +121 −0 lib/boost/mpl/aux_/preprocessed/gcc/apply.hpp
  143. +136 −0 lib/boost/mpl/aux_/preprocessed/gcc/arg.hpp
  144. +62 −0 lib/boost/mpl/aux_/preprocessed/gcc/or.hpp
  145. +54 −0 lib/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp
  146. +61 −0 lib/boost/mpl/aux_/preprocessed/plain/and.hpp
  147. +122 −0 lib/boost/mpl/aux_/preprocessed/plain/apply.hpp
  148. +136 −0 lib/boost/mpl/aux_/preprocessed/plain/arg.hpp
  149. +61 −0 lib/boost/mpl/aux_/preprocessed/plain/or.hpp
  150. +47 −0 lib/boost/mpl/aux_/preprocessed/plain/placeholders.hpp
  151. +108 −0 lib/boost/mpl/aux_/preprocessor/def_params_tail.hpp
  152. +65 −0 lib/boost/mpl/aux_/preprocessor/enum.hpp
  153. +31 −0 lib/boost/mpl/aux_/preprocessor/filter_params.hpp
  154. +68 −0 lib/boost/mpl/aux_/preprocessor/params.hpp
  155. +55 −0 lib/boost/mpl/aux_/preprocessor/sub.hpp
  156. +32 −0 lib/boost/mpl/aux_/preprocessor/tuple.hpp
  157. +31 −0 lib/boost/mpl/aux_/static_cast.hpp
  158. +30 −0 lib/boost/mpl/aux_/template_arity_fwd.hpp
  159. +60 −0 lib/boost/mpl/aux_/value_wknd.hpp
  160. +154 −0 lib/boost/mpl/aux_/void_spec.hpp
  161. +41 −0 lib/boost/mpl/bool.hpp
  162. +31 −0 lib/boost/mpl/bool_fwd.hpp
  163. +50 −0 lib/boost/mpl/identity.hpp
  164. +237 −0 lib/boost/mpl/if.hpp
  165. +26 −0 lib/boost/mpl/int.hpp
  166. +25 −0 lib/boost/mpl/int_fwd.hpp
  167. +50 −0 lib/boost/mpl/lambda_fwd.hpp
  168. +24 −0 lib/boost/mpl/limits/arity.hpp
  169. +56 −0 lib/boost/mpl/not.hpp
  170. +42 −0 lib/boost/mpl/or.hpp
  171. +80 −0 lib/boost/mpl/placeholders.hpp
  172. +56 −0 lib/boost/mpl/void.hpp
  173. +29 −0 lib/boost/mpl/void_fwd.hpp
  174. +53 −0 lib/boost/next_prior.hpp
  175. +24 −0 lib/boost/non_type.hpp
  176. +33 −0 lib/boost/noncopyable.hpp
  177. +289 −0 lib/boost/preprocessor/arithmetic/inc.hpp
  178. +36 −0 lib/boost/preprocessor/cat.hpp
  179. +18 −0 lib/boost/preprocessor/comma_if.hpp
  180. +58 −0 lib/boost/preprocessor/config/config.hpp
  181. +32 −0 lib/boost/preprocessor/control/expr_iif.hpp
  182. +31 −0 lib/boost/preprocessor/control/if.hpp
  183. +35 −0 lib/boost/preprocessor/control/iif.hpp
  184. +34 −0 lib/boost/preprocessor/debug/error.hpp
  185. +287 −0 lib/boost/preprocessor/detail/auto_rec.hpp
  186. +43 −0 lib/boost/preprocessor/detail/check.hpp
  187. +31 −0 lib/boost/preprocessor/detail/is_binary.hpp
  188. +18 −0 lib/boost/preprocessor/empty.hpp
  189. +18 −0 lib/boost/preprocessor/enum_params.hpp
  190. +22 −0 lib/boost/preprocessor/facilities/empty.hpp
  191. +24 −0 lib/boost/preprocessor/facilities/identity.hpp
  192. +18 −0 lib/boost/preprocessor/identity.hpp
  193. +18 −0 lib/boost/preprocessor/inc.hpp
  194. +74 −0 lib/boost/preprocessor/list/adt.hpp
  195. +66 −0 lib/boost/preprocessor/list/for_each_i.hpp
  196. +31 −0 lib/boost/preprocessor/logical/and.hpp
  197. +39 −0 lib/boost/preprocessor/logical/bitand.hpp
  198. +289 −0 lib/boost/preprocessor/logical/bool.hpp
  199. +37 −0 lib/boost/preprocessor/logical/compl.hpp
Sorry, we could not display the entire diff because too many files (361) changed.
121 ChangeLog
@@ -0,0 +1,121 @@
+2011-09-02 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: compile warning in src/maxent.cpp
+
+2011-05-16 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: incorporated patch provided by Jiří Marší: numerically stable
+ fix for probability overflow, which can lead to crash in LBFGS training.
+
+2006-10-04 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: autoconf problem when using gcc4.0 with g77 replaced by gfortran
+
+2005-03-22 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: docstring support to python binding
+
+2004-12-25 Zhang Le <ejoy@users.sourceforge.net>
+ * Ported to Sun Solaris platform
+ * Ported to gcc 3.4.3
+ * Python swig binding ported to win32
+
+2004-12-24 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: unittest test for orange binding, setup.py for orngMaxent.py
+ * Change the meaning of -g from sigma to sigma^2
+ * Dox fix: about -g gaussian option, swig python installation, python::eval_all()
+
+2004-11-17 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: C interface wrapper code for lbfgs.f, with a driver sdriver.c
+ * Added: replace the heavy boost test unit with light weight minunit in
+ test/
+
+2004-10-06 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: An overflow caused by zero feature value in gis estimation code,
+ which can cause "nan" appear in the model file.
+ * Added: SWIG python binding now fully functions under Linux. Will replace
+ Boost.Python in furture releases.
+
+2004-09-30 Zhang Le <ejoy@users.sourceforge.net>
+ * Doc fix for a maintenance release.
+
+2004-07-08 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: Detail instructions on buliding on win32 were added in the
+ document.
+ * Added: Install headers in src/Jamfile
+
+2004-07-06 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: wrongly display time measure on win32 platform in gistrainer.cpp
+ and lbfgstrainer.cpp
+ * Added: a timer for loading events data in MaxentModel
+
+2004-07-04 Zhang Le <ejoy@users.sourceforge.net>
+ * Remove the use of boost::format lib, which is pretty heavy for this
+ application and can cause trouble on some C++ compilers.
+ * Use own getopt implementation on Win32 platforms, which fixes file name
+ bugs of command line program.
+
+2004-07-03 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: use fabs instead of abs, a crucial bug in gistrainer.cpp
+
+2004-07-01 Zhang Le <ejoy@users.sourceforge.net>
+ * Ported to MSVC 7.1 with or without stlport
+ * Ported to Intel C++ 8.0 with MSVC 7.1's lib & headers
+ * Fixed: win32 getopt limitation by using own getopt.c on win32 platform
+
+
+2004-06-25 Zhang Le <ejoy@users.sourceforge.net>
+ * Automatically disable lbfgs routine on system without fortran compiler
+
+2004-06-09 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: GIS now supports non-binary features
+
+2004-05-29 Zhang Le <ejoy@users.sourceforge.net>
+ * rewrite mmap supporting routines.
+ * now the toolkit can be cross-compiled into native win32 executable using
+ cross-mingw toolchain (gcc 3.2) on FreeBSD.
+
+2004-05-28 Zhang Le <ejoy@users.sourceforge.net>
+ * initial port to autoconf/jam building system, SCons is abandoned.
+
+2004-04-27 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: a potential bug when reading non-binary feature value using
+ mmap() call in maxent.cpp::get_sample(). The old code tries to
+ call atof() with two more bytes beyond the feature value string.
+ This works most time, but can cause a bus error.
+
+2004-04-11 Zhang Le <ejoy@users.sourceforge.net>
+ * detect gnugetopt lib with a CheckLib call in src/SConscript
+
+2004-03-13 Zhang Le <ejoy@users.sourceforge.net>
+ * Revised user manual
+
+2004-03-12 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: re-arrange python binding and tagger code to python/ dir.
+ * Added: maxent can now use heldout data (--heldout)
+ * Added: maxent can now do prediction over test data directly after model
+ training: maxent [options] train.data test.data
+
+2004-02-29 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: possible damage to training data when calling msync() in
+ mmapfile.cpp
+
+2004-02-28 Zhang Le <ejoy@users.sourceforge.net>
+ * Fixed: E_ref parameter of gistrainer's newton() method when using
+ Gaussian smoothing. Reported by Tom Morton
+ * Changed: license is changed to LGPL
+
+2004-02-25 Zhang Le <ejoy@users.sourceforge.net>
+ * Use numeric_limits<double>::epsilon() instead of hardcoded eps
+
+2003-10-06 Zhang Le <ejoy@users.sourceforge.net>
+ * Update document and add ChangeLog, THANKS
+ * Added: test for mmap() in src/SConscript
+ * Added: add_heldout_event() now works
+
+2003-10-05 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: fast mmap() file I/O, much faster than standard iostream
+ * Added: line_mem_iterator.hpp and token_mem_iterator.hpp
+
+2003-10-04 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: new build_params() suggested by Carmen Alvarez
+
+2003-09-27 Zhang Le <ejoy@users.sourceforge.net>
+ * Added: non-binary feature is now fullly supported
+ * Added: test suites for pymaxent and mmapfile
62 INSTALL
@@ -0,0 +1,62 @@
+Compiling and installing maxent package
+=======================================
+
+NOTICE: This file only covers building the package under unix environment.
+Readers from Win32 platform should consult the PDF manual in doc/manual.pdf
+for instructions on building with various Win32 compilers.
+
+Now go on:
+
+The following build dependancies are required:
+ * Jam (included) (http://www.perforce.com/)
+ * Boost C++ library version 1.31 or higher (included) (http://www.boost.org)
+ * zlib library and headers (optional)
+ * a fortran compiler (optional but highly recommended)
+
+The boost lib shipped with this package is a subset of the full boost lib:
+only headers used during compilation with gcc 3.2 on Linux/FreeBSD/Cygwin are
+included.
+
+You need to have a working Fortran compiler in order to take advantage of
+LBFGS code. On OS X you can get gfortran installed using Homebrew:
+
+$ brew install gfortran
+
+All building commands must be executed from the top-level source directory. To
+configure the toolkit, just type:
+
+$ ./configure
+
+(NOTE: the leading '$' character is used to represent a shell prompt. DO NOT
+actually type that in!) This will run the `configure' script which will try to
+figure out the configuration of your compilers automatically.
+
+Now you can build the package by calling:
+
+$ make
+
+Which will build the optimized library and command line tool "maxent".
+
+ Optionally, you can build some unittest:
+ $ make unittest
+
+ If no error occurs, go to test/ directory and run all the test:
+ $ cd test
+ $ python runall.py
+
+ All tests should pass without error except test_event, which may abort. (If
+ you find an error, please write to me.)
+
+To install the executable file and the lib you can type (as root):
+
+# make install
+
+To clean the build, type:
+
+$ make clean
+
+More details are covered in the PDF manual.
+
+Please consult python/README for instruction on building the python extension
+module.
+
7 Jamfile
@@ -0,0 +1,7 @@
+SubDir TOP ;
+SubInclude TOP src ;
+
+if $(BUILD_TEST) = yes
+{
+ SubInclude TOP test ;
+}
35 Jamrules.in
@@ -0,0 +1,35 @@
+
+CC = @CCDV@ @CC@ ;
+CCFLAGS = @CFLAGS@ -DBOOST_DISABLE_THREADS ; # no need to link pthread lib
+C++ = @CCDV@ @CXX@ ;
+C++FLAGS = @CXXFLAGS@ -DBOOST_DISABLE_THREADS ;
+FORTRAN = @CCDV@ @FC@ ;
+FORTRANFLAGS = @FCFLAGS@ ;
+HAVE_FORTRAN = @FC@ ;
+HAVE_GETOPT_LONG = @ac_cv_func_getopt_long@ ;
+OPTIM = @OPTIM@ ;
+FCLIBS = @FCLIBS@ ;
+LINK = @CCDV@ @LINK@ ;
+LINKLIBS = @LIBS@ $(FCLIBS) ;
+TARGET_DIR = @TARGET_DIR@ ;
+HDRS = $(TOP) @BOOST_LIB@ ;
+
+PREFIX = @prefix@ ;
+BINDIR = $(PREFIX)/bin ;
+LIBDIR = $(PREFIX)/lib ;
+MANDIR = $(PREFIX)/man ;
+STDHDRS = $(PREFIX)/include ;
+
+actions Fortran
+{
+ $(FORTRAN) $(FORTRANFLAGS) -c -o $(<) $(>)
+}
+
+HOST_OS = @host_os@ ;
+
+if $(OS) != MINGW && $(HOST_OS) = mingw32 # fix for cross-mingw tool chain
+{
+ AR = "$(AR) cru" ;
+ SUFEXE = .exe ;
+}
+
421 LICENSE
@@ -0,0 +1,421 @@
+
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+(The master copy of this license lives on the GNU website.)
+
+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 ou. 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.
+
+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
32 Makefile
@@ -0,0 +1,32 @@
+# This is the surprisingly simple Makefile.
+# I don't like the way gmake and automake work, they tend to cause
+# more problems. Therefore I use Jam instead.
+#
+# This file does the following things:
+# First, it builds jam executable in tools/jam if it is not availiable on the
+# system.
+# Then it forwards all building requests to Jam
+# Jam is the building tool of the well known Boost C++ lib:
+# http://www.boost.org
+
+all: tools/jam build_all
+
+build_all:
+ @tools/jam -d0
+
+install: tools/jam
+ @tools/jam install
+
+uninstall: tools/jam
+ @tools/jam uninstall
+
+clean: tools/jam
+ @BUILD_TEST=yes tools/jam clean
+
+unittest: tools/jam
+ @BUILD_TEST=yes tools/jam -d0
+
+tools/jam:
+ @cd tools && sh build_jam.sh
+
+# END OF FILE
55 README
@@ -0,0 +1,55 @@
+A Maximum Entropy Modeling Toolkit for Python and C++
+=====================================================
+
+
+http://homepages.inf.ed.ac.uk/lzhang10/maxent.html[]
+
+What is this?
+-------------
+This package provides a (Conditional) Maximum Entropy Modeling Toolkit for
+Python and C++. The library is written in ISO C++ and has been tested under
+GNU/Linux, FreeBSD/NetBSD and Win32 (Cygwin and http://www.mingw.org[MinGW]).
+There is also a python extension module (maxent module) available.
+
+For more information, please have a look at the file manual.pdf in doc/
+directory. The PDF document talks about the toolkit at length.
+
+Building
+--------
+See file INSTALL for detail description of building the maxent package on unix
+platforms. Instruction on building under win32 environment is covered in the
+PDF manual in doc/.
+
+python/ directory contains source code for python binding of the toolkit. The
+detail instruction on building the python extension is given in python/README.
+
+License
+-------
+This software is freeware and is released under LGPL. see LICENSE file for
+more information.
+
+The adoption of LGPL is in accord with the license of java maxent project:
+http://maxent.sf.net[], from which the toolkit was derived. LGPL makes it
+easier to share source code, as well as new ideas, between both projects.
+
+Misc Info
+---------
+About Feature Value
+~~~~~~~~~~~~~~~~~~~
+Since binary feature and integer feature are more common than high precision
+real feature, all feature values are represented as float (4 bytes) rather
+than double (8 bytes) in order to save memory. If you need to specify double
+feature values you can find all floats in source code and replace them with
+double (require more memory).
+
+Undocumented Functions
+~~~~~~~~~~~~~~~~~~~~~~
+There are some functions in the source code that are not documented. They are
+considered experimental and are very likely to be changed in future releases.
+Please do not report them as bugs.
+
+Contact Author
+--------------
+Le Zhang <mailto:ejoy@users.sf.net[]>
+http://homepages.inf.ed.ac.uk/lzhang10/[]
+Question and suggestion are always welcome.
14 THANKS
@@ -0,0 +1,14 @@
+# to address privacy, the contributors' email addresses are rot13 encoded
+# to decode: in vim move cursor in <..> and type g?a> ;-)
+
+Jiří Marš<wvev.znefvx89@tznvy.pbz>
+ * Fixed a numerical stability bug in trainer that can lead to random crashes in LBFGS training
+
+Carmen Alvarez <pnezra.nyinerm@HZbagerny.PN>
+ * Fixing a bug when detecting "-Inf" in lbfgstrainer.cpp
+ * Proposing a new std::map based algorithm for build_params() (much faster
+ when outcome set is large)
+
+Tom Morton <gfzbegba@pvf.hcraa.rqh>
+ * Fixing a bug in the parameter E_ref on calling newton() method in
+ gistrainer.cpp when applying GIS algorithm with Gaussian smoothing
543 aclocal.m4
@@ -0,0 +1,543 @@
+AC_DEFUN(wi_ARG_DISABLE_CCDV, [
+AC_ARG_ENABLE(ccdv,[ --disable-ccdv disable use of ccdv program in Makefiles],use_ccdv="$enableval",use_ccdv=yes)
+])
+dnl
+dnl
+dnl
+dnl
+AC_DEFUN(wi_PROG_CCDV_NO_CREATE, [
+if test "x$use_ccdv" = "xno" ; then
+ AC_MSG_CHECKING([for ccdv])
+ AC_MSG_RESULT([(disabled)])
+else
+ AC_PATH_PROG(CCDV, "CCDV", "")
+ CCDV="$wi_cv_path_ccdv"
+ if test "x$CCDV" != x ; then
+ CCDV="$CCDV " # trailing space needed
+ fi
+AC_SUBST(CCDV)
+fi
+])
+dnl
+dnl
+dnl
+dnl
+AC_DEFUN(wi_PROG_CCDV, [
+if test "x$use_ccdv" = "xno" ; then
+ AC_MSG_CHECKING([for ccdv])
+ AC_MSG_RESULT([(disabled)])
+else
+unset wi_cv_path_ccdv # can't use cache if it was a temp prog last time
+wi_used_cache_path_ccdv="yes"
+AC_CACHE_CHECK([for ccdv], [wi_cv_path_ccdv], [
+wi_used_cache_path_ccdv="no"
+for CCDV in /usr/bin/ccdv /usr/local/bin/ccdv /usr/ccs/bin/ccdv NONE
+do
+ if test "$CCDV" = NONE ; then CCDV="" ; break ; fi
+ $CCDV >/dev/null 2>&1
+ if test $? -eq 96 ; then
+ break
+ fi
+done
+if test "x$CCDV" = "x" ; then
+ changequote({{, }})dnl
+ cat > ccdv.c << 'EOF'
+/* ccdv.c
+ *
+ * Copyright (C) 2002-2003, by Mike Gleason, NcFTP Software.
+ * All Rights Reserved.
+ *
+ * Licensed under the GNU Public License.
+ */
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#define SETCOLOR_SUCCESS (gANSIEscapes ? "\033\1331;32m" : "")
+#define SETCOLOR_FAILURE (gANSIEscapes ? "\033\1331;31m" : "")
+#define SETCOLOR_WARNING (gANSIEscapes ? "\033\1331;33m" : "")
+#define SETCOLOR_NORMAL (gANSIEscapes ? "\033\1330;39m" : "")
+
+#define TEXT_BLOCK_SIZE 8192
+#define INDENT 2
+
+#define TERMS "screen:vt100:vt102:vt220:vt320:xterm:ansi:linux:scoterm:scoansi:dtterm:cons25:cygwin"
+
+size_t gNBufUsed = 0, gNBufAllocated = 0;
+char *gBuf = NULL;
+int gCCPID;
+char gAction[64] = "";
+char gTarget[64] = "";
+char gAr[32] = "";
+char gArLibraryTarget[64] = "";
+int gDumpCmdArgs = 0;
+char gArgsStr[800];
+int gColumns = 80;
+int gANSIEscapes = 0;
+int gExitStatus = 95;
+
+static void
+DumpFormattedOutput(void)
+{
+ char *cp;
+ char spaces[8 + 1] = " ";
+ char *saved;
+ int curcol;
+ int i;
+
+ curcol = 0;
+ saved = NULL;
+ for (cp = gBuf + ((gDumpCmdArgs == 0) ? strlen(gArgsStr) : 0); ; cp++) {
+ if (*cp == '\0') {
+ if (saved != NULL) {
+ cp = saved;
+ saved = NULL;
+ } else break;
+ }
+ if (*cp == '\r')
+ continue;
+ if (*cp == '\t') {
+ saved = cp + 1;
+ cp = spaces + 8 - (8 - ((curcol - INDENT - 1) % 8));
+ }
+ if (curcol == 0) {
+ for (i = INDENT; --i >= 0; )
+ putchar(' ');
+ curcol = INDENT;
+ }
+ putchar(*cp);
+ if (++curcol == (gColumns - 1)) {
+ putchar('\n');
+ curcol = 0;
+ } else if (*cp == '\n')
+ curcol = 0;
+ }
+ free(gBuf);
+} /* DumpFormattedOutput */
+
+
+
+/* Difftime(), only for timeval structures. */
+static void TimeValSubtract(struct timeval *tdiff, struct timeval *t1, struct timeval *t0)
+{
+ tdiff->tv_sec = t1->tv_sec - t0->tv_sec;
+ tdiff->tv_usec = t1->tv_usec - t0->tv_usec;
+ if (tdiff->tv_usec < 0) {
+ tdiff->tv_sec--;
+ tdiff->tv_usec += 1000000;
+ }
+} /* TimeValSubtract */
+
+
+
+static void
+Wait(void)
+{
+ int pid2, status;
+
+ do {
+ status = 0;
+ pid2 = (int) waitpid(gCCPID, &status, 0);
+ } while (((pid2 >= 0) && (! WIFEXITED(status))) || ((pid2 < 0) && (errno == EINTR)));
+ if (WIFEXITED(status))
+ gExitStatus = WEXITSTATUS(status);
+} /* Wait */
+
+
+
+static int
+SlurpProgress(int fd)
+{
+ char s1[71];
+ char *newbuf;
+ int nready;
+ size_t ntoread;
+ ssize_t nread;
+ struct timeval now, tnext, tleft;
+ fd_set ss;
+ fd_set ss2;
+ const char *trail = "/-\\|", *trailcp;
+
+ trailcp = trail;
+ snprintf(s1, sizeof(s1), "%s%s%s... ", gAction, gTarget[0] ? " " : "", gTarget);
+ printf("\r%-70s%-9s", s1, "");
+ fflush(stdout);
+
+ gettimeofday(&now, NULL);
+ tnext = now;
+ tnext.tv_sec++;
+ tleft.tv_sec = 1;
+ tleft.tv_usec = 0;
+ FD_ZERO(&ss2);
+ FD_SET(fd, &ss2);
+ for(;;) {
+ if (gNBufUsed == (gNBufAllocated - 1)) {
+ if ((newbuf = (char *) realloc(gBuf, gNBufAllocated + TEXT_BLOCK_SIZE)) == NULL) {
+ perror("ccdv: realloc");
+ return (-1);
+ }
+ gNBufAllocated += TEXT_BLOCK_SIZE;
+ gBuf = newbuf;
+ }
+ for (;;) {
+ ss = ss2;
+ nready = select(fd + 1, &ss, NULL, NULL, &tleft);
+ if (nready == 1)
+ break;
+ if (nready < 0) {
+ if (errno != EINTR) {
+ perror("ccdv: select");
+ return (-1);
+ }
+ continue;
+ }
+ gettimeofday(&now, NULL);
+ if ((now.tv_sec > tnext.tv_sec) || ((now.tv_sec == tnext.tv_sec) && (now.tv_usec >= tnext.tv_usec))) {
+ tnext = now;
+ tnext.tv_sec++;
+ tleft.tv_sec = 1;
+ tleft.tv_usec = 0;
+ printf("\r%-71s%c%-7s", s1, *trailcp, "");
+ fflush(stdout);
+ if (*++trailcp == '\0')
+ trailcp = trail;
+ } else {
+ TimeValSubtract(&tleft, &tnext, &now);
+ }
+ }
+ ntoread = (gNBufAllocated - gNBufUsed - 1);
+ nread = read(fd, gBuf + gNBufUsed, ntoread);
+ if (nread < 0) {
+ if (errno == EINTR)
+ continue;
+ perror("ccdv: read");
+ return (-1);
+ } else if (nread == 0) {
+ break;
+ }
+ gNBufUsed += nread;
+ gBuf[gNBufUsed] = '\0';
+ }
+ snprintf(s1, sizeof(s1), "%s%s%s: ", gAction, gTarget[0] ? " " : "", gTarget);
+ Wait();
+ if (gExitStatus == 0) {
+ printf("\r%-70s", s1);
+ printf("[%s%s%s]", ((gNBufUsed - strlen(gArgsStr)) < 4) ? SETCOLOR_SUCCESS : SETCOLOR_WARNING, "OK", SETCOLOR_NORMAL);
+ printf("%-5s\n", " ");
+ } else {
+ printf("\r%-70s", s1);
+ printf("[%s%s%s]", SETCOLOR_FAILURE, "ERROR", SETCOLOR_NORMAL);
+ printf("%-2s\n", " ");
+ gDumpCmdArgs = 1; /* print cmd when there are errors */
+ }
+ fflush(stdout);
+ return (0);
+} /* SlurpProgress */
+
+
+
+static int
+SlurpAll(int fd)
+{
+ char *newbuf;
+ size_t ntoread;
+ ssize_t nread;
+
+ printf("%s%s%s.\n", gAction, gTarget[0] ? " " : "", gTarget);
+ fflush(stdout);
+
+ for(;;) {
+ if (gNBufUsed == (gNBufAllocated - 1)) {
+ if ((newbuf = (char *) realloc(gBuf, gNBufAllocated + TEXT_BLOCK_SIZE)) == NULL) {
+ perror("ccdv: realloc");
+ return (-1);
+ }
+ gNBufAllocated += TEXT_BLOCK_SIZE;
+ gBuf = newbuf;
+ }
+ ntoread = (gNBufAllocated - gNBufUsed - 1);
+ nread = read(fd, gBuf + gNBufUsed, ntoread);
+ if (nread < 0) {
+ if (errno == EINTR)
+ continue;
+ perror("ccdv: read");
+ return (-1);
+ } else if (nread == 0) {
+ break;
+ }
+ gNBufUsed += nread;
+ gBuf[gNBufUsed] = '\0';
+ }
+ Wait();
+ gDumpCmdArgs = (gExitStatus != 0); /* print cmd when there are errors */
+ return (0);
+} /* SlurpAll */
+
+
+
+static const char *
+Basename(const char *path)
+{
+ const char *cp;
+ cp = strrchr(path, '/');
+ if (cp == NULL)
+ return (path);
+ return (cp + 1);
+} /* Basename */
+
+
+
+static const char *
+Extension(const char *path)
+{
+ const char *cp = path;
+ cp = strrchr(path, '.');
+ if (cp == NULL)
+ return ("");
+ return (cp);
+} /* Extension */
+
+
+
+static void
+Usage(void)
+{
+ fprintf(stderr, "Usage: ccdv /path/to/cc CFLAGS...\n\n");
+ fprintf(stderr, "I wrote this to reduce the deluge Make output to make finding actual problems\n");
+ fprintf(stderr, "easier. It is intended to be invoked from Makefiles, like this. Instead of:\n\n");
+ fprintf(stderr, "\t.c.o:\n");
+ fprintf(stderr, "\t\t$(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) $< -c\n");
+ fprintf(stderr, "\nRewrite your rule so it looks like:\n\n");
+ fprintf(stderr, "\t.c.o:\n");
+ fprintf(stderr, "\t\t@ccdv $(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) $< -c\n\n");
+ fprintf(stderr, "ccdv 1.1.0 is Free under the GNU Public License. Enjoy!\n");
+ fprintf(stderr, " -- Mike Gleason, NcFTP Software <http://www.ncftp.com>\n");
+ exit(96);
+} /* Usage */
+
+
+
+int
+main(int argc, char **argv)
+{
+ int pipe1[2];
+ int devnull;
+ char emerg[256];
+ int fd;
+ int nread;
+ int i;
+ int cc = 0, pch = 0;
+ const char *quote;
+
+ if (argc < 2)
+ Usage();
+
+ snprintf(gAction, sizeof(gAction), "Running %s", Basename(argv[1]));
+ memset(gArgsStr, 0, sizeof(gArgsStr));
+ for (i = 1; i < argc; i++) {
+ quote = (strchr(argv[i], ' ') != NULL) ? "\"" : "";
+ snprintf(gArgsStr + strlen(gArgsStr), sizeof(gArgsStr) - strlen(gArgsStr), "%s%s%s%s%s", (i == 1) ? "" : " ", quote, argv[i], quote, (i == (argc - 1)) ? "\n" : "");
+ if ((strcmp(argv[i], "-o") == 0) && ((i + 1) < argc)) {
+ if (strcasecmp(Extension(argv[i + 1]), ".o") != 0) {
+ strcpy(gAction, "Linking");
+ snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i + 1]));
+ }
+ } else if (strchr("-+/", (int) argv[i][0]) != NULL) {
+ continue;
+ } else if (strncasecmp(Extension(argv[i]), ".c", 2) == 0) {
+ cc++;
+ snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i]));
+ } else if ((strncasecmp(Extension(argv[i]), ".h", 2) == 0) && (cc == 0)) {
+ pch++;
+ snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i]));
+ } else if ((i == 1) && (strcmp(Basename(argv[i]), "ar") == 0)) {
+ snprintf(gAr, sizeof(gAr), "%s", Basename(argv[i]));
+ } else if ((gArLibraryTarget[0] == '\0') && (strcasecmp(Extension(argv[i]), ".a") == 0)) {
+ snprintf(gArLibraryTarget, sizeof(gArLibraryTarget), "%s", Basename(argv[i]));
+ }
+ }
+ if ((gAr[0] != '\0') && (gArLibraryTarget[0] != '\0')) {
+ strcpy(gAction, "Creating library");
+ snprintf(gTarget, sizeof(gTarget), "%s", gArLibraryTarget);
+ } else if (pch > 0) {
+ strcpy(gAction, "Precompiling");
+ } else if (cc > 0) {
+ strcpy(gAction, "Compiling");
+ }
+
+ if (pipe(pipe1) < 0) {
+ perror("ccdv: pipe");
+ exit(97);
+ }
+
+ (void) close(0);
+ devnull = open("/dev/null", O_RDWR, 00666);
+ if ((devnull != 0) && (dup2(devnull, 0) == 0))
+ close(devnull);
+
+ gCCPID = (int) fork();
+ if (gCCPID < 0) {
+ (void) close(pipe1[0]);
+ (void) close(pipe1[1]);
+ perror("ccdv: fork");
+ exit(98);
+ } else if (gCCPID == 0) {
+ /* Child */
+ (void) close(pipe1[0]); /* close read end */
+ if (pipe1[1] != 1) { /* use write end on stdout */
+ (void) dup2(pipe1[1], 1);
+ (void) close(pipe1[1]);
+ }
+ (void) dup2(1, 2); /* use write end on stderr */
+ execvp(argv[1], argv + 1);
+ perror(argv[1]);
+ exit(99);
+ }
+
+ /* parent */
+ (void) close(pipe1[1]); /* close write end */
+ fd = pipe1[0]; /* use read end */
+
+ gColumns = (getenv("COLUMNS") != NULL) ? atoi(getenv("COLUMNS")) : 80;
+ gANSIEscapes = (getenv("TERM") != NULL) && (strstr(TERMS, getenv("TERM")) != NULL);
+ gBuf = (char *) malloc(TEXT_BLOCK_SIZE);
+ if (gBuf == NULL)
+ goto panic;
+ gNBufUsed = 0;
+ gNBufAllocated = TEXT_BLOCK_SIZE;
+ if (strlen(gArgsStr) < (gNBufAllocated - 1)) {
+ strcpy(gBuf, gArgsStr);
+ gNBufUsed = strlen(gArgsStr);
+ }
+
+ if (isatty(1)) {
+ if (SlurpProgress(fd) < 0)
+ goto panic;
+ } else {
+ if (SlurpAll(fd) < 0)
+ goto panic;
+ }
+ DumpFormattedOutput();
+ exit(gExitStatus);
+
+panic:
+ gDumpCmdArgs = 1; /* print cmd when there are errors */
+ DumpFormattedOutput();
+ while ((nread = read(fd, emerg, (size_t) sizeof(emerg))) > 0)
+ (void) write(2, emerg, (size_t) nread);
+ Wait();
+ exit(gExitStatus);
+} /* main */
+/* eof ccdv.c */
+EOF
+ changequote([, ])dnl
+ ${CC-cc} $DEFS $CPPFLAGS $CFLAGS "ccdv.c" -o "ccdv" >/dev/null 2>&1
+ /bin/rm -f ccdv.c ccdv.o ccdv.c.gz.uu ccdv.c.gz
+ strip ./ccdv >/dev/null 2>&1
+ ./ccdv >/dev/null 2>&1
+ if test $? -eq 96 ; then
+ CCDV="./ccdv"
+ else
+ /bin/rm -f ccdv
+ fi
+fi
+if test "x$CCDV" != x ; then
+ wi_RESOLVE_PATH([$CCDV], [CCDV])
+ wi_cv_path_ccdv="$CCDV"
+ CCDV="$CCDV " # trailing space needed
+else
+ wi_cv_path_ccdv=""
+fi
+])
+if test "$wi_used_cache_path_ccdv" = yes ; then
+ CCDV="$wi_cv_path_ccdv"
+ if test "x$CCDV" != x ; then
+ CCDV="$CCDV " # trailing space needed
+ fi
+fi
+AC_SUBST(CCDV)
+fi
+])
+dnl
+dnl
+dnl
+dnl
+AC_DEFUN(wi_PATH_PWD, [
+AC_PATH_PROG(wi_PWD, "pwd", "pwd")
+])
+dnl
+dnl
+dnl
+dnl
+AC_DEFUN(wi_BASENAME, [
+$1=`echo "[$]$1" | sed -n '
+s-//*-/-g
+s-/*$--
+s-^/$--
+s-^.*/--
+p
+q'`dnl
+])
+dnl
+dnl
+dnl
+dnl
+AC_DEFUN(wi_DIRNAME, [
+changequote({{, }})dnl
+$1=`echo "{{$}}$1" | sed -n '
+s-//*-/-g
+s-/*$--
+/^\/\/*[^/]*$/{
+ c\\
+/
+ p
+ q
+}
+/^[^/]*$/{
+ c\\
+.
+ p
+ q
+}
+/./{
+ s-/[^/]*$--
+ p
+ q
+}'`dnl
+changequote([, ])dnl
+])
+dnl
+dnl
+dnl
+dnl
+AC_DEFUN(wi_RESOLVE_PATH, [
+AC_REQUIRE([wi_PATH_PWD])
+wi_path="$1"
+if test -d "$wi_path" ; then
+ wi_resolved_path=`cd "$wi_path" ; $wi_PWD 2>/dev/null`
+elif test ! -f "$wi_path" ; then
+ wi_resolved_path="$wi_path"
+else
+ wi_parent_dir="$wi_path"
+ wi_file_name="$wi_path"
+ wi_DIRNAME(wi_parent_dir)
+ wi_BASENAME(wi_file_name)
+ wi_resolved_path=`cd "$wi_parent_dir" ; $wi_PWD 2>/dev/null`
+ if test "x$wi_resolved_path" != x ; then
+ wi_resolved_path="$wi_resolved_path/$wi_file_name"
+ fi
+ unset wi_parent_dir wi_file_name
+fi
+if test "x$wi_resolved_path" = x ; then
+ $2="[$]$1"
+else
+ $2="$wi_resolved_path"
+fi
+unset wi_resolved_path wi_path
+])
80 config.h.in
@@ -0,0 +1,80 @@
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* package's version */
+#undef CMDLINE_PARSER_VERSION
+
+/* defined to 1 if a fortran compiler is found */
+#undef HAVE_FORTRAN
+
+/* Define to 1 if you have the `getopt_long' function. */
+#undef HAVE_GETOPT_LONG
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `gnugetopt' library (-lgnugetopt). */
+#undef HAVE_LIBGNUGETOPT
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if you have the `z' library (-lz). */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* 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 to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* 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 processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
7,347 configure
7,347 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
137 configure.in
@@ -0,0 +1,137 @@
+dnl Copyright 2002-2004 by Zhang Le <ejoy@xinhuanet.com>
+dnl Last Change : 04-Oct-2006.
+
+AC_INIT(Jamrules.in)
+
+AC_CONFIG_HEADER(config.h)
+AC_CONFIG_AUX_DIR(script)
+
+AC_DEFINE([CMDLINE_PARSER_VERSION], ["version-devel"], [package's version])
+
+dnl Check platform
+AC_CANONICAL_HOST
+
+dnl use C++ do lib checking
+AC_LANG_CPLUSPLUS
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_FC
+AC_FC_LIBRARY_LDFLAGS
+if test -n "$FC" ; then
+ AC_DEFINE([HAVE_FORTRAN], [1], [defined to 1 if a fortran compiler is found])
+fi
+
+# the two macro will cause strange linking problems
+# so they are disabled.
+# libg2c must be checked manually
+#AC_FC_DUMMY_MAIN
+#AC_FC_LIBRARY_LDFLAGS
+AC_C_BIGENDIAN
+
+wi_ARG_DISABLE_CCDV
+dnl check for compiler flags and debug options
+AC_ARG_ENABLE(debug,
+ [ --enable-debug compile for debug, useful for developers.[default=no]],
+ [if test "x$enableval" = "xyes"; then
+ enable_debug=yes
+ else
+ enable_debug=no
+ fi])
+
+AC_ARG_ENABLE(static,
+ [ --enable-static build static binaries [default=no]],
+ [if test "x$enableval" = "xyes"; then
+ enable_static=yes
+ else
+ enable_static=no
+ fi])
+
+AC_ARG_ENABLE(system-boost-lib,
+ [ --disable-system-boost-lib use boost shipped with this package [default=no]],
+ [if test "x$enableval" = "xyes"; then
+ use_builtin_boost=no
+ else
+ use_builtin_boost=yes
+ fi])
+
+dnl AC_CHECK_PROGS(MAKE, gmake make)
+dnl AC_SUBST(MAKE)
+wi_PROG_CCDV
+
+dnl Checks for header files.
+dnl AC_CHECK_HEADERS([fcntl.h string.h sys/ioctl.h termios.h unistd.h])
+AC_CHECK_HEADERS([ieeefp.h]) dnl finite() on sun os
+AC_CHECK_HEADER([boost/config.hpp], [], [use_builtin_boost=yes])
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+
+dnl Checks for library functions.
+AC_CHECK_FUNCS([gettimeofday getopt_long])
+# AC_CHECK_FUNC(srand)
+AC_FUNC_MMAP
+AC_CHECK_LIB(m, main)
+AC_CHECK_LIB(gnugetopt, getopt)
+AC_CHECK_LIB(z, main)
+#AC_CHECK_LIB(g2c, main)
+# TODO: if no fortran compiler is found, disable lbfgs and use GIS instead
+#if test "$ac_cv_lib_g2c_main" = 'no'; then
+# echo "libg2c not found, this should be shipped with GNU Fortran compiler."
+# echo "configure gives up."
+# exit 1
+#fi
+
+if test "$use_builtin_boost" = 'yes'; then
+ echo "**info** configure will use boost lib shipped with this package"
+ BOOST_LIB='$(TOP)/lib/'
+fi
+
+if test "$enable_debug" = 'yes'; then
+ CFLAGS="$CFLAGS $CPPFLAGS -g -Wall -DHAVE_CONFIG_H"
+ CXXFLAGS="$CXXFLAGS $CPPFLAGS -g -Wall -DHAVE_CONFIG_H"
+ OPTIM="-O0"
+ TARGET_DIR=""
+else
+ CFLAGS="$CFLAGS $CPPFLAGS -Wall -DNDEBUG -DHAVE_CONFIG_H"
+ CXXFLAGS="$CXXFLAGS $CPPFLAGS -Wall -DNDEBUG -DHAVE_CONFIG_H"
+ OPTIM="-O3"
+ TARGET_DIR="src/opt"
+fi
+
+if test "$enable_static" = 'yes'; then
+ LINK="$CXX $LDFLAGS -static"
+else
+ LINK="$CXX $LDFLAGS"
+fi
+
+# show optional compoment information
+echo ""
+if test "$ac_cv_lib_z_main" = 'no'; then
+ echo "**info** zlib not found, compressed model file disabled!"
+ echo ""
+fi
+
+if test -z "$FC" ; then
+ echo "**info** Fortran compiler not found, LBFGS optimization module disabled!"
+ echo "**info** Only GIS training method is availiable."
+ echo ""
+fi
+
+AC_SUBST(OPTIM)
+AC_SUBST(LINK)
+AC_SUBST(TARGET_DIR)
+AC_SUBST(BOOST_LIB)
+AC_SUBST(host_cpu)
+AC_SUBST(host_os)
+AC_SUBST(host_vendor)
+
+dnl for use in python/setup.py.in
+#AC_SUBST(ac_cv_lib_g2c_main)
+AC_SUBST(ac_cv_lib_z_main)
+AC_SUBST(ac_cv_func_getopt_long)
+
+AC_OUTPUT(Jamrules python/setup.py)
+
+echo "configure complete, now type make to build."
+echo ""
1,101 doc/Doxyfile
@@ -0,0 +1,1101 @@
+# Doxyfile 1.3.2
+
+# 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 (" ")
+
+#---------------------------------------------------------------------------
+# General 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 = maxent
+
+# 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 =
+
+# 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 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 = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# 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 = NO
+
+# 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 = YES
+
+# 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 = YES
+
+# 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 = YES
+
+# 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
+
+# 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 = NO
+
+# 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.
+
+STRIP_FROM_PATH =
+
+# 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 = NO
+
+# 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 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 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 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
+# explict @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 = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = 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
+
+# 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 = NO
+
+# 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 = 8
+
+# 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
+
+# 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 =
+
+# 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 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 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 = YES
+
+#---------------------------------------------------------------------------
+# 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 =
+
+#---------------------------------------------------------------------------
+# 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 = ../src
+
+# 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
+
+FILE_PATTERNS = *.hpp *.cpp
+
+# 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 = NO
+
+# 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 =
+
+# 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 =
+
+# 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 =
+
+# 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 =
+
+# 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 =
+
+# 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.
+
+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 = NO
+
+# 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 = 5
+
+# 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 = 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 =
+
+# 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 =
+
+# 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
+
+HTML_STYLESHEET =
+
+# 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 dir.
+
+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 = 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 = NO
+
+# 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 = a4wide
+
+# 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 =
+
+# 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 = NO
+
+# 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 = NO
+
+# 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 = NO
+
+# 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 = YES
+
+#---------------------------------------------------------------------------
+# 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 optimised 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 assigments. 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