 165b814f5d
			
		
	
	
		165b814f5d
		
	
	
	
	
		
			
			this is necessary in order to get Furnace to build using CMake 4.0. you should do: git submodule deinit extern/portaudio
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import os.path
 | |
| import string
 | |
| 
 | |
| paRootDirectory = '../../'
 | |
| paHtmlDocDirectory = os.path.join( paRootDirectory, "doc", "html" )
 | |
| 
 | |
| ## Script to check documentation status
 | |
| ## this script assumes that html doxygen documentation has been generated
 | |
| ##
 | |
| ## it then walks the entire portaudio source tree and check that
 | |
| ## - every source file (.c,.h,.cpp) has a doxygen comment block containing
 | |
| ##	- a @file directive
 | |
| ##	- a @brief directive
 | |
| ##	- a @ingroup directive
 | |
| ## - it also checks that a corresponding html documentation file has been generated.
 | |
| ##
 | |
| ## This can be used as a first-level check to make sure the documentation is in order.
 | |
| ##
 | |
| ## The idea is to get a list of which files are missing doxygen documentation.
 | |
| ##
 | |
| ## How to run:
 | |
| ##  $ cd doc/utils
 | |
| ##  $ python checkfiledocs.py
 | |
| 
 | |
| def oneOf_a_in_b(a, b):
 | |
|     for x in a:
 | |
|         if x in b:
 | |
|             return True
 | |
|     return False
 | |
| 
 | |
| # recurse from top and return a list of all with the given
 | |
| # extensions. ignore .svn directories. return absolute paths
 | |
| def recursiveFindFiles( top, extensions, dirBlacklist, includePaths ):
 | |
|     result = []
 | |
|     for (dirpath, dirnames, filenames) in os.walk(top):
 | |
|         if not oneOf_a_in_b(dirBlacklist, dirpath):
 | |
|             for f in filenames:
 | |
|                 if os.path.splitext(f)[1] in extensions:
 | |
|                     if includePaths:
 | |
|                         result.append( os.path.abspath( os.path.join( dirpath, f ) ) )
 | |
|                     else:
 | |
|                         result.append( f )
 | |
|     return result
 | |
| 
 | |
| # generate the html file name that doxygen would use for
 | |
| # a particular source file. this is a brittle conversion
 | |
| # which i worked out by trial and error
 | |
| def doxygenHtmlDocFileName( sourceFile ):
 | |
|     return sourceFile.replace( '_', '__' ).replace( '.', '_8' ) + '.html'
 | |
| 
 | |
| 
 | |
| sourceFiles = recursiveFindFiles( os.path.join(paRootDirectory,'src'), [ '.c', '.h', '.cpp' ], ['.svn', 'mingw-include'], True );
 | |
| sourceFiles += recursiveFindFiles( os.path.join(paRootDirectory,'include'), [ '.c', '.h', '.cpp' ], ['.svn'], True );
 | |
| docFiles = recursiveFindFiles( paHtmlDocDirectory, [ '.html' ], ['.svn'], False );
 | |
| 
 | |
| 
 | |
| 
 | |
| currentFile = ""
 | |
| 
 | |
| def printError( f, message ):
 | |
|     global currentFile
 | |
|     if f != currentFile:
 | |
|         currentFile = f
 | |
|         print f, ":"
 | |
|     print "\t!", message
 | |
| 
 | |
| 
 | |
| for f in sourceFiles:
 | |
|     if not doxygenHtmlDocFileName( os.path.basename(f) ) in docFiles:
 | |
|         printError( f, "no doxygen generated doc page" )
 | |
| 
 | |
|     s = file( f, 'rt' ).read()
 | |
| 
 | |
|     if not '/**' in s:
 | |
|         printError( f, "no doxygen /** block" )  
 | |
|     
 | |
|     if not '@file' in s:
 | |
|         printError( f, "no doxygen @file tag" )
 | |
| 
 | |
|     if not '@brief' in s:
 | |
|         printError( f, "no doxygen @brief tag" )
 | |
|         
 | |
|     if not '@ingroup' in s:
 | |
|         printError( f, "no doxygen @ingroup tag" )
 | |
|         
 | |
| 
 |