#!/usr/bin/env python """ Ozone: doxygen based information gathering tool ------------ Ozone Version 0.2 - Romain Gaucher - http://rgaucher.info (Python 2.6 port, replaced popen2 by subprocess... still dirty code) """ import os,sys,re from subprocess import * # 0 - proj name # 1 - output dir # 2 - strip from (local path) # 3 - OPT for C : YES / NO # 4 - OPT for Java: YES / NO # 5 - Input directory doxyfile = """ #--------------------------------------------------------------------------- # Generated by Ozone by Romain Gaucher - http://rgaucher.info #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = %s OUTPUT_DIRECTORY = %s CREATE_SUBDIRS = YES OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" "The $name widget" "The $name file" is provides specifies contains represents a an the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = "%s" STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = YES INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 4 OPTIMIZE_OUTPUT_FOR_C = %s OPTIMIZE_OUTPUT_JAVA = %s OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES TYPEDEF_HIDES_STRUCT = YES EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = YES CASE_SENSE_NAMES = NO HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = NO GENERATE_TESTLIST = NO GENERATE_BUGLIST = NO GENERATE_DEPRECATEDLIST= NO MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = YES QUIET = YES INPUT = %s INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.jsp *.ii *.ixx *.ipp *.i++ *.inl \ *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.py RECURSIVE = YES EXCLUDE_SYMLINKS = YES EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = YES STRIP_CODE_COMMENTS = NO REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project HTML_DYNAMIC_SECTIONS = NO GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = YES TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- GENERATE_XML = YES XML_OUTPUT = xml XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO GENERATE_AUTOGEN_DEF = NO GENERATE_MAN = NO GENERATE_RTF = NO GENERATE_LATEX = NO #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = YES TEMPLATE_RELATIONS = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = YES CALLER_GRAPH = YES GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = YES DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- SEARCHENGINE = NO """ language = "c" src_dir = os.curdir def strip_characters(str_buffer): return str_buffer.replace('\n','') def launch_process(cmd_str): """ Launch a processus and return the stdout/stderr output """ #r,w,e = popen2.popen3(cmd_str) p = call(cmd_str, shell=True) (r,w,e) = (p.stdin, p.stdout, p.stderr) b1 = e.readlines() b2 = r.readlines() r.close() e.close() w.close() def help(): print " ozone - doxygen wrapper" print "" print " ./ozone.py --language [java|c|cpp] --input /input/src/dir --doc /output/doc/dir" def language_name(l_name): l_name = l_name.lower() if l_name not in ('c','cpp','java'): return None return l_name def extract_name(src_directory): return re.sub('[^a-zA-Z0-9_\.]+','.',src_directory) if __name__ == "__main__": nargs = len(sys.argv) curdir = os.curdir if nargs == 7: for i in range(nargs): s = sys.argv[i].lower() if s == "--language": language = language_name(sys.argv[i+1]) elif s == "--input": src_dir = sys.argv[i+1] elif s == "--doc": doc_dir = sys.argv[i+1] if not os.path.isdir(doc_dir): os.mkdir(doc_dir) # You can also test with a single file if not os.path.isdir(src_dir): print " The 'input' parameters must be directories" sys.exit(0) else: d_java = "NO" d_c = "NO" if language == "java": d_java = "YES" else: d_c = "YES" p_name = extract_name(src_dir.replace(os.curdir,'')) d_handler = open("Doxyfile." + p_name, "w") d_handler.write(doxyfile % (p_name,os.path.abspath(doc_dir),os.path.abspath(src_dir),d_c,d_java,os.path.abspath(src_dir))) d_handler.close() print "Doxygen is running..." launch_process("doxygen Doxyfile." + p_name) print "Doxygen finished" else: help()