Merge branch 'master' into yinfast
authorPaul Brossier <piem@piem.org>
Mon, 24 Jul 2017 12:12:55 +0000 (14:12 +0200)
committerPaul Brossier <piem@piem.org>
Mon, 24 Jul 2017 12:12:55 +0000 (14:12 +0200)
1  2 
doc/web.cfg
python/lib/gen_external.py

diff --combined doc/web.cfg
@@@ -1,4 -1,4 +1,4 @@@
- # Doxyfile 1.8.8
+ # Doxyfile 1.8.13
  
  # This file describes the settings to be used by the documentation system
  # doxygen (www.doxygen.org) for a project.
@@@ -46,10 -46,10 +46,10 @@@ PROJECT_NUMBER         = "latest
  
  PROJECT_BRIEF          =
  
- # With the PROJECT_LOGO tag one can specify an logo or icon that is included in
- # the documentation. The maximum height of the logo should not exceed 55 pixels
- # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
- # to the output directory.
+ # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+ # in the documentation. The maximum height of the logo should not exceed 55
+ # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+ # the logo to the output directory.
  
  PROJECT_LOGO           =
  
@@@ -60,7 -60,7 +60,7 @@@
  
  OUTPUT_DIRECTORY       = web
  
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+ # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
  # directories (in 2 levels) under the output directory of each output format and
  # will distribute the generated files over these directories. Enabling this
  # option can be useful when feeding doxygen a huge amount of source files, where
@@@ -93,14 -93,14 +93,14 @@@ ALLOW_UNICODE_NAMES    = N
  
  OUTPUT_LANGUAGE        = English
  
- # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+ # If the BRIEF_MEMBER_DESC tag is set to YES, 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.
  # The default value is: YES.
  
  BRIEF_MEMBER_DESC      = YES
  
- # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+ # If the REPEAT_BRIEF tag is set to YES, 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
@@@ -135,7 -135,7 +135,7 @@@ ALWAYS_DETAILED_SEC    = N
  
  INLINE_INHERITED_MEMB  = NO
  
- # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+ # If the FULL_PATH_NAMES tag is set to YES, 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
  # The default value is: YES.
@@@ -205,9 -205,9 +205,9 @@@ MULTILINE_CPP_IS_BRIEF = N
  
  INHERIT_DOCS           = YES
  
- # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
- # new page for each member. If set to NO, the documentation of a member will be
- # part of the file/class/namespace that contains it.
+ # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+ # page for each member. If set to NO, the documentation of a member will be part
+ # of the file/class/namespace that contains it.
  # The default value is: NO.
  
  SEPARATE_MEMBER_PAGES  = NO
@@@ -276,7 -276,7 +276,7 @@@ OPTIMIZE_OUTPUT_VHDL   = N
  # instance to make doxygen treat .inc files as Fortran files (default is PHP),
  # and .f files as C (default is Fortran), use: inc=Fortran f=C.
  #
- # Note For files without extension you can use no_extension as a placeholder.
+ # Note: For files without extension you can use no_extension as a placeholder.
  #
  # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
  # the files are not read by doxygen.
@@@ -293,10 -293,19 +293,19 @@@ EXTENSION_MAPPING      
  
  MARKDOWN_SUPPORT       = YES
  
+ # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+ # to that level are automatically included in the table of contents, even if
+ # they do not have an id attribute.
+ # Note: This feature currently applies only to Markdown headings.
+ # Minimum value: 0, maximum value: 99, default value: 0.
+ # This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+ TOC_INCLUDE_HEADINGS   = 0
  # When enabled doxygen tries to link words that correspond to documented
  # classes, or namespaces to their corresponding documentation. Such a link can
- # be prevented in individual cases by by putting a % sign in front of the word
- # or globally by setting AUTOLINK_SUPPORT to NO.
+ # be prevented in individual cases by putting a % sign in front of the word or
+ # globally by setting AUTOLINK_SUPPORT to NO.
  # The default value is: YES.
  
  AUTOLINK_SUPPORT       = YES
@@@ -336,13 -345,20 +345,20 @@@ SIP_SUPPORT            = N
  IDL_PROPERTY_SUPPORT   = 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
+ # 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.
  # The default value is: NO.
  
  DISTRIBUTE_GROUP_DOC   = NO
  
+ # If one adds a struct or class to a group and this option is enabled, then also
+ # any nested class or struct is added to the same group. By default this option
+ # is disabled and one has to add nested compounds explicitly via \ingroup.
+ # The default value is: NO.
+ GROUP_NESTED_COMPOUNDS = NO
  # Set the SUBGROUPING tag to YES to allow class member groups of the same type
  # (for instance a group of public functions) to be put as a subgroup of that
  # type (e.g. under the Public Functions section). Set it to NO to prevent
@@@ -401,7 -417,7 +417,7 @@@ LOOKUP_CACHE_SIZE      = 
  # Build related configuration options
  #---------------------------------------------------------------------------
  
- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+ # 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 respectively 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
+ # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
  # be included in the documentation.
  # The default value is: NO.
  
  EXTRACT_PRIVATE        = NO
  
- # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+ # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
  # scope will be included in the documentation.
  # The default value is: NO.
  
  EXTRACT_PACKAGE        = NO
  
- # If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+ # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
  # included in the documentation.
  # The default value is: NO.
  
  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
+ # 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. Does not have any effect
  # for Java sources.
  # The default value is: YES.
  
  EXTRACT_LOCAL_CLASSES  = YES
  
- # This flag is only useful for Objective-C code. When set to YES local methods,
+ # This flag is only useful for Objective-C code. If set to YES, local methods,
  # which are defined in the implementation section but not in the interface are
- # included in the documentation. If set to NO only methods in the interface are
+ # included in the documentation. If set to NO, only methods in the interface are
  # included.
  # The default value is: NO.
  
@@@ -464,21 -480,21 +480,21 @@@ HIDE_UNDOC_MEMBERS     = N
  
  # 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 these classes will be included in the various overviews. This option has
- # no effect if EXTRACT_ALL is enabled.
+ # to NO, these classes will be included in the various overviews. This option
+ # has no effect if EXTRACT_ALL is enabled.
  # The default value is: NO.
  
  HIDE_UNDOC_CLASSES     = NO
  
  # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
- # (class|struct|union) declarations. If set to NO these declarations will be
+ # (class|struct|union) declarations. If set to NO, these declarations will be
  # included in the documentation.
  # The default value is: NO.
  
  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 these
+ # documentation blocks found inside the body of a function. If set to NO, these
  # blocks will be appended to the function's detailed documentation block.
  # The default value is: NO.
  
@@@ -492,7 -508,7 +508,7 @@@ HIDE_IN_BODY_DOCS      = N
  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
+ # 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
  # and Mac users are advised to set this option to NO.
  CASE_SENSE_NAMES       = NO
  
  # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
- # their full class and namespace scopes in the documentation. If set to YES the
+ # their full class and namespace scopes in the documentation. If set to YES, the
  # scope will be hidden.
  # The default value is: NO.
  
  HIDE_SCOPE_NAMES       = NO
  
+ # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+ # append additional text to a page's title, such as Class Reference. If set to
+ # YES the compound reference will be hidden.
+ # The default value is: NO.
+ HIDE_COMPOUND_REFERENCE= NO
  # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
  # the files that are included by a file in the documentation of that file.
  # The default value is: YES.
@@@ -534,14 -557,14 +557,14 @@@ INLINE_INFO            = YE
  
  # If the SORT_MEMBER_DOCS tag is set to YES 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.
+ # name. If set to NO, the members will appear in declaration order.
  # The default value is: YES.
  
  SORT_MEMBER_DOCS       = YES
  
  # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
  # descriptions of file, namespace and class members alphabetically by member
- # name. If set to NO the members will appear in declaration order. Note that
+ # name. If set to NO, the members will appear in declaration order. Note that
  # this will also influence the order of the classes in the class list.
  # The default value is: NO.
  
@@@ -586,27 -609,25 +609,25 @@@ SORT_BY_SCOPE_NAME     = N
  
  STRICT_PROTO_MATCHING  = NO
  
- # 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.
+ # 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.
  # The default value is: YES.
  
  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.
+ # 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.
  # The default value is: YES.
  
  GENERATE_TESTLIST      = YES
  
- # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+ # 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.
  # The default value is: YES.
  
  GENERATE_BUGLIST       = YES
  
- # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+ # 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.
  # The default value is: YES.
@@@ -631,8 -652,8 +652,8 @@@ ENABLED_SECTIONS       
  MAX_INITIALIZER_LINES  = 30
  
  # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
- # the bottom of the documentation of classes and structs. If set to YES the list
- # will mention the files that were used to generate the documentation.
+ # 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.
  # The default value is: YES.
  
  SHOW_USED_FILES        = YES
@@@ -696,7 -717,7 +717,7 @@@ CITE_BIB_FILES         
  QUIET                  = NO
  
  # The WARNINGS tag can be used to turn on/off the warning messages that are
- # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+ # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
  # this implies that the warnings are on.
  #
  # Tip: Turn warnings on while writing the documentation.
  
  WARNINGS               = YES
  
- # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+ # If the WARN_IF_UNDOCUMENTED tag 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.
  # The default value is: YES.
@@@ -721,12 -742,18 +742,18 @@@ WARN_IF_DOC_ERROR      = YE
  
  # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
  # are documented, but have no documentation for their parameters or return
- # value. If set to NO doxygen will only warn about wrong or incomplete parameter
- # documentation, but not about the absence of documentation.
+ # value. If set to NO, doxygen will only warn about wrong or incomplete
+ # parameter documentation, but not about the absence of documentation.
  # The default value is: NO.
  
  WARN_NO_PARAMDOC       = NO
  
+ # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+ # a warning is encountered.
+ # The default value is: NO.
+ WARN_AS_ERROR          = NO
  # 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
@@@ -750,7 -777,7 +777,7 @@@ WARN_LOGFILE           
  # The INPUT tag is 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.
+ # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
  # Note: If this tag is empty the current directory is searched.
  
  INPUT                  = ../src
@@@ -766,12 -793,17 +793,17 @@@ INPUT_ENCODING         = UTF-
  
  # If the value of the INPUT tag contains directories, you can use the
  # FILE_PATTERNS tag to specify one or more wildcard patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
- # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
- # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
- # *.qsf, *.as and *.js.
+ # *.h) to filter out the source-files in the directories.
+ #
+ # Note that for custom extensions or not directly supported extensions you also
+ # need to set EXTENSION_MAPPING for the extension otherwise the files are not
+ # read by doxygen.
+ #
+ # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+ # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+ # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+ # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+ # *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
  
  FILE_PATTERNS          = *.h
  
@@@ -803,7 -835,6 +835,7 @@@ EXCLUDE                = ../src/aubio_p
                           ../src/pitch/pitchmcomb.h \
                           ../src/pitch/pitchyin.h \
                           ../src/pitch/pitchyinfft.h \
 +                         ../src/pitch/pitchyinfast.h \
                           ../src/pitch/pitchschmitt.h \
                           ../src/pitch/pitchfcomb.h \
                           ../src/pitch/pitchspecacf.h \
@@@ -880,6 -911,10 +912,10 @@@ IMAGE_PATH             
  # Note that the filter must not add or remove lines; it is applied before the
  # code is scanned, but not when the output code is generated. If lines are added
  # or removed, the anchors will not be placed correctly.
+ #
+ # Note that for custom extensions or not directly supported extensions you also
+ # need to set EXTENSION_MAPPING for the extension otherwise the files are not
+ # properly processed by doxygen.
  
  INPUT_FILTER           =
  
  # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
  # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
  # patterns match the file name, INPUT_FILTER is applied.
+ #
+ # Note that for custom extensions or not directly supported extensions you also
+ # need to set EXTENSION_MAPPING for the extension otherwise the files are not
+ # properly processed by doxygen.
  
  FILTER_PATTERNS        =
  
  # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
- # INPUT_FILTER ) will also be used to filter the input files that are used for
+ # INPUT_FILTER) will also be used to filter the input files that are used for
  # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
  # The default value is: NO.
  
@@@ -953,7 -992,7 +993,7 @@@ REFERENCED_BY_RELATION = YE
  REFERENCES_RELATION    = YES
  
  # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
- # to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+ # to YES then the hyperlinks from functions in REFERENCES_RELATION and
  # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
  # link to the documentation.
  # The default value is: YES.
@@@ -1000,13 -1039,13 +1040,13 @@@ USE_HTAGS              = N
  
  VERBATIM_HEADERS       = YES
  
- # If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
+ # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
  # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
  # cost of reduced performance. This can be particularly helpful with template
  # rich C++ code for which doxygen's built-in parser lacks the necessary type
  # information.
  # Note: The availability of this option depends on whether or not doxygen was
- # compiled with the --with-libclang option.
+ # generated with the -Duse-libclang=ON option for CMake.
  # The default value is: NO.
  
  CLANG_ASSISTED_PARSING = NO
@@@ -1049,7 -1088,7 +1089,7 @@@ IGNORE_PREFIX          
  # Configuration options related to the HTML output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+ # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
  # The default value is: YES.
  
  GENERATE_HTML          = YES
@@@ -1115,10 -1154,10 +1155,10 @@@ HTML_STYLESHEET        
  # cascading style sheets that are included after the standard style sheets
  # created by doxygen. Using this option one can overrule certain style aspects.
  # This is preferred over using HTML_STYLESHEET since it does not replace the
- # standard style sheet and is therefor more robust against future updates.
+ # standard style sheet and is therefore more robust against future updates.
  # Doxygen will copy the style sheet files to the output directory.
- # Note: The order of the extra stylesheet files is of importance (e.g. the last
- # stylesheet in the list overrules the setting of the previous ones in the
+ # Note: The order of the extra style sheet files is of importance (e.g. the last
+ # style sheet in the list overrules the setting of the previous ones in the
  # list). For an example see the documentation.
  # This tag requires that the tag GENERATE_HTML is set to YES.
  
@@@ -1135,7 -1174,7 +1175,7 @@@ HTML_EXTRA_STYLESHEET  
  HTML_EXTRA_FILES       =
  
  # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
- # will adjust the colors in the stylesheet and background images according to
+ # will adjust the colors in the style sheet and background images according to
  # this color. Hue is specified as an angle on a colorwheel, see
  # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
  # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
@@@ -1166,8 -1205,9 +1206,9 @@@ HTML_COLORSTYLE_GAMMA  = 8
  
  # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
  # page will contain the date and time when the page was generated. Setting this
- # to NO can help when comparing the output of multiple runs.
- # The default value is: YES.
+ # to YES can help to show when doxygen was last run and thus if the
+ # documentation is up to date.
+ # The default value is: NO.
  # This tag requires that the tag GENERATE_HTML is set to YES.
  
  HTML_TIMESTAMP         = NO
@@@ -1263,28 -1303,28 +1304,28 @@@ GENERATE_HTMLHELP      = N
  CHM_FILE               =
  
  # 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
+ # 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.
  # The file has to be specified with full path.
  # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  
  HHC_LOCATION           =
  
- # 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).
+ # 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).
  # The default value is: NO.
  # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  
  GENERATE_CHI           = NO
  
- # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+ # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
  # and project file content.
  # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  
  CHM_INDEX_ENCODING     =
  
- # 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. Furthermore it
+ # 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. Furthermore it
  # enables the Previous and Next buttons.
  # The default value is: NO.
  # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
@@@ -1398,7 -1438,7 +1439,7 @@@ DISABLE_INDEX          = N
  # 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
  # (i.e. any modern browser). Windows users are probably better off using the
- # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+ # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
  # further fine-tune the look of the index. As an example, the default style
  # sheet generated by doxygen has an example that shows how to put an image at
  # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
@@@ -1426,7 -1466,7 +1467,7 @@@ ENUM_VALUES_PER_LINE   = 
  
  TREEVIEW_WIDTH         = 250
  
- # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+ # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
  # external symbols imported via tag files in a separate window.
  # The default value is: NO.
  # This tag requires that the tag GENERATE_HTML is set to YES.
@@@ -1455,7 -1495,7 +1496,7 @@@ FORMULA_TRANSPARENT    = YE
  
  # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
  # http://www.mathjax.org) which uses client side Javascript for the rendering
- # instead of using prerendered bitmaps. Use this if you do not have LaTeX
+ # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
  # installed or if you want to formulas look prettier in the HTML output. When
  # enabled you may also need to install MathJax separately and configure the path
  # to it using the MATHJAX_RELPATH option.
@@@ -1541,7 -1581,7 +1582,7 @@@ SERVER_BASED_SEARCH    = N
  # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
  # search results.
  #
- # Doxygen ships with an example indexer ( doxyindexer) and search engine
+ # Doxygen ships with an example indexer (doxyindexer) and search engine
  # (doxysearch.cgi) which are based on the open source search engine library
  # Xapian (see: http://xapian.org/).
  #
@@@ -1554,7 -1594,7 +1595,7 @@@ EXTERNAL_SEARCH        = N
  # The SEARCHENGINE_URL should point to a search engine hosted by a web server
  # which will return the search results when EXTERNAL_SEARCH is enabled.
  #
- # Doxygen ships with an example indexer ( doxyindexer) and search engine
+ # Doxygen ships with an example indexer (doxyindexer) and search engine
  # (doxysearch.cgi) which are based on the open source search engine library
  # Xapian (see: http://xapian.org/). See the section "External Indexing and
  # Searching" for details.
@@@ -1592,7 -1632,7 +1633,7 @@@ EXTRA_SEARCH_MAPPINGS  
  # Configuration options related to the LaTeX output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+ # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
  # The default value is: YES.
  
  GENERATE_LATEX         = NO
@@@ -1623,7 -1663,7 +1664,7 @@@ LATEX_CMD_NAME         = late
  
  MAKEINDEX_CMD_NAME     = makeindex
  
- # If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+ # 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.
  # The default value is: NO.
@@@ -1641,9 -1681,12 +1682,12 @@@ COMPACT_LATEX          = N
  PAPER_TYPE             = a4
  
  # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
- # that should be included in the LaTeX output. To get the times font for
- # instance you can specify
- # EXTRA_PACKAGES=times
+ # that should be included in the LaTeX output. The package can be specified just
+ # by its name or with the correct syntax as to be used with the LaTeX
+ # \usepackage command. To get the times font for instance you can specify :
+ # EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+ # To use the option intlimits with the amsmath package you can specify:
+ # EXTRA_PACKAGES=[intlimits]{amsmath}
  # If left blank no extra packages will be included.
  # This tag requires that the tag GENERATE_LATEX is set to YES.
  
@@@ -1658,9 -1701,9 +1702,9 @@@ EXTRA_PACKAGES         
  # Note: Only use a user-defined header if you know what you are doing! The
  # following commands have a special meaning inside the header: $title,
  # $datetime, $date, $doxygenversion, $projectname, $projectnumber,
- # $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
- # for the replacement values of the other commands the user is refered to
- # HTML_HEADER.
+ # $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+ # string, for the replacement values of the other commands the user is referred
+ # to HTML_HEADER.
  # This tag requires that the tag GENERATE_LATEX is set to YES.
  
  LATEX_HEADER           =
  
  LATEX_FOOTER           =
  
+ # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+ # LaTeX style sheets that are included after the standard style sheets created
+ # by doxygen. Using this option one can overrule certain style aspects. Doxygen
+ # will copy the style sheet files to the output directory.
+ # Note: The order of the extra style sheet files is of importance (e.g. the last
+ # style sheet in the list overrules the setting of the previous ones in the
+ # list).
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ LATEX_EXTRA_STYLESHEET =
  # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
  # other source files which should be copied to the LATEX_OUTPUT output
  # directory. Note that the files will be copied as-is; there are no commands or
@@@ -1694,7 -1748,7 +1749,7 @@@ LATEX_EXTRA_FILES      
  PDF_HYPERLINKS         = YES
  
  # If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
- # the PDF file directly from the LaTeX files. Set this option to YES to get a
+ # the PDF file directly from the LaTeX files. Set this option to YES, to get a
  # higher quality PDF documentation.
  # The default value is: YES.
  # This tag requires that the tag GENERATE_LATEX is set to YES.
@@@ -1735,11 -1789,19 +1790,19 @@@ LATEX_SOURCE_CODE      = N
  
  LATEX_BIB_STYLE        = plain
  
+ # If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+ # page will contain the date and time when the page was generated. Setting this
+ # to NO can help when comparing the output of multiple runs.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ LATEX_TIMESTAMP        = NO
  #---------------------------------------------------------------------------
  # Configuration options related to the RTF output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+ # If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
  # RTF output is optimized for Word 97 and may not look too pretty with other RTF
  # readers/editors.
  # The default value is: NO.
@@@ -1754,7 -1816,7 +1817,7 @@@ GENERATE_RTF           = N
  
  RTF_OUTPUT             = rtf
  
- # If the COMPACT_RTF tag is set to YES doxygen generates more compact 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.
  # The default value is: NO.
@@@ -1791,11 -1853,21 +1854,21 @@@ RTF_STYLESHEET_FILE    
  
  RTF_EXTENSIONS_FILE    =
  
+ # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+ # with syntax highlighting in the RTF output.
+ #
+ # Note that which sources are shown also depends on other settings such as
+ # SOURCE_BROWSER.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_RTF is set to YES.
+ RTF_SOURCE_CODE        = NO
  #---------------------------------------------------------------------------
  # Configuration options related to the man page output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+ # If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
  # classes and files.
  # The default value is: NO.
  
@@@ -1839,7 -1911,7 +1912,7 @@@ MAN_LINKS              = N
  # Configuration options related to the XML output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+ # If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
  # captures the structure of the code including all documentation.
  # The default value is: NO.
  
@@@ -1853,7 -1925,7 +1926,7 @@@ GENERATE_XML           = N
  
  XML_OUTPUT             = xml
  
- # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+ # If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
  # listings (including syntax highlighting and cross-referencing information) to
  # the XML output. Note that enabling this will significantly increase the size
  # of the XML output.
@@@ -1866,7 -1938,7 +1939,7 @@@ XML_PROGRAMLISTING     = YE
  # Configuration options related to the DOCBOOK output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+ # If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
  # that can be used to generate PDF.
  # The default value is: NO.
  
@@@ -1880,7 -1952,7 +1953,7 @@@ GENERATE_DOCBOOK       = N
  
  DOCBOOK_OUTPUT         = docbook
  
- # If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
+ # If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
  # program listings (including syntax highlighting and cross-referencing
  # information) to the DOCBOOK output. Note that enabling this will significantly
  # increase the size of the DOCBOOK output.
@@@ -1893,10 -1965,10 +1966,10 @@@ DOCBOOK_PROGRAMLISTING = N
  # Configuration options for the AutoGen Definitions output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
- # Definitions (see http://autogen.sf.net) file that captures the structure of
- # the code including all documentation. Note that this feature is still
- # experimental and incomplete at the moment.
+ # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+ # AutoGen Definitions (see http://autogen.sf.net) file that captures the
+ # structure of the code including all documentation. Note that this feature is
+ # still experimental and incomplete at the moment.
  # The default value is: NO.
  
  GENERATE_AUTOGEN_DEF   = NO
  # Configuration options related to the Perl module output
  #---------------------------------------------------------------------------
  
- # If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+ # If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
  # file that captures the structure of the code including all documentation.
  #
  # Note that this feature is still experimental and incomplete at the moment.
  
  GENERATE_PERLMOD       = NO
  
- # If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+ # If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
  # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
  # output from the Perl module output.
  # The default value is: NO.
  
  PERLMOD_LATEX          = NO
  
- # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+ # If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
  # formatted so it can be parsed by a human reader. This is useful if you want to
- # understand what is going on. On the other hand, if this tag is set to NO the
+ # understand what is going on. On the other hand, if this tag is set to NO, the
  # size of the Perl module output will be much smaller and Perl will parse it
  # just the same.
  # The default value is: YES.
@@@ -1943,14 -2015,14 +2016,14 @@@ PERLMOD_MAKEVAR_PREFIX 
  # Configuration options related to the preprocessor
  #---------------------------------------------------------------------------
  
- # If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+ # If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
  # C-preprocessor directives found in the sources and include files.
  # The default value is: YES.
  
  ENABLE_PREPROCESSING   = YES
  
- # If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
- # in the source code. If set to NO only conditional compilation will be
+ # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+ # in the source code. If set to NO, only conditional compilation will be
  # performed. Macro expansion can be done in a controlled way by setting
  # EXPAND_ONLY_PREDEF to YES.
  # The default value is: NO.
@@@ -1966,7 -2038,7 +2039,7 @@@ MACRO_EXPANSION        = N
  
  EXPAND_ONLY_PREDEF     = NO
  
- # If the SEARCH_INCLUDES tag is set to YES the includes files in the
+ # If the SEARCH_INCLUDES tag is set to YES, the include files in the
  # INCLUDE_PATH will be searched if a #include is found.
  # The default value is: YES.
  # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
@@@ -2042,20 -2114,21 +2115,21 @@@ TAGFILES               
  
  GENERATE_TAGFILE       =
  
- # If the ALLEXTERNALS tag is set to YES all external class will be listed in the
- # class index. If set to NO only the inherited external classes will be listed.
+ # If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+ # the class index. If set to NO, only the inherited external classes will be
+ # listed.
  # The default value is: NO.
  
  ALLEXTERNALS           = NO
  
- # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
- # the modules index. If set to NO, only the current project's groups will be
+ # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+ # in the modules index. If set to NO, only the current project's groups will be
  # listed.
  # The default value is: YES.
  
  EXTERNAL_GROUPS        = YES
  
- # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+ # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
  # the related pages index. If set to NO, only the current project's pages will
  # be listed.
  # The default value is: YES.
@@@ -2072,7 -2145,7 +2146,7 @@@ PERL_PATH              = /usr/bin/per
  # Configuration options related to the dot tool
  #---------------------------------------------------------------------------
  
- # If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+ # If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
  # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
  # NO turns the diagrams off. Note that this option also works with HAVE_DOT
  # disabled, but it is recommended to install and use dot, since it yields more
@@@ -2097,7 -2170,7 +2171,7 @@@ MSCGEN_PATH            
  
  DIA_PATH               =
  
- # If set to YES, the inheritance and collaboration graphs will hide inheritance
+ # If set to YES the inheritance and collaboration graphs will hide inheritance
  # and usage relations if the target is undocumented or is not a class.
  # The default value is: YES.
  
@@@ -2170,7 -2243,7 +2244,7 @@@ COLLABORATION_GRAPH    = YE
  
  GROUP_GRAPHS           = YES
  
- # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+ # If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
  # collaboration diagrams in a style similar to the OMG's Unified Modeling
  # Language.
  # The default value is: NO.
@@@ -2222,7 -2295,8 +2296,8 @@@ INCLUDED_BY_GRAPH      = YE
  #
  # Note that enabling this option will significantly increase the time of a run.
  # So in most cases it will be better to enable call graphs for selected
- # functions only using the \callgraph command.
+ # functions only using the \callgraph command. Disabling a call graph can be
+ # accomplished by means of the command \hidecallgraph.
  # The default value is: NO.
  # This tag requires that the tag HAVE_DOT is set to YES.
  
@@@ -2233,7 -2307,8 +2308,8 @@@ CALL_GRAPH             = N
  #
  # Note that enabling this option will significantly increase the time of a run.
  # So in most cases it will be better to enable caller graphs for selected
- # functions only using the \callergraph command.
+ # functions only using the \callergraph command. Disabling a caller graph can be
+ # accomplished by means of the command \hidecallergraph.
  # The default value is: NO.
  # This tag requires that the tag HAVE_DOT is set to YES.
  
@@@ -2256,13 -2331,17 +2332,17 @@@ GRAPHICAL_HIERARCHY    = YE
  DIRECTORY_GRAPH        = YES
  
  # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
- # generated by dot.
+ # generated by dot. For an explanation of the image formats see the section
+ # output formats in the documentation of the dot tool (Graphviz (see:
+ # http://www.graphviz.org/)).
  # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
  # to make the SVG files visible in IE 9+ (other browsers do not have this
  # requirement).
  # Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
  # png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
- # gif:cairo:gd, gif:gd, gif:gd:gd and svg.
+ # gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+ # png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+ # png:gdiplus:gdiplus.
  # The default value is: png.
  # This tag requires that the tag HAVE_DOT is set to YES.
  
@@@ -2310,10 -2389,19 +2390,19 @@@ DIAFILE_DIRS           
  # PlantUML is not used or called during a preprocessing step. Doxygen will
  # generate a warning when it encounters a \startuml command in this case and
  # will not generate output for the diagram.
- # This tag requires that the tag HAVE_DOT is set to YES.
  
  PLANTUML_JAR_PATH      =
  
+ # When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+ # configuration file for plantuml.
+ PLANTUML_CFG_FILE      =
+ # When using plantuml, the specified paths are searched for files specified by
+ # the !include statement in a plantuml block.
+ PLANTUML_INCLUDE_PATH  =
  # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
  # that will be shown in the graph. If the number of nodes in a graph becomes
  # larger than this value, doxygen will truncate the graph, which is visualized
@@@ -2350,7 -2438,7 +2439,7 @@@ MAX_DOT_GRAPH_DEPTH    = 
  
  DOT_TRANSPARENT        = NO
  
- # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+ # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
  # files in one run (i.e. multiple -o and -T options on the command line). This
  # makes dot run faster, but since only newer versions of dot (>1.8.10) support
  # this, this feature is disabled by default.
@@@ -2367,7 -2455,7 +2456,7 @@@ DOT_MULTI_TARGETS      = N
  
  GENERATE_LEGEND        = YES
  
- # If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+ # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
  # files that are used to generate the various graphs.
  # The default value is: YES.
  # This tag requires that the tag HAVE_DOT is set to YES.
@@@ -1,5 -1,8 +1,8 @@@
  import distutils.ccompiler
- import sys, os, subprocess, glob
+ import sys
+ import os
+ import subprocess
+ import glob
  
  header = os.path.join('src', 'aubio.h')
  output_path = os.path.join('python', 'gen')
@@@ -8,40 -11,40 +11,41 @@@ source_header = """// this file is gene
  #include "aubio-types.h"
  """
  
- skip_objects = [
-   # already in ext/
-   'fft',
-   'pvoc',
-   'filter',
-   'filterbank',
-   # AUBIO_UNSTABLE
-   'hist',
-   'parameter',
-   'scale',
-   'beattracking',
-   'resampler',
-   'peakpicker',
-   'pitchfcomb',
-   'pitchmcomb',
-   'pitchschmitt',
-   'pitchspecacf',
-   'pitchyin',
-   'pitchyinfft',
-   'pitchyinfast',
-   'sink',
-   'sink_apple_audio',
-   'sink_sndfile',
-   'sink_wavwrite',
-   #'mfcc',
-   'source',
-   'source_apple_audio',
-   'source_sndfile',
-   'source_avcodec',
-   'source_wavread',
-   #'sampler',
-   'audio_unit',
-   'spectral_whitening',
-   ]
+ default_skip_objects = [
+     # already in ext/
+     'fft',
+     'pvoc',
+     'filter',
+     'filterbank',
+     # AUBIO_UNSTABLE
+     'hist',
+     'parameter',
+     'scale',
+     'beattracking',
+     'resampler',
+     'peakpicker',
+     'pitchfcomb',
+     'pitchmcomb',
+     'pitchschmitt',
+     'pitchspecacf',
+     'pitchyin',
+     'pitchyinfft',
++    'pitchyinfast',
+     'sink',
+     'sink_apple_audio',
+     'sink_sndfile',
+     'sink_wavwrite',
+     #'mfcc',
+     'source',
+     'source_apple_audio',
+     'source_sndfile',
+     'source_avcodec',
+     'source_wavread',
+     #'sampler',
+     'audio_unit',
+     'spectral_whitening',
+ ]
  
  def get_preprocessor():
      # findout which compiler to use
              print("Warning: failed initializing compiler ({:s})".format(repr(e)))
  
      cpp_cmd = None
-     if hasattr(compiler, 'preprocessor'): # for unixccompiler
+     if hasattr(compiler, 'preprocessor'):  # for unixccompiler
          cpp_cmd = compiler.preprocessor
-     elif hasattr(compiler, 'compiler'): # for ccompiler
+     elif hasattr(compiler, 'compiler'):  # for ccompiler
          cpp_cmd = compiler.compiler.split()
          cpp_cmd += ['-E']
-     elif hasattr(compiler, 'cc'): # for msvccompiler
+     elif hasattr(compiler, 'cc'):  # for msvccompiler
          cpp_cmd = compiler.cc.split()
          cpp_cmd += ['-E']
  
          print("Warning: could not guess preprocessor, using env's CC")
          cpp_cmd = os.environ.get('CC', 'cc').split()
          cpp_cmd += ['-E']
+     cpp_cmd += ['-x', 'c']  # force C language (emcc defaults to c++)
      return cpp_cmd
  
- def get_cpp_objects(header=header, usedouble=False):
+ def get_c_declarations(header=header, usedouble=False):
+     ''' return a dense and preprocessed  string of all c declarations implied by aubio.h
+     '''
      cpp_cmd = get_preprocessor()
  
      macros = [('AUBIO_UNSTABLE', 1)]
  
      print("Running command: {:s}".format(" ".join(cpp_cmd)))
      proc = subprocess.Popen(cpp_cmd,
-             stderr=subprocess.PIPE,
-             stdout=subprocess.PIPE)
+                             stderr=subprocess.PIPE,
+                             stdout=subprocess.PIPE)
      assert proc, 'Proc was none'
      cpp_output = proc.stdout.read()
      err_output = proc.stderr.read()
      if not cpp_output:
          raise Exception("preprocessor output is empty:\n%s" % err_output)
      elif err_output:
-         print ("Warning: preprocessor produced warnings:\n%s" % err_output)
+         print("Warning: preprocessor produced warnings:\n%s" % err_output)
      if not isinstance(cpp_output, list):
          cpp_output = [l.strip() for l in cpp_output.decode('utf8').split('\n')]
  
  
      i = 1
      while 1:
-         if i >= len(cpp_output): break
-         if cpp_output[i-1].endswith(',') or cpp_output[i-1].endswith('{') or cpp_output[i].startswith('}'):
-             cpp_output[i] = cpp_output[i-1] + ' ' + cpp_output[i]
-             cpp_output.pop(i-1)
+         if i >= len(cpp_output):
+             break
+         if ('{' in cpp_output[i - 1]) and (not '}' in cpp_output[i - 1]) or (not ';' in cpp_output[i - 1]):
+             cpp_output[i] = cpp_output[i - 1] + ' ' + cpp_output[i]
+             cpp_output.pop(i - 1)
+         elif ('}' in cpp_output[i]):
+             cpp_output[i] = cpp_output[i - 1] + ' ' + cpp_output[i]
+             cpp_output.pop(i - 1)
          else:
              i += 1
  
-     typedefs = filter(lambda y: y.startswith ('typedef struct _aubio'), cpp_output)
+     # clean pointer notations
+     tmp = []
+     for l in cpp_output:
+         tmp += [l.replace(' *', ' * ')]
+     cpp_output = tmp
  
+     return cpp_output
+ def get_cpp_objects_from_c_declarations(c_declarations, skip_objects=None):
+     if skip_objects == None:
+         skip_objects = default_skip_objects
+     typedefs = filter(lambda y: y.startswith('typedef struct _aubio'), c_declarations)
      cpp_objects = [a.split()[3][:-1] for a in typedefs]
+     cpp_objects_filtered = filter(lambda y: not y[6:-2] in skip_objects, cpp_objects)
+     return cpp_objects_filtered
+ def get_all_func_names_from_lib(lib, depth=0):
+     ''' return flat string of all function used in lib
+     '''
+     res = []
+     indent = " " * depth
+     for k, v in lib.items():
+         if isinstance(v, dict):
+             res += get_all_func_names_from_lib(v, depth + 1)
+         elif isinstance(v, list):
+             for elem in v:
+                 e = elem.split('(')
+                 if len(e) < 2:
+                     continue  # not a function
+                 fname_part = e[0].strip().split(' ')
+                 fname = fname_part[-1]
+                 if fname:
+                     res += [fname]
+                 else:
+                     raise NameError('gen_lib : weird function: ' + str(e))
  
-     return cpp_output, cpp_objects
+     return res
  
  
- def analyze_cpp_output(cpp_objects, cpp_output):
+ def generate_lib_from_c_declarations(cpp_objects, c_declarations):
+     ''' returns a lib from given cpp_object names
+     a lib is a dict grouping functions by family (onset,pitch...)
+         each eement is itself a dict of functions grouped by puposes as : 
+         struct, new, del, do, get, set and other
+     '''
      lib = {}
  
      for o in cpp_objects:
-         if o[:6] != 'aubio_':
-             continue
-         shortname = o[6:-2]
-         if shortname in skip_objects:
-             continue
+         shortname = o
+         if o[:6] == 'aubio_':
+             shortname = o[6:-2]  # without aubio_ prefix and _t suffix
          lib[shortname] = {'struct': [], 'new': [], 'del': [], 'do': [], 'get': [], 'set': [], 'other': []}
          lib[shortname]['longname'] = o
          lib[shortname]['shortname'] = shortname
-         for fn in cpp_output:
-             if o[:-1] in fn:
-                 #print "found", o[:-1], "in", fn
+         fullshortname = o[:-2]  # name without _t suffix
+         for fn in c_declarations:
+             func_name = fn.split('(')[0].strip().split(' ')[-1]
+             if func_name.startswith(fullshortname + '_') or func_name.endswith(fullshortname):
+                 # print "found", shortname, "in", fn
                  if 'typedef struct ' in fn:
                      lib[shortname]['struct'].append(fn)
                  elif '_do' in fn:
                  elif '_set_' in fn:
                      lib[shortname]['set'].append(fn)
                  else:
-                     #print "no idea what to do about", fn
+                     # print "no idea what to do about", fn
                      lib[shortname]['other'].append(fn)
      return lib
  
- def print_cpp_output_results(lib, cpp_output):
-     for fn in cpp_output:
+ def print_c_declarations_results(lib, c_declarations):
+     for fn in c_declarations:
          found = 0
          for o in lib:
              for family in lib[o]:
                  if fn in lib[o][family]:
                      found = 1
          if found == 0:
-             print ("missing", fn)
+             print("missing", fn)
  
      for o in lib:
          for family in lib[o]:
              if type(lib[o][family]) == str:
-                 print ( "{:15s} {:10s} {:s}".format(o, family, lib[o][family] ) )
+                 print("{:15s} {:10s} {:s}".format(o, family, lib[o][family]))
              elif len(lib[o][family]) == 1:
-                 print ( "{:15s} {:10s} {:s}".format(o, family, lib[o][family][0] ) )
+                 print("{:15s} {:10s} {:s}".format(o, family, lib[o][family][0]))
              else:
-                 print ( "{:15s} {:10s} {:s}".format(o, family, lib[o][family] ) )
+                 print("{:15s} {:10s} {:s}".format(o, family, lib[o][family]))
  
  
  def generate_external(header=header, output_path=output_path, usedouble=False, overwrite=True):
-     if not os.path.isdir(output_path): os.mkdir(output_path)
-     elif not overwrite: return sorted(glob.glob(os.path.join(output_path, '*.c')))
+     if not os.path.isdir(output_path):
+         os.mkdir(output_path)
+     elif not overwrite:
+         return sorted(glob.glob(os.path.join(output_path, '*.c')))
  
-     cpp_output, cpp_objects = get_cpp_objects(header, usedouble=usedouble)
+     c_declarations = get_c_declarations(header, usedouble=usedouble)
+     cpp_objects = get_cpp_objects_from_c_declarations(c_declarations)
  
-     lib = analyze_cpp_output(cpp_objects, cpp_output)
-     # print_cpp_output_results(lib, cpp_output)
+     lib = generate_lib_from_c_declarations(cpp_objects, c_declarations)
+     # print_c_declarations_results(lib, c_declarations)
  
      sources_list = []
      try:
          from gen_code import MappedObject
      for o in lib:
          out = source_header
-         mapped = MappedObject(lib[o], usedouble = usedouble)
+         mapped = MappedObject(lib[o], usedouble=usedouble)
          out += mapped.gen_code()
          output_file = os.path.join(output_path, 'gen-%s.c' % o)
          with open(output_file, 'w') as f:
              f.write(out)
-             print ("wrote %s" % output_file )
+             print("wrote %s" % output_file)
              sources_list.append(output_file)
  
      out = source_header
@@@ -208,23 -265,23 +266,23 @@@ int generated_types_ready (void
  {{
    return ({pycheck_types});
  }}
- """.format(pycheck_types = check_types)
+ """.format(pycheck_types=check_types)
  
      add_types = "".join(["""
    Py_INCREF (&Py_{name}Type);
-   PyModule_AddObject(m, "{name}", (PyObject *) & Py_{name}Type);""".format(name = o) for o in lib])
+   PyModule_AddObject(m, "{name}", (PyObject *) & Py_{name}Type);""".format(name=o) for o in lib])
      out += """
  
  void add_generated_objects ( PyObject *m )
  {{
  {add_types}
  }}
- """.format(add_types = add_types)
+ """.format(add_types=add_types)
  
      output_file = os.path.join(output_path, 'aubio-generated.c')
      with open(output_file, 'w') as f:
          f.write(out)
-         print ("wrote %s" % output_file )
+         print("wrote %s" % output_file)
          sources_list.append(output_file)
  
      objlist = "".join(["extern PyTypeObject Py_%sType;\n" % p for p in lib])
  {objlist}
  int generated_objects ( void );
  void add_generated_objects( PyObject *m );
- """.format(objlist = objlist)
+ """.format(objlist=objlist)
  
      output_file = os.path.join(output_path, 'aubio-generated.h')
      with open(output_file, 'w') as f:
          f.write(out)
-         print ("wrote %s" % output_file )
+         print("wrote %s" % output_file)
          # no need to add header to list of sources
  
      return sorted(sources_list)
  
  if __name__ == '__main__':
-     if len(sys.argv) > 1: header = sys.argv[1]
-     if len(sys.argv) > 2: output_path = sys.argv[2]
+     if len(sys.argv) > 1:
+         header = sys.argv[1]
+     if len(sys.argv) > 2:
+         output_path = sys.argv[2]
      generate_external(header, output_path)