ia64/xen-unstable

changeset 6794:4d899a738d59

merge?
author cl349@firebug.cl.cam.ac.uk
date Tue Sep 13 15:05:49 2005 +0000 (2005-09-13)
parents adb70d525dbd f2450805063b
children e7c7196fa329 8ca0f98ba8e2
files .hgignore Makefile buildconfigs/mk.linux-2.6-xen buildconfigs/mk.linux-2.6-xen0 buildconfigs/mk.linux-2.6-xenU docs/Doxyfile docs/Doxyfilter docs/Makefile docs/pythfilter.py extras/mini-os/include/hypervisor.h linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c linux-2.6-xen-sparse/arch/xen/kernel/gnttab.c linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c linux-2.6-xen-sparse/drivers/xen/console/console.c linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c linux-2.6-xen-sparse/drivers/xen/netback/loopback.c linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c linux-2.6-xen-sparse/drivers/xen/usbfront/usbfront.c linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_dev.c linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c linux-2.6-xen-sparse/include/asm-xen/asm-i386/hypercall.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/system.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/system.h linux-2.6-xen-sparse/include/asm-xen/evtchn.h linux-2.6-xen-sparse/mkbuildtree tools/console/daemon/io.c tools/console/daemon/main.c tools/console/daemon/utils.c tools/examples/Makefile tools/examples/block-enbd tools/examples/block-file tools/examples/xen-backend.agent tools/ioemu/hw/pcnet.c tools/ioemu/target-i386-dm/Makefile tools/libxc/xc_linux_restore.c tools/libxc/xc_private.c tools/libxc/xc_vmx_build.c tools/python/Makefile tools/python/pylintrc tools/python/xen/sv/DomInfo.py tools/python/xen/xend/XendDomainInfo.py tools/python/xen/xend/XendVnet.py tools/python/xen/xend/scheduler.py tools/python/xen/xend/server/controller.py tools/python/xen/xm/create.py tools/xenstore/Makefile tools/xenstore/fake_libxc.c tools/xenstore/testsuite/07watch.test tools/xenstore/testsuite/14complexperms.test tools/xenstore/xenstore_client.c tools/xenstore/xenstored_core.c tools/xenstore/xenstored_domain.c tools/xenstore/xenstored_domain.h tools/xenstore/xenstored_watch.c tools/xenstore/xs.c tools/xenstore/xs_lib.c tools/xenstore/xs_test.c xen/Makefile xen/arch/x86/domain.c xen/arch/x86/shadow.c xen/arch/x86/shadow32.c xen/arch/x86/shadow_public.c xen/arch/x86/traps.c xen/arch/x86/vmx.c xen/arch/x86/vmx_intercept.c xen/arch/x86/vmx_io.c xen/arch/x86/vmx_platform.c xen/arch/x86/vmx_vmcs.c xen/arch/x86/x86_32/entry.S xen/arch/x86/x86_64/entry.S xen/arch/x86/x86_64/traps.c xen/common/memory.c xen/include/asm-x86/shadow_64.h xen/include/asm-x86/shadow_ops.h xen/include/asm-x86/vmx.h xen/include/asm-x86/vmx_platform.h xen/include/asm-x86/vmx_virpit.h
line diff
     1.1 --- a/.hgignore	Tue Sep 13 10:49:04 2005 +0000
     1.2 +++ b/.hgignore	Tue Sep 13 15:05:49 2005 +0000
     1.3 @@ -19,6 +19,7 @@
     1.4  ^docs/.*\.toc$
     1.5  ^docs/figs/xenserver\.eps$
     1.6  ^docs/html/.*$
     1.7 +^docs/api/.*$
     1.8  ^docs/interface/WARNINGS$
     1.9  ^docs/interface/images\.pl$
    1.10  ^docs/interface/images\.tex$
     2.1 --- a/Makefile	Tue Sep 13 10:49:04 2005 +0000
     2.2 +++ b/Makefile	Tue Sep 13 15:05:49 2005 +0000
     2.3 @@ -35,8 +35,8 @@ ifeq ($(XEN_TARGET_X86_PAE),y)
     2.4  export pae=y
     2.5  endif
     2.6  
     2.7 -.PHONY:	all dist install xen kernels tools docs world clean mkpatches mrproper
     2.8 -.PHONY:	kbuild kdelete kclean
     2.9 +.PHONY:	all dist install xen kernels tools dev-docs docs world clean
    2.10 +.PHONY:	mkpatches mrproper kbuild kdelete kclean
    2.11  
    2.12  # build and install everything into the standard system directories
    2.13  install: install-xen install-kernels install-tools install-docs
    2.14 @@ -66,6 +66,9 @@ kernels:
    2.15  docs:
    2.16  	sh ./docs/check_pkgs && $(MAKE) -C docs install || true
    2.17  
    2.18 +dev-docs:
    2.19 +	$(MAKE) -C docs dev-docs
    2.20 +
    2.21  # Build all the various kernels and modules
    2.22  kbuild: kernels
    2.23  
    2.24 @@ -123,7 +126,7 @@ help:
    2.25  	@echo '  install-xen      - build and install the Xen hypervisor'
    2.26  	@echo '  install-tools    - build and install the control tools'
    2.27  	@echo '  install-kernels  - build and install guest kernels'
    2.28 -	@echo '  install-docs     - build and install documentation'
    2.29 +	@echo '  install-docs     - build and install user documentation'
    2.30  	@echo ''
    2.31  	@echo 'Building targets:'
    2.32  	@echo '  dist             - build and install everything into local dist directory'
    2.33 @@ -133,7 +136,8 @@ help:
    2.34  	@echo '  tools            - build and install tools'
    2.35  	@echo '  kernels          - build and install guest kernels'
    2.36  	@echo '  kbuild           - synonym for make kernels'
    2.37 -	@echo '  docs             - build and install docs'
    2.38 +	@echo '  docs             - build and install user documentation'
    2.39 +	@echo '  dev-docs         - build developer-only documentation'
    2.40  	@echo ''
    2.41  	@echo 'Cleaning targets:'
    2.42  	@echo '  clean            - clean the Xen, tools and docs (but not'
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/docs/Doxyfile	Tue Sep 13 15:05:49 2005 +0000
     3.3 @@ -0,0 +1,1218 @@
     3.4 +# Doxyfile 1.4.2
     3.5 +
     3.6 +# This file describes the settings to be used by the documentation system
     3.7 +# doxygen (www.doxygen.org) for a project
     3.8 +#
     3.9 +# All text after a hash (#) is considered a comment and will be ignored
    3.10 +# The format is:
    3.11 +#       TAG = value [value, ...]
    3.12 +# For lists items can also be appended using:
    3.13 +#       TAG += value [value, ...]
    3.14 +# Values that contain spaces should be placed between quotes (" ")
    3.15 +
    3.16 +#---------------------------------------------------------------------------
    3.17 +# Project related configuration options
    3.18 +#---------------------------------------------------------------------------
    3.19 +
    3.20 +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
    3.21 +# by quotes) that should identify the project.
    3.22 +
    3.23 +PROJECT_NAME           = Xen Python Tools
    3.24 +
    3.25 +# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
    3.26 +# This could be handy for archiving the generated documentation or 
    3.27 +# if some version control system is used.
    3.28 +
    3.29 +PROJECT_NUMBER         = 
    3.30 +
    3.31 +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
    3.32 +# base path where the generated documentation will be put. 
    3.33 +# If a relative path is entered, it will be relative to the location 
    3.34 +# where doxygen was started. If left blank the current directory will be used.
    3.35 +
    3.36 +OUTPUT_DIRECTORY       = api/tools/python
    3.37 +
    3.38 +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
    3.39 +# 4096 sub-directories (in 2 levels) under the output directory of each output 
    3.40 +# format and will distribute the generated files over these directories. 
    3.41 +# Enabling this option can be useful when feeding doxygen a huge amount of 
    3.42 +# source files, where putting all generated files in the same directory would 
    3.43 +# otherwise cause performance problems for the file system.
    3.44 +
    3.45 +CREATE_SUBDIRS         = NO
    3.46 +
    3.47 +# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
    3.48 +# documentation generated by doxygen is written. Doxygen will use this 
    3.49 +# information to generate all constant output in the proper language. 
    3.50 +# The default language is English, other supported languages are: 
    3.51 +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
    3.52 +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
    3.53 +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
    3.54 +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
    3.55 +# Swedish, and Ukrainian.
    3.56 +
    3.57 +OUTPUT_LANGUAGE        = English
    3.58 +
    3.59 +# This tag can be used to specify the encoding used in the generated output. 
    3.60 +# The encoding is not always determined by the language that is chosen, 
    3.61 +# but also whether or not the output is meant for Windows or non-Windows users. 
    3.62 +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
    3.63 +# forces the Windows encoding (this is the default for the Windows binary), 
    3.64 +# whereas setting the tag to NO uses a Unix-style encoding (the default for 
    3.65 +# all platforms other than Windows).
    3.66 +
    3.67 +USE_WINDOWS_ENCODING   = NO
    3.68 +
    3.69 +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
    3.70 +# include brief member descriptions after the members that are listed in 
    3.71 +# the file and class documentation (similar to JavaDoc). 
    3.72 +# Set to NO to disable this.
    3.73 +
    3.74 +BRIEF_MEMBER_DESC      = YES
    3.75 +
    3.76 +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
    3.77 +# the brief description of a member or function before the detailed description. 
    3.78 +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
    3.79 +# brief descriptions will be completely suppressed.
    3.80 +
    3.81 +REPEAT_BRIEF           = YES
    3.82 +
    3.83 +# This tag implements a quasi-intelligent brief description abbreviator 
    3.84 +# that is used to form the text in various listings. Each string 
    3.85 +# in this list, if found as the leading text of the brief description, will be 
    3.86 +# stripped from the text and the result after processing the whole list, is 
    3.87 +# used as the annotated text. Otherwise, the brief description is used as-is. 
    3.88 +# If left blank, the following values are used ("$name" is automatically 
    3.89 +# replaced with the name of the entity): "The $name class" "The $name widget" 
    3.90 +# "The $name file" "is" "provides" "specifies" "contains" 
    3.91 +# "represents" "a" "an" "the"
    3.92 +
    3.93 +ABBREVIATE_BRIEF       = 
    3.94 +
    3.95 +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
    3.96 +# Doxygen will generate a detailed section even if there is only a brief 
    3.97 +# description.
    3.98 +
    3.99 +ALWAYS_DETAILED_SEC    = NO
   3.100 +
   3.101 +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
   3.102 +# inherited members of a class in the documentation of that class as if those 
   3.103 +# members were ordinary class members. Constructors, destructors and assignment 
   3.104 +# operators of the base classes will not be shown.
   3.105 +
   3.106 +INLINE_INHERITED_MEMB  = NO
   3.107 +
   3.108 +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
   3.109 +# path before files name in the file list and in the header files. If set 
   3.110 +# to NO the shortest path that makes the file name unique will be used.
   3.111 +
   3.112 +FULL_PATH_NAMES        = YES
   3.113 +
   3.114 +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
   3.115 +# can be used to strip a user-defined part of the path. Stripping is 
   3.116 +# only done if one of the specified strings matches the left-hand part of 
   3.117 +# the path. The tag can be used to show relative paths in the file list. 
   3.118 +# If left blank the directory from which doxygen is run is used as the 
   3.119 +# path to strip.
   3.120 +
   3.121 +STRIP_FROM_PATH        = 
   3.122 +
   3.123 +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
   3.124 +# the path mentioned in the documentation of a class, which tells 
   3.125 +# the reader which header file to include in order to use a class. 
   3.126 +# If left blank only the name of the header file containing the class 
   3.127 +# definition is used. Otherwise one should specify the include paths that 
   3.128 +# are normally passed to the compiler using the -I flag.
   3.129 +
   3.130 +STRIP_FROM_INC_PATH    = 
   3.131 +
   3.132 +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
   3.133 +# (but less readable) file names. This can be useful is your file systems 
   3.134 +# doesn't support long names like on DOS, Mac, or CD-ROM.
   3.135 +
   3.136 +SHORT_NAMES            = NO
   3.137 +
   3.138 +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
   3.139 +# will interpret the first line (until the first dot) of a JavaDoc-style 
   3.140 +# comment as the brief description. If set to NO, the JavaDoc 
   3.141 +# comments will behave just like the Qt-style comments (thus requiring an 
   3.142 +# explicit @brief command for a brief description.
   3.143 +
   3.144 +JAVADOC_AUTOBRIEF      = YES
   3.145 +
   3.146 +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
   3.147 +# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
   3.148 +# comments) as a brief description. This used to be the default behaviour. 
   3.149 +# The new default is to treat a multi-line C++ comment block as a detailed 
   3.150 +# description. Set this tag to YES if you prefer the old behaviour instead.
   3.151 +
   3.152 +MULTILINE_CPP_IS_BRIEF = NO
   3.153 +
   3.154 +# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
   3.155 +# will output the detailed description near the top, like JavaDoc.
   3.156 +# If set to NO, the detailed description appears after the member 
   3.157 +# documentation.
   3.158 +
   3.159 +DETAILS_AT_TOP         = YES
   3.160 +
   3.161 +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
   3.162 +# member inherits the documentation from any documented member that it 
   3.163 +# re-implements.
   3.164 +
   3.165 +INHERIT_DOCS           = YES
   3.166 +
   3.167 +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
   3.168 +# tag is set to YES, then doxygen will reuse the documentation of the first 
   3.169 +# member in the group (if any) for the other members of the group. By default 
   3.170 +# all members of a group must be documented explicitly.
   3.171 +
   3.172 +DISTRIBUTE_GROUP_DOC   = NO
   3.173 +
   3.174 +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
   3.175 +# a new page for each member. If set to NO, the documentation of a member will 
   3.176 +# be part of the file/class/namespace that contains it.
   3.177 +
   3.178 +SEPARATE_MEMBER_PAGES  = NO
   3.179 +
   3.180 +# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
   3.181 +# Doxygen uses this value to replace tabs by spaces in code fragments.
   3.182 +
   3.183 +TAB_SIZE               = 8
   3.184 +
   3.185 +# This tag can be used to specify a number of aliases that acts 
   3.186 +# as commands in the documentation. An alias has the form "name=value". 
   3.187 +# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
   3.188 +# put the command \sideeffect (or @sideeffect) in the documentation, which 
   3.189 +# will result in a user-defined paragraph with heading "Side Effects:". 
   3.190 +# You can put \n's in the value part of an alias to insert newlines.
   3.191 +
   3.192 +ALIASES                = 
   3.193 +
   3.194 +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
   3.195 +# sources only. Doxygen will then generate output that is more tailored for C. 
   3.196 +# For instance, some of the names that are used will be different. The list 
   3.197 +# of all members will be omitted, etc.
   3.198 +
   3.199 +OPTIMIZE_OUTPUT_FOR_C  = NO
   3.200 +
   3.201 +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
   3.202 +# only. Doxygen will then generate output that is more tailored for Java. 
   3.203 +# For instance, namespaces will be presented as packages, qualified scopes 
   3.204 +# will look different, etc.
   3.205 +
   3.206 +OPTIMIZE_OUTPUT_JAVA   = YES
   3.207 +
   3.208 +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
   3.209 +# the same type (for instance a group of public functions) to be put as a 
   3.210 +# subgroup of that type (e.g. under the Public Functions section). Set it to 
   3.211 +# NO to prevent subgrouping. Alternatively, this can be done per class using 
   3.212 +# the \nosubgrouping command.
   3.213 +
   3.214 +SUBGROUPING            = YES
   3.215 +
   3.216 +#---------------------------------------------------------------------------
   3.217 +# Build related configuration options
   3.218 +#---------------------------------------------------------------------------
   3.219 +
   3.220 +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
   3.221 +# documentation are documented, even if no documentation was available. 
   3.222 +# Private class members and static file members will be hidden unless 
   3.223 +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
   3.224 +
   3.225 +EXTRACT_ALL            = YES
   3.226 +
   3.227 +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
   3.228 +# will be included in the documentation.
   3.229 +
   3.230 +EXTRACT_PRIVATE        = YES
   3.231 +
   3.232 +# If the EXTRACT_STATIC tag is set to YES all static members of a file 
   3.233 +# will be included in the documentation.
   3.234 +
   3.235 +EXTRACT_STATIC         = YES
   3.236 +
   3.237 +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
   3.238 +# defined locally in source files will be included in the documentation. 
   3.239 +# If set to NO only classes defined in header files are included.
   3.240 +
   3.241 +EXTRACT_LOCAL_CLASSES  = YES
   3.242 +
   3.243 +# This flag is only useful for Objective-C code. When set to YES local 
   3.244 +# methods, which are defined in the implementation section but not in 
   3.245 +# the interface are included in the documentation. 
   3.246 +# If set to NO (the default) only methods in the interface are included.
   3.247 +
   3.248 +EXTRACT_LOCAL_METHODS  = NO
   3.249 +
   3.250 +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
   3.251 +# undocumented members of documented classes, files or namespaces. 
   3.252 +# If set to NO (the default) these members will be included in the 
   3.253 +# various overviews, but no documentation section is generated. 
   3.254 +# This option has no effect if EXTRACT_ALL is enabled.
   3.255 +
   3.256 +HIDE_UNDOC_MEMBERS     = NO
   3.257 +
   3.258 +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
   3.259 +# undocumented classes that are normally visible in the class hierarchy. 
   3.260 +# If set to NO (the default) these classes will be included in the various 
   3.261 +# overviews. This option has no effect if EXTRACT_ALL is enabled.
   3.262 +
   3.263 +HIDE_UNDOC_CLASSES     = NO
   3.264 +
   3.265 +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
   3.266 +# friend (class|struct|union) declarations. 
   3.267 +# If set to NO (the default) these declarations will be included in the 
   3.268 +# documentation.
   3.269 +
   3.270 +HIDE_FRIEND_COMPOUNDS  = NO
   3.271 +
   3.272 +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
   3.273 +# documentation blocks found inside the body of a function. 
   3.274 +# If set to NO (the default) these blocks will be appended to the 
   3.275 +# function's detailed documentation block.
   3.276 +
   3.277 +HIDE_IN_BODY_DOCS      = NO
   3.278 +
   3.279 +# The INTERNAL_DOCS tag determines if documentation 
   3.280 +# that is typed after a \internal command is included. If the tag is set 
   3.281 +# to NO (the default) then the documentation will be excluded. 
   3.282 +# Set it to YES to include the internal documentation.
   3.283 +
   3.284 +INTERNAL_DOCS          = NO
   3.285 +
   3.286 +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
   3.287 +# file names in lower-case letters. If set to YES upper-case letters are also 
   3.288 +# allowed. This is useful if you have classes or files whose names only differ 
   3.289 +# in case and if your file system supports case sensitive file names. Windows 
   3.290 +# and Mac users are advised to set this option to NO.
   3.291 +
   3.292 +CASE_SENSE_NAMES       = YES
   3.293 +
   3.294 +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
   3.295 +# will show members with their full class and namespace scopes in the 
   3.296 +# documentation. If set to YES the scope will be hidden.
   3.297 +
   3.298 +HIDE_SCOPE_NAMES       = NO
   3.299 +
   3.300 +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
   3.301 +# will put a list of the files that are included by a file in the documentation 
   3.302 +# of that file.
   3.303 +
   3.304 +SHOW_INCLUDE_FILES     = YES
   3.305 +
   3.306 +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
   3.307 +# is inserted in the documentation for inline members.
   3.308 +
   3.309 +INLINE_INFO            = YES
   3.310 +
   3.311 +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
   3.312 +# will sort the (detailed) documentation of file and class members 
   3.313 +# alphabetically by member name. If set to NO the members will appear in 
   3.314 +# declaration order.
   3.315 +
   3.316 +SORT_MEMBER_DOCS       = YES
   3.317 +
   3.318 +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
   3.319 +# brief documentation of file, namespace and class members alphabetically 
   3.320 +# by member name. If set to NO (the default) the members will appear in 
   3.321 +# declaration order.
   3.322 +
   3.323 +SORT_BRIEF_DOCS        = NO
   3.324 +
   3.325 +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
   3.326 +# sorted by fully-qualified names, including namespaces. If set to 
   3.327 +# NO (the default), the class list will be sorted only by class name, 
   3.328 +# not including the namespace part. 
   3.329 +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
   3.330 +# Note: This option applies only to the class list, not to the 
   3.331 +# alphabetical list.
   3.332 +
   3.333 +SORT_BY_SCOPE_NAME     = NO
   3.334 +
   3.335 +# The GENERATE_TODOLIST tag can be used to enable (YES) or 
   3.336 +# disable (NO) the todo list. This list is created by putting \todo 
   3.337 +# commands in the documentation.
   3.338 +
   3.339 +GENERATE_TODOLIST      = YES
   3.340 +
   3.341 +# The GENERATE_TESTLIST tag can be used to enable (YES) or 
   3.342 +# disable (NO) the test list. This list is created by putting \test 
   3.343 +# commands in the documentation.
   3.344 +
   3.345 +GENERATE_TESTLIST      = YES
   3.346 +
   3.347 +# The GENERATE_BUGLIST tag can be used to enable (YES) or 
   3.348 +# disable (NO) the bug list. This list is created by putting \bug 
   3.349 +# commands in the documentation.
   3.350 +
   3.351 +GENERATE_BUGLIST       = YES
   3.352 +
   3.353 +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
   3.354 +# disable (NO) the deprecated list. This list is created by putting 
   3.355 +# \deprecated commands in the documentation.
   3.356 +
   3.357 +GENERATE_DEPRECATEDLIST= YES
   3.358 +
   3.359 +# The ENABLED_SECTIONS tag can be used to enable conditional 
   3.360 +# documentation sections, marked by \if sectionname ... \endif.
   3.361 +
   3.362 +ENABLED_SECTIONS       = 
   3.363 +
   3.364 +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
   3.365 +# the initial value of a variable or define consists of for it to appear in 
   3.366 +# the documentation. If the initializer consists of more lines than specified 
   3.367 +# here it will be hidden. Use a value of 0 to hide initializers completely. 
   3.368 +# The appearance of the initializer of individual variables and defines in the 
   3.369 +# documentation can be controlled using \showinitializer or \hideinitializer 
   3.370 +# command in the documentation regardless of this setting.
   3.371 +
   3.372 +MAX_INITIALIZER_LINES  = 30
   3.373 +
   3.374 +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
   3.375 +# at the bottom of the documentation of classes and structs. If set to YES the 
   3.376 +# list will mention the files that were used to generate the documentation.
   3.377 +
   3.378 +SHOW_USED_FILES        = YES
   3.379 +
   3.380 +# If the sources in your project are distributed over multiple directories 
   3.381 +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
   3.382 +# in the documentation.
   3.383 +
   3.384 +SHOW_DIRECTORIES       = YES
   3.385 +
   3.386 +# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
   3.387 +# doxygen should invoke to get the current version for each file (typically from the 
   3.388 +# version control system). Doxygen will invoke the program by executing (via 
   3.389 +# popen()) the command <command> <input-file>, where <command> is the value of 
   3.390 +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
   3.391 +# provided by doxygen. Whatever the progam writes to standard output 
   3.392 +# is used as the file version. See the manual for examples.
   3.393 +
   3.394 +FILE_VERSION_FILTER    = 
   3.395 +
   3.396 +#---------------------------------------------------------------------------
   3.397 +# configuration options related to warning and progress messages
   3.398 +#---------------------------------------------------------------------------
   3.399 +
   3.400 +# The QUIET tag can be used to turn on/off the messages that are generated 
   3.401 +# by doxygen. Possible values are YES and NO. If left blank NO is used.
   3.402 +
   3.403 +QUIET                  = YES
   3.404 +
   3.405 +# The WARNINGS tag can be used to turn on/off the warning messages that are 
   3.406 +# generated by doxygen. Possible values are YES and NO. If left blank 
   3.407 +# NO is used.
   3.408 +
   3.409 +WARNINGS               = YES
   3.410 +
   3.411 +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
   3.412 +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
   3.413 +# automatically be disabled.
   3.414 +
   3.415 +WARN_IF_UNDOCUMENTED   = YES
   3.416 +
   3.417 +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
   3.418 +# potential errors in the documentation, such as not documenting some 
   3.419 +# parameters in a documented function, or documenting parameters that 
   3.420 +# don't exist or using markup commands wrongly.
   3.421 +
   3.422 +WARN_IF_DOC_ERROR      = YES
   3.423 +
   3.424 +# This WARN_NO_PARAMDOC option can be abled to get warnings for 
   3.425 +# functions that are documented, but have no documentation for their parameters 
   3.426 +# or return value. If set to NO (the default) doxygen will only warn about 
   3.427 +# wrong or incomplete parameter documentation, but not about the absence of 
   3.428 +# documentation.
   3.429 +
   3.430 +WARN_NO_PARAMDOC       = NO
   3.431 +
   3.432 +# The WARN_FORMAT tag determines the format of the warning messages that 
   3.433 +# doxygen can produce. The string should contain the $file, $line, and $text 
   3.434 +# tags, which will be replaced by the file and line number from which the 
   3.435 +# warning originated and the warning text. Optionally the format may contain 
   3.436 +# $version, which will be replaced by the version of the file (if it could 
   3.437 +# be obtained via FILE_VERSION_FILTER)
   3.438 +
   3.439 +WARN_FORMAT            = "$file:$line: $text"
   3.440 +
   3.441 +# The WARN_LOGFILE tag can be used to specify a file to which warning 
   3.442 +# and error messages should be written. If left blank the output is written 
   3.443 +# to stderr.
   3.444 +
   3.445 +WARN_LOGFILE           = 
   3.446 +
   3.447 +#---------------------------------------------------------------------------
   3.448 +# configuration options related to the input files
   3.449 +#---------------------------------------------------------------------------
   3.450 +
   3.451 +# The INPUT tag can be used to specify the files and/or directories that contain 
   3.452 +# documented source files. You may enter file names like "myfile.cpp" or 
   3.453 +# directories like "/usr/src/myproject". Separate the files or directories 
   3.454 +# with spaces.
   3.455 +
   3.456 +INPUT                  = ../tools/python/xen/
   3.457 +
   3.458 +# If the value of the INPUT tag contains directories, you can use the 
   3.459 +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
   3.460 +# and *.h) to filter out the source-files in the directories. If left 
   3.461 +# blank the following patterns are tested: 
   3.462 +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
   3.463 +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
   3.464 +
   3.465 +FILE_PATTERNS          = *.py *.c
   3.466 +
   3.467 +# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
   3.468 +# should be searched for input files as well. Possible values are YES and NO. 
   3.469 +# If left blank NO is used.
   3.470 +
   3.471 +RECURSIVE              = YES
   3.472 +
   3.473 +# The EXCLUDE tag can be used to specify files and/or directories that should 
   3.474 +# excluded from the INPUT source files. This way you can easily exclude a 
   3.475 +# subdirectory from a directory tree whose root is specified with the INPUT tag.
   3.476 +
   3.477 +EXCLUDE                = 
   3.478 +
   3.479 +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
   3.480 +# directories that are symbolic links (a Unix filesystem feature) are excluded 
   3.481 +# from the input.
   3.482 +
   3.483 +EXCLUDE_SYMLINKS       = NO
   3.484 +
   3.485 +# If the value of the INPUT tag contains directories, you can use the 
   3.486 +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
   3.487 +# certain files from those directories.
   3.488 +
   3.489 +EXCLUDE_PATTERNS       = 
   3.490 +
   3.491 +# The EXAMPLE_PATH tag can be used to specify one or more files or 
   3.492 +# directories that contain example code fragments that are included (see 
   3.493 +# the \include command).
   3.494 +
   3.495 +EXAMPLE_PATH           = 
   3.496 +
   3.497 +# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
   3.498 +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
   3.499 +# and *.h) to filter out the source-files in the directories. If left 
   3.500 +# blank all files are included.
   3.501 +
   3.502 +EXAMPLE_PATTERNS       = 
   3.503 +
   3.504 +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
   3.505 +# searched for input files to be used with the \include or \dontinclude 
   3.506 +# commands irrespective of the value of the RECURSIVE tag. 
   3.507 +# Possible values are YES and NO. If left blank NO is used.
   3.508 +
   3.509 +EXAMPLE_RECURSIVE      = NO
   3.510 +
   3.511 +# The IMAGE_PATH tag can be used to specify one or more files or 
   3.512 +# directories that contain image that are included in the documentation (see 
   3.513 +# the \image command).
   3.514 +
   3.515 +IMAGE_PATH             = 
   3.516 +
   3.517 +# The INPUT_FILTER tag can be used to specify a program that doxygen should 
   3.518 +# invoke to filter for each input file. Doxygen will invoke the filter program 
   3.519 +# by executing (via popen()) the command <filter> <input-file>, where <filter> 
   3.520 +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
   3.521 +# input file. Doxygen will then use the output that the filter program writes 
   3.522 +# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
   3.523 +# ignored.
   3.524 +
   3.525 +INPUT_FILTER           = "sh ./Doxyfilter ../tools/python"
   3.526 +
   3.527 +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
   3.528 +# basis.  Doxygen will compare the file name with each pattern and apply the 
   3.529 +# filter if there is a match.  The filters are a list of the form: 
   3.530 +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
   3.531 +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
   3.532 +# is applied to all files.
   3.533 +
   3.534 +FILTER_PATTERNS        = 
   3.535 +
   3.536 +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
   3.537 +# INPUT_FILTER) will be used to filter the input files when producing source 
   3.538 +# files to browse (i.e. when SOURCE_BROWSER is set to YES).
   3.539 +
   3.540 +FILTER_SOURCE_FILES    = YES
   3.541 +
   3.542 +#---------------------------------------------------------------------------
   3.543 +# configuration options related to source browsing
   3.544 +#---------------------------------------------------------------------------
   3.545 +
   3.546 +# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
   3.547 +# be generated. Documented entities will be cross-referenced with these sources. 
   3.548 +# Note: To get rid of all source code in the generated output, make sure also 
   3.549 +# VERBATIM_HEADERS is set to NO.
   3.550 +
   3.551 +SOURCE_BROWSER         = NO
   3.552 +
   3.553 +# Setting the INLINE_SOURCES tag to YES will include the body 
   3.554 +# of functions and classes directly in the documentation.
   3.555 +
   3.556 +INLINE_SOURCES         = NO
   3.557 +
   3.558 +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
   3.559 +# doxygen to hide any special comment blocks from generated source code 
   3.560 +# fragments. Normal C and C++ comments will always remain visible.
   3.561 +
   3.562 +STRIP_CODE_COMMENTS    = YES
   3.563 +
   3.564 +# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
   3.565 +# then for each documented function all documented 
   3.566 +# functions referencing it will be listed.
   3.567 +
   3.568 +REFERENCED_BY_RELATION = YES
   3.569 +
   3.570 +# If the REFERENCES_RELATION tag is set to YES (the default) 
   3.571 +# then for each documented function all documented entities 
   3.572 +# called/used by that function will be listed.
   3.573 +
   3.574 +REFERENCES_RELATION    = YES
   3.575 +
   3.576 +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
   3.577 +# will generate a verbatim copy of the header file for each class for 
   3.578 +# which an include is specified. Set to NO to disable this.
   3.579 +
   3.580 +VERBATIM_HEADERS       = YES
   3.581 +
   3.582 +#---------------------------------------------------------------------------
   3.583 +# configuration options related to the alphabetical class index
   3.584 +#---------------------------------------------------------------------------
   3.585 +
   3.586 +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
   3.587 +# of all compounds will be generated. Enable this if the project 
   3.588 +# contains a lot of classes, structs, unions or interfaces.
   3.589 +
   3.590 +ALPHABETICAL_INDEX     = NO
   3.591 +
   3.592 +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
   3.593 +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
   3.594 +# in which this list will be split (can be a number in the range [1..20])
   3.595 +
   3.596 +COLS_IN_ALPHA_INDEX    = 5
   3.597 +
   3.598 +# In case all classes in a project start with a common prefix, all 
   3.599 +# classes will be put under the same header in the alphabetical index. 
   3.600 +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
   3.601 +# should be ignored while generating the index headers.
   3.602 +
   3.603 +IGNORE_PREFIX          = 
   3.604 +
   3.605 +#---------------------------------------------------------------------------
   3.606 +# configuration options related to the HTML output
   3.607 +#---------------------------------------------------------------------------
   3.608 +
   3.609 +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
   3.610 +# generate HTML output.
   3.611 +
   3.612 +GENERATE_HTML          = YES
   3.613 +
   3.614 +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
   3.615 +# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
   3.616 +# put in front of it. If left blank `html' will be used as the default path.
   3.617 +
   3.618 +HTML_OUTPUT            = html
   3.619 +
   3.620 +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
   3.621 +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
   3.622 +# doxygen will generate files with .html extension.
   3.623 +
   3.624 +HTML_FILE_EXTENSION    = .html
   3.625 +
   3.626 +# The HTML_HEADER tag can be used to specify a personal HTML header for 
   3.627 +# each generated HTML page. If it is left blank doxygen will generate a 
   3.628 +# standard header.
   3.629 +
   3.630 +HTML_HEADER            = 
   3.631 +
   3.632 +# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
   3.633 +# each generated HTML page. If it is left blank doxygen will generate a 
   3.634 +# standard footer.
   3.635 +
   3.636 +HTML_FOOTER            = 
   3.637 +
   3.638 +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
   3.639 +# style sheet that is used by each HTML page. It can be used to 
   3.640 +# fine-tune the look of the HTML output. If the tag is left blank doxygen 
   3.641 +# will generate a default style sheet. Note that doxygen will try to copy 
   3.642 +# the style sheet file to the HTML output directory, so don't put your own 
   3.643 +# stylesheet in the HTML output directory as well, or it will be erased!
   3.644 +
   3.645 +HTML_STYLESHEET        = 
   3.646 +
   3.647 +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
   3.648 +# files or namespaces will be aligned in HTML using tables. If set to 
   3.649 +# NO a bullet list will be used.
   3.650 +
   3.651 +HTML_ALIGN_MEMBERS     = YES
   3.652 +
   3.653 +# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
   3.654 +# will be generated that can be used as input for tools like the 
   3.655 +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
   3.656 +# of the generated HTML documentation.
   3.657 +
   3.658 +GENERATE_HTMLHELP      = NO
   3.659 +
   3.660 +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
   3.661 +# be used to specify the file name of the resulting .chm file. You 
   3.662 +# can add a path in front of the file if the result should not be 
   3.663 +# written to the html output directory.
   3.664 +
   3.665 +CHM_FILE               = 
   3.666 +
   3.667 +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
   3.668 +# be used to specify the location (absolute path including file name) of 
   3.669 +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
   3.670 +# the HTML help compiler on the generated index.hhp.
   3.671 +
   3.672 +HHC_LOCATION           = 
   3.673 +
   3.674 +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
   3.675 +# controls if a separate .chi index file is generated (YES) or that 
   3.676 +# it should be included in the master .chm file (NO).
   3.677 +
   3.678 +GENERATE_CHI           = NO
   3.679 +
   3.680 +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
   3.681 +# controls whether a binary table of contents is generated (YES) or a 
   3.682 +# normal table of contents (NO) in the .chm file.
   3.683 +
   3.684 +BINARY_TOC             = NO
   3.685 +
   3.686 +# The TOC_EXPAND flag can be set to YES to add extra items for group members 
   3.687 +# to the contents of the HTML help documentation and to the tree view.
   3.688 +
   3.689 +TOC_EXPAND             = NO
   3.690 +
   3.691 +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
   3.692 +# top of each HTML page. The value NO (the default) enables the index and 
   3.693 +# the value YES disables it.
   3.694 +
   3.695 +DISABLE_INDEX          = NO
   3.696 +
   3.697 +# This tag can be used to set the number of enum values (range [1..20]) 
   3.698 +# that doxygen will group on one line in the generated HTML documentation.
   3.699 +
   3.700 +ENUM_VALUES_PER_LINE   = 4
   3.701 +
   3.702 +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
   3.703 +# generated containing a tree-like index structure (just like the one that 
   3.704 +# is generated for HTML Help). For this to work a browser that supports 
   3.705 +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
   3.706 +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
   3.707 +# probably better off using the HTML help feature.
   3.708 +
   3.709 +GENERATE_TREEVIEW      = NO
   3.710 +
   3.711 +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
   3.712 +# used to set the initial width (in pixels) of the frame in which the tree 
   3.713 +# is shown.
   3.714 +
   3.715 +TREEVIEW_WIDTH         = 250
   3.716 +
   3.717 +#---------------------------------------------------------------------------
   3.718 +# configuration options related to the LaTeX output
   3.719 +#---------------------------------------------------------------------------
   3.720 +
   3.721 +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
   3.722 +# generate Latex output.
   3.723 +
   3.724 +GENERATE_LATEX         = YES
   3.725 +
   3.726 +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
   3.727 +# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
   3.728 +# put in front of it. If left blank `latex' will be used as the default path.
   3.729 +
   3.730 +LATEX_OUTPUT           = latex
   3.731 +
   3.732 +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
   3.733 +# invoked. If left blank `latex' will be used as the default command name.
   3.734 +
   3.735 +LATEX_CMD_NAME         = latex
   3.736 +
   3.737 +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
   3.738 +# generate index for LaTeX. If left blank `makeindex' will be used as the 
   3.739 +# default command name.
   3.740 +
   3.741 +MAKEINDEX_CMD_NAME     = makeindex
   3.742 +
   3.743 +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
   3.744 +# LaTeX documents. This may be useful for small projects and may help to 
   3.745 +# save some trees in general.
   3.746 +
   3.747 +COMPACT_LATEX          = NO
   3.748 +
   3.749 +# The PAPER_TYPE tag can be used to set the paper type that is used 
   3.750 +# by the printer. Possible values are: a4, a4wide, letter, legal and 
   3.751 +# executive. If left blank a4wide will be used.
   3.752 +
   3.753 +PAPER_TYPE             = a4wide
   3.754 +
   3.755 +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
   3.756 +# packages that should be included in the LaTeX output.
   3.757 +
   3.758 +EXTRA_PACKAGES         = 
   3.759 +
   3.760 +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
   3.761 +# the generated latex document. The header should contain everything until 
   3.762 +# the first chapter. If it is left blank doxygen will generate a 
   3.763 +# standard header. Notice: only use this tag if you know what you are doing!
   3.764 +
   3.765 +LATEX_HEADER           = 
   3.766 +
   3.767 +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
   3.768 +# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
   3.769 +# contain links (just like the HTML output) instead of page references 
   3.770 +# This makes the output suitable for online browsing using a pdf viewer.
   3.771 +
   3.772 +PDF_HYPERLINKS         = YES
   3.773 +
   3.774 +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
   3.775 +# plain latex in the generated Makefile. Set this option to YES to get a 
   3.776 +# higher quality PDF documentation.
   3.777 +
   3.778 +USE_PDFLATEX           = YES
   3.779 +
   3.780 +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
   3.781 +# command to the generated LaTeX files. This will instruct LaTeX to keep 
   3.782 +# running if errors occur, instead of asking the user for help. 
   3.783 +# This option is also used when generating formulas in HTML.
   3.784 +
   3.785 +LATEX_BATCHMODE        = NO
   3.786 +
   3.787 +# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
   3.788 +# include the index chapters (such as File Index, Compound Index, etc.) 
   3.789 +# in the output.
   3.790 +
   3.791 +LATEX_HIDE_INDICES     = NO
   3.792 +
   3.793 +#---------------------------------------------------------------------------
   3.794 +# configuration options related to the RTF output
   3.795 +#---------------------------------------------------------------------------
   3.796 +
   3.797 +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
   3.798 +# The RTF output is optimized for Word 97 and may not look very pretty with 
   3.799 +# other RTF readers or editors.
   3.800 +
   3.801 +GENERATE_RTF           = NO
   3.802 +
   3.803 +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
   3.804 +# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
   3.805 +# put in front of it. If left blank `rtf' will be used as the default path.
   3.806 +
   3.807 +RTF_OUTPUT             = rtf
   3.808 +
   3.809 +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
   3.810 +# RTF documents. This may be useful for small projects and may help to 
   3.811 +# save some trees in general.
   3.812 +
   3.813 +COMPACT_RTF            = NO
   3.814 +
   3.815 +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
   3.816 +# will contain hyperlink fields. The RTF file will 
   3.817 +# contain links (just like the HTML output) instead of page references. 
   3.818 +# This makes the output suitable for online browsing using WORD or other 
   3.819 +# programs which support those fields. 
   3.820 +# Note: wordpad (write) and others do not support links.
   3.821 +
   3.822 +RTF_HYPERLINKS         = NO
   3.823 +
   3.824 +# Load stylesheet definitions from file. Syntax is similar to doxygen's 
   3.825 +# config file, i.e. a series of assignments. You only have to provide 
   3.826 +# replacements, missing definitions are set to their default value.
   3.827 +
   3.828 +RTF_STYLESHEET_FILE    = 
   3.829 +
   3.830 +# Set optional variables used in the generation of an rtf document. 
   3.831 +# Syntax is similar to doxygen's config file.
   3.832 +
   3.833 +RTF_EXTENSIONS_FILE    = 
   3.834 +
   3.835 +#---------------------------------------------------------------------------
   3.836 +# configuration options related to the man page output
   3.837 +#---------------------------------------------------------------------------
   3.838 +
   3.839 +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
   3.840 +# generate man pages
   3.841 +
   3.842 +GENERATE_MAN           = NO
   3.843 +
   3.844 +# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
   3.845 +# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
   3.846 +# put in front of it. If left blank `man' will be used as the default path.
   3.847 +
   3.848 +MAN_OUTPUT             = man
   3.849 +
   3.850 +# The MAN_EXTENSION tag determines the extension that is added to 
   3.851 +# the generated man pages (default is the subroutine's section .3)
   3.852 +
   3.853 +MAN_EXTENSION          = .3
   3.854 +
   3.855 +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
   3.856 +# then it will generate one additional man file for each entity 
   3.857 +# documented in the real man page(s). These additional files 
   3.858 +# only source the real man page, but without them the man command 
   3.859 +# would be unable to find the correct page. The default is NO.
   3.860 +
   3.861 +MAN_LINKS              = NO
   3.862 +
   3.863 +#---------------------------------------------------------------------------
   3.864 +# configuration options related to the XML output
   3.865 +#---------------------------------------------------------------------------
   3.866 +
   3.867 +# If the GENERATE_XML tag is set to YES Doxygen will 
   3.868 +# generate an XML file that captures the structure of 
   3.869 +# the code including all documentation.
   3.870 +
   3.871 +GENERATE_XML           = NO
   3.872 +
   3.873 +# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
   3.874 +# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
   3.875 +# put in front of it. If left blank `xml' will be used as the default path.
   3.876 +
   3.877 +XML_OUTPUT             = xml
   3.878 +
   3.879 +# The XML_SCHEMA tag can be used to specify an XML schema, 
   3.880 +# which can be used by a validating XML parser to check the 
   3.881 +# syntax of the XML files.
   3.882 +
   3.883 +XML_SCHEMA             = 
   3.884 +
   3.885 +# The XML_DTD tag can be used to specify an XML DTD, 
   3.886 +# which can be used by a validating XML parser to check the 
   3.887 +# syntax of the XML files.
   3.888 +
   3.889 +XML_DTD                = 
   3.890 +
   3.891 +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
   3.892 +# dump the program listings (including syntax highlighting 
   3.893 +# and cross-referencing information) to the XML output. Note that 
   3.894 +# enabling this will significantly increase the size of the XML output.
   3.895 +
   3.896 +XML_PROGRAMLISTING     = YES
   3.897 +
   3.898 +#---------------------------------------------------------------------------
   3.899 +# configuration options for the AutoGen Definitions output
   3.900 +#---------------------------------------------------------------------------
   3.901 +
   3.902 +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
   3.903 +# generate an AutoGen Definitions (see autogen.sf.net) file 
   3.904 +# that captures the structure of the code including all 
   3.905 +# documentation. Note that this feature is still experimental 
   3.906 +# and incomplete at the moment.
   3.907 +
   3.908 +GENERATE_AUTOGEN_DEF   = NO
   3.909 +
   3.910 +#---------------------------------------------------------------------------
   3.911 +# configuration options related to the Perl module output
   3.912 +#---------------------------------------------------------------------------
   3.913 +
   3.914 +# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
   3.915 +# generate a Perl module file that captures the structure of 
   3.916 +# the code including all documentation. Note that this 
   3.917 +# feature is still experimental and incomplete at the 
   3.918 +# moment.
   3.919 +
   3.920 +GENERATE_PERLMOD       = NO
   3.921 +
   3.922 +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
   3.923 +# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
   3.924 +# to generate PDF and DVI output from the Perl module output.
   3.925 +
   3.926 +PERLMOD_LATEX          = NO
   3.927 +
   3.928 +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
   3.929 +# nicely formatted so it can be parsed by a human reader.  This is useful 
   3.930 +# if you want to understand what is going on.  On the other hand, if this 
   3.931 +# tag is set to NO the size of the Perl module output will be much smaller 
   3.932 +# and Perl will parse it just the same.
   3.933 +
   3.934 +PERLMOD_PRETTY         = YES
   3.935 +
   3.936 +# The names of the make variables in the generated doxyrules.make file 
   3.937 +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
   3.938 +# This is useful so different doxyrules.make files included by the same 
   3.939 +# Makefile don't overwrite each other's variables.
   3.940 +
   3.941 +PERLMOD_MAKEVAR_PREFIX = 
   3.942 +
   3.943 +#---------------------------------------------------------------------------
   3.944 +# Configuration options related to the preprocessor   
   3.945 +#---------------------------------------------------------------------------
   3.946 +
   3.947 +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
   3.948 +# evaluate all C-preprocessor directives found in the sources and include 
   3.949 +# files.
   3.950 +
   3.951 +ENABLE_PREPROCESSING   = YES
   3.952 +
   3.953 +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
   3.954 +# names in the source code. If set to NO (the default) only conditional 
   3.955 +# compilation will be performed. Macro expansion can be done in a controlled 
   3.956 +# way by setting EXPAND_ONLY_PREDEF to YES.
   3.957 +
   3.958 +MACRO_EXPANSION        = NO
   3.959 +
   3.960 +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
   3.961 +# then the macro expansion is limited to the macros specified with the 
   3.962 +# PREDEFINED and EXPAND_AS_PREDEFINED tags.
   3.963 +
   3.964 +EXPAND_ONLY_PREDEF     = NO
   3.965 +
   3.966 +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
   3.967 +# in the INCLUDE_PATH (see below) will be search if a #include is found.
   3.968 +
   3.969 +SEARCH_INCLUDES        = YES
   3.970 +
   3.971 +# The INCLUDE_PATH tag can be used to specify one or more directories that 
   3.972 +# contain include files that are not input files but should be processed by 
   3.973 +# the preprocessor.
   3.974 +
   3.975 +INCLUDE_PATH           = 
   3.976 +
   3.977 +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
   3.978 +# patterns (like *.h and *.hpp) to filter out the header-files in the 
   3.979 +# directories. If left blank, the patterns specified with FILE_PATTERNS will 
   3.980 +# be used.
   3.981 +
   3.982 +INCLUDE_FILE_PATTERNS  = 
   3.983 +
   3.984 +# The PREDEFINED tag can be used to specify one or more macro names that 
   3.985 +# are defined before the preprocessor is started (similar to the -D option of 
   3.986 +# gcc). The argument of the tag is a list of macros of the form: name 
   3.987 +# or name=definition (no spaces). If the definition and the = are 
   3.988 +# omitted =1 is assumed. To prevent a macro definition from being 
   3.989 +# undefined via #undef or recursively expanded use the := operator 
   3.990 +# instead of the = operator.
   3.991 +
   3.992 +PREDEFINED             = 
   3.993 +
   3.994 +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
   3.995 +# this tag can be used to specify a list of macro names that should be expanded. 
   3.996 +# The macro definition that is found in the sources will be used. 
   3.997 +# Use the PREDEFINED tag if you want to use a different macro definition.
   3.998 +
   3.999 +EXPAND_AS_DEFINED      = 
  3.1000 +
  3.1001 +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
  3.1002 +# doxygen's preprocessor will remove all function-like macros that are alone 
  3.1003 +# on a line, have an all uppercase name, and do not end with a semicolon. Such 
  3.1004 +# function macros are typically used for boiler-plate code, and will confuse 
  3.1005 +# the parser if not removed.
  3.1006 +
  3.1007 +SKIP_FUNCTION_MACROS   = YES
  3.1008 +
  3.1009 +#---------------------------------------------------------------------------
  3.1010 +# Configuration::additions related to external references   
  3.1011 +#---------------------------------------------------------------------------
  3.1012 +
  3.1013 +# The TAGFILES option can be used to specify one or more tagfiles. 
  3.1014 +# Optionally an initial location of the external documentation 
  3.1015 +# can be added for each tagfile. The format of a tag file without 
  3.1016 +# this location is as follows: 
  3.1017 +#   TAGFILES = file1 file2 ... 
  3.1018 +# Adding location for the tag files is done as follows: 
  3.1019 +#   TAGFILES = file1=loc1 "file2 = loc2" ... 
  3.1020 +# where "loc1" and "loc2" can be relative or absolute paths or 
  3.1021 +# URLs. If a location is present for each tag, the installdox tool 
  3.1022 +# does not have to be run to correct the links.
  3.1023 +# Note that each tag file must have a unique name
  3.1024 +# (where the name does NOT include the path)
  3.1025 +# If a tag file is not located in the directory in which doxygen 
  3.1026 +# is run, you must also specify the path to the tagfile here.
  3.1027 +
  3.1028 +TAGFILES               = 
  3.1029 +
  3.1030 +# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
  3.1031 +# a tag file that is based on the input files it reads.
  3.1032 +
  3.1033 +GENERATE_TAGFILE       = 
  3.1034 +
  3.1035 +# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
  3.1036 +# in the class index. If set to NO only the inherited external classes 
  3.1037 +# will be listed.
  3.1038 +
  3.1039 +ALLEXTERNALS           = NO
  3.1040 +
  3.1041 +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
  3.1042 +# in the modules index. If set to NO, only the current project's groups will 
  3.1043 +# be listed.
  3.1044 +
  3.1045 +EXTERNAL_GROUPS        = YES
  3.1046 +
  3.1047 +# The PERL_PATH should be the absolute path and name of the perl script 
  3.1048 +# interpreter (i.e. the result of `which perl').
  3.1049 +
  3.1050 +PERL_PATH              = /usr/bin/perl
  3.1051 +
  3.1052 +#---------------------------------------------------------------------------
  3.1053 +# Configuration options related to the dot tool   
  3.1054 +#---------------------------------------------------------------------------
  3.1055 +
  3.1056 +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
  3.1057 +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
  3.1058 +# or super classes. Setting the tag to NO turns the diagrams off. Note that 
  3.1059 +# this option is superseded by the HAVE_DOT option below. This is only a 
  3.1060 +# fallback. It is recommended to install and use dot, since it yields more 
  3.1061 +# powerful graphs.
  3.1062 +
  3.1063 +CLASS_DIAGRAMS         = YES
  3.1064 +
  3.1065 +# If set to YES, the inheritance and collaboration graphs will hide 
  3.1066 +# inheritance and usage relations if the target is undocumented 
  3.1067 +# or is not a class.
  3.1068 +
  3.1069 +HIDE_UNDOC_RELATIONS   = YES
  3.1070 +
  3.1071 +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
  3.1072 +# available from the path. This tool is part of Graphviz, a graph visualization 
  3.1073 +# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
  3.1074 +# have no effect if this option is set to NO (the default)
  3.1075 +
  3.1076 +HAVE_DOT               = NO
  3.1077 +
  3.1078 +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
  3.1079 +# will generate a graph for each documented class showing the direct and 
  3.1080 +# indirect inheritance relations. Setting this tag to YES will force the 
  3.1081 +# the CLASS_DIAGRAMS tag to NO.
  3.1082 +
  3.1083 +CLASS_GRAPH            = YES
  3.1084 +
  3.1085 +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
  3.1086 +# will generate a graph for each documented class showing the direct and 
  3.1087 +# indirect implementation dependencies (inheritance, containment, and 
  3.1088 +# class references variables) of the class with other documented classes.
  3.1089 +
  3.1090 +COLLABORATION_GRAPH    = YES
  3.1091 +
  3.1092 +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
  3.1093 +# will generate a graph for groups, showing the direct groups dependencies
  3.1094 +
  3.1095 +GROUP_GRAPHS           = YES
  3.1096 +
  3.1097 +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
  3.1098 +# collaboration diagrams in a style similar to the OMG's Unified Modeling 
  3.1099 +# Language.
  3.1100 +
  3.1101 +UML_LOOK               = NO
  3.1102 +
  3.1103 +# If set to YES, the inheritance and collaboration graphs will show the 
  3.1104 +# relations between templates and their instances.
  3.1105 +
  3.1106 +TEMPLATE_RELATIONS     = NO
  3.1107 +
  3.1108 +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
  3.1109 +# tags are set to YES then doxygen will generate a graph for each documented 
  3.1110 +# file showing the direct and indirect include dependencies of the file with 
  3.1111 +# other documented files.
  3.1112 +
  3.1113 +INCLUDE_GRAPH          = YES
  3.1114 +
  3.1115 +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
  3.1116 +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
  3.1117 +# documented header file showing the documented files that directly or 
  3.1118 +# indirectly include this file.
  3.1119 +
  3.1120 +INCLUDED_BY_GRAPH      = YES
  3.1121 +
  3.1122 +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
  3.1123 +# generate a call dependency graph for every global function or class method. 
  3.1124 +# Note that enabling this option will significantly increase the time of a run. 
  3.1125 +# So in most cases it will be better to enable call graphs for selected 
  3.1126 +# functions only using the \callgraph command.
  3.1127 +
  3.1128 +CALL_GRAPH             = NO
  3.1129 +
  3.1130 +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
  3.1131 +# will graphical hierarchy of all classes instead of a textual one.
  3.1132 +
  3.1133 +GRAPHICAL_HIERARCHY    = YES
  3.1134 +
  3.1135 +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
  3.1136 +# then doxygen will show the dependencies a directory has on other directories 
  3.1137 +# in a graphical way. The dependency relations are determined by the #include
  3.1138 +# relations between the files in the directories.
  3.1139 +
  3.1140 +DIRECTORY_GRAPH        = YES
  3.1141 +
  3.1142 +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
  3.1143 +# generated by dot. Possible values are png, jpg, or gif
  3.1144 +# If left blank png will be used.
  3.1145 +
  3.1146 +DOT_IMAGE_FORMAT       = png
  3.1147 +
  3.1148 +# The tag DOT_PATH can be used to specify the path where the dot tool can be 
  3.1149 +# found. If left blank, it is assumed the dot tool can be found in the path.
  3.1150 +
  3.1151 +DOT_PATH               = 
  3.1152 +
  3.1153 +# The DOTFILE_DIRS tag can be used to specify one or more directories that 
  3.1154 +# contain dot files that are included in the documentation (see the 
  3.1155 +# \dotfile command).
  3.1156 +
  3.1157 +DOTFILE_DIRS           = 
  3.1158 +
  3.1159 +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
  3.1160 +# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
  3.1161 +# this value, doxygen will try to truncate the graph, so that it fits within 
  3.1162 +# the specified constraint. Beware that most browsers cannot cope with very 
  3.1163 +# large images.
  3.1164 +
  3.1165 +MAX_DOT_GRAPH_WIDTH    = 1024
  3.1166 +
  3.1167 +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
  3.1168 +# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
  3.1169 +# this value, doxygen will try to truncate the graph, so that it fits within 
  3.1170 +# the specified constraint. Beware that most browsers cannot cope with very 
  3.1171 +# large images.
  3.1172 +
  3.1173 +MAX_DOT_GRAPH_HEIGHT   = 1024
  3.1174 +
  3.1175 +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
  3.1176 +# graphs generated by dot. A depth value of 3 means that only nodes reachable 
  3.1177 +# from the root by following a path via at most 3 edges will be shown. Nodes 
  3.1178 +# that lay further from the root node will be omitted. Note that setting this 
  3.1179 +# option to 1 or 2 may greatly reduce the computation time needed for large 
  3.1180 +# code bases. Also note that a graph may be further truncated if the graph's 
  3.1181 +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
  3.1182 +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
  3.1183 +# the graph is not depth-constrained.
  3.1184 +
  3.1185 +MAX_DOT_GRAPH_DEPTH    = 0
  3.1186 +
  3.1187 +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
  3.1188 +# background. This is disabled by default, which results in a white background. 
  3.1189 +# Warning: Depending on the platform used, enabling this option may lead to 
  3.1190 +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
  3.1191 +# read).
  3.1192 +
  3.1193 +DOT_TRANSPARENT        = NO
  3.1194 +
  3.1195 +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
  3.1196 +# files in one run (i.e. multiple -o and -T options on the command line). This 
  3.1197 +# makes dot run faster, but since only newer versions of dot (>1.8.10) 
  3.1198 +# support this, this feature is disabled by default.
  3.1199 +
  3.1200 +DOT_MULTI_TARGETS      = NO
  3.1201 +
  3.1202 +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
  3.1203 +# generate a legend page explaining the meaning of the various boxes and 
  3.1204 +# arrows in the dot generated graphs.
  3.1205 +
  3.1206 +GENERATE_LEGEND        = YES
  3.1207 +
  3.1208 +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
  3.1209 +# remove the intermediate dot files that are used to generate 
  3.1210 +# the various graphs.
  3.1211 +
  3.1212 +DOT_CLEANUP            = YES
  3.1213 +
  3.1214 +#---------------------------------------------------------------------------
  3.1215 +# Configuration::additions related to the search engine   
  3.1216 +#---------------------------------------------------------------------------
  3.1217 +
  3.1218 +# The SEARCHENGINE tag specifies whether or not a search engine should be 
  3.1219 +# used. If set to NO the values of all tags below this one will be ignored.
  3.1220 +
  3.1221 +SEARCHENGINE           = NO
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/docs/Doxyfilter	Tue Sep 13 15:05:49 2005 +0000
     4.3 @@ -0,0 +1,16 @@
     4.4 +#!/bin/sh
     4.5 +
     4.6 +#
     4.7 +# Doxyfilter <source-root> <filename>
     4.8 +#
     4.9 +
    4.10 +dir=$(dirname "$0")
    4.11 +
    4.12 +PYFILTER="$dir/pythfilter.py"
    4.13 +
    4.14 +if [ "${2/.py/}" != "$2" ]
    4.15 +then
    4.16 +    python "$PYFILTER" -r "$1" -f "$2"
    4.17 +else
    4.18 +    cat "$2"
    4.19 +fi
     5.1 --- a/docs/Makefile	Tue Sep 13 10:49:04 2005 +0000
     5.2 +++ b/docs/Makefile	Tue Sep 13 15:05:49 2005 +0000
     5.3 @@ -8,6 +8,7 @@ DVIPS		:= dvips
     5.4  LATEX		:= latex
     5.5  FIG2DEV		:= fig2dev
     5.6  LATEX2HTML	:= latex2html
     5.7 +DOXYGEN		:= doxygen
     5.8  
     5.9  pkgdocdir	:= /usr/share/doc/xen
    5.10  
    5.11 @@ -18,10 +19,14 @@ DOC_HTML	:= $(patsubst src/%.tex,html/%/
    5.12  
    5.13  GFX = $(patsubst %.fig, %.eps, $(wildcard figs/*.fig))
    5.14  
    5.15 +.PHONY:	all build dev-docs python-dev-docs ps pdf html clean install
    5.16 +
    5.17  all: build
    5.18  build: ps pdf html
    5.19  	rm -f *.aux *.dvi *.bbl *.blg *.glo *.idx *.ilg *.log *.ind *.toc
    5.20  
    5.21 +dev-docs: python-dev-docs
    5.22 +
    5.23  ps: $(DOC_PS)
    5.24  
    5.25  pdf: $(DOC_PDF)
    5.26 @@ -30,10 +35,18 @@ html:
    5.27  	@if which $(LATEX2HTML) 1>/dev/null 2>/dev/null; then \
    5.28  	$(MAKE) $(DOC_HTML); fi
    5.29  
    5.30 +python-dev-docs:
    5.31 +	mkdir -p api/tools/python
    5.32 +	@if which $(DOXYGEN) 1>/dev/null 2>/dev/null; then         \
    5.33 +        echo "Running doxygen to generate Python tools APIs ... "; \
    5.34 +	$(DOXYGEN) Doxyfile;                                       \
    5.35 +	$(MAKE) -C api/tools/python/latex ; fi
    5.36 +
    5.37  clean:
    5.38  	rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~ 
    5.39  	rm -rf *.ilg *.log *.ind *.toc *.bak core
    5.40  	rm -rf $(GFX) ps pdf html
    5.41 +	rm -rf api
    5.42  
    5.43  install: all
    5.44  	rm -rf $(DESTDIR)$(pkgdocdir)
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/docs/pythfilter.py	Tue Sep 13 15:05:49 2005 +0000
     6.3 @@ -0,0 +1,658 @@
     6.4 +#!/usr/bin/env python
     6.5 +
     6.6 +# pythfilter.py v1.5.5, written by Matthias Baas (baas@ira.uka.de)
     6.7 +
     6.8 +# Doxygen filter which can be used to document Python source code.
     6.9 +# Classes (incl. methods) and functions can be documented.
    6.10 +# Every comment that begins with ## is literally turned into an
    6.11 +# Doxygen comment. Consecutive comment lines are turned into
    6.12 +# comment blocks (-> /** ... */).
    6.13 +# All the stuff is put inside a namespace with the same name as
    6.14 +# the source file.
    6.15 +
    6.16 +# Conversions:
    6.17 +# ============
    6.18 +# ##-blocks                  ->  /** ... */
    6.19 +# "class name(base): ..."    ->  "class name : public base {...}"
    6.20 +# "def name(params): ..."    ->  "name(params) {...}"
    6.21 +
    6.22 +# Changelog:
    6.23 +# 21.01.2003: Raw (r"") or unicode (u"") doc string will now be properly
    6.24 +#             handled. (thanks to Richard Laager for the patch)
    6.25 +# 22.12.2003: Fixed a bug where no function names would be output for "def"
    6.26 +#             blocks that were not in a class.
    6.27 +#             (thanks to Richard Laager for the patch)
    6.28 +# 12.12.2003: Implemented code to handle static and class methods with
    6.29 +#             this logic: Methods with "self" as the first argument are
    6.30 +#             non-static. Methods with "cls" are Python class methods,
    6.31 +#             which translate into static methods for Doxygen. Other
    6.32 +#             methods are assumed to be static methods. As should be
    6.33 +#             obvious, this logic doesn't take into account if the method
    6.34 +#             is actually setup as a classmethod() or a staticmethod(),
    6.35 +#             just if it follows the normal conventions.
    6.36 +#             (thanks to Richard Laager for the patch)
    6.37 +# 11.12.2003: Corrected #includes to use os.path.sep instead of ".". Corrected
    6.38 +#             namespace code to use "::" instead of ".".
    6.39 +#             (thanks to Richard Laager for the patch)
    6.40 +# 11.12.2003: Methods beginning with two underscores that end with
    6.41 +#             something other than two underscores are considered private
    6.42 +#             and are handled accordingly.
    6.43 +#             (thanks to Richard Laager for the patch)
    6.44 +# 03.12.2003: The first parameter of class methods (self) is removed from
    6.45 +#             the documentation.
    6.46 +# 03.11.2003: The module docstring will be used as namespace documentation
    6.47 +#             (thanks to Joe Bronkema for the patch)
    6.48 +# 08.07.2003: Namespaces get a default documentation so that the namespace
    6.49 +#             and its contents will show up in the generated documentation.
    6.50 +# 05.02.2003: Directories will be delted during synchronization.
    6.51 +# 31.01.2003: -f option & filtering entire directory trees.
    6.52 +# 10.08.2002: In base classes the '.' will be replaced by '::'
    6.53 +# 18.07.2002: * and ** will be translated into arguments
    6.54 +# 18.07.2002: Argument lists may contain default values using constructors.
    6.55 +# 18.06.2002: Support for ## public:
    6.56 +# 21.01.2002: from ... import will be translated to "using namespace ...;"
    6.57 +#             TODO: "from ... import *" vs "from ... import names"
    6.58 +#             TODO: Using normal imports: name.name -> name::name
    6.59 +# 20.01.2002: #includes will be placed in front of the namespace
    6.60 +
    6.61 +######################################################################
    6.62 +
    6.63 +# The program is written as a state machine with the following states:
    6.64 +#
    6.65 +# - OUTSIDE               The current position is outside any comment,
    6.66 +#                         class definition or function.
    6.67 +#
    6.68 +# - BUILD_COMMENT         Begins with first "##".
    6.69 +#                         Ends with the first token that is no "##"
    6.70 +#                         at the same column as before.
    6.71 +#
    6.72 +# - BUILD_CLASS_DECL      Begins with "class".
    6.73 +#                         Ends with ":"
    6.74 +# - BUILD_CLASS_BODY      Begins just after BUILD_CLASS_DECL.
    6.75 +#                         The first following token (which is no comment)
    6.76 +#                         determines indentation depth.
    6.77 +#                         Ends with a token that has a smaller indendation.
    6.78 +#
    6.79 +# - BUILD_DEF_DECL        Begins with "def".
    6.80 +#                         Ends with ":".
    6.81 +# - BUILD_DEF_BODY        Begins just after BUILD_DEF_DECL.
    6.82 +#                         The first following token (which is no comment)
    6.83 +#                         determines indentation depth.
    6.84 +#                         Ends with a token that has a smaller indendation.
    6.85 +
    6.86 +import getopt
    6.87 +import glob
    6.88 +import os.path
    6.89 +import re
    6.90 +import shutil
    6.91 +import string
    6.92 +import sys
    6.93 +import token
    6.94 +import tokenize
    6.95 +
    6.96 +from stat import *
    6.97 +
    6.98 +OUTSIDE          = 0
    6.99 +BUILD_COMMENT    = 1
   6.100 +BUILD_CLASS_DECL = 2
   6.101 +BUILD_CLASS_BODY = 3
   6.102 +BUILD_DEF_DECL   = 4
   6.103 +BUILD_DEF_BODY   = 5
   6.104 +IMPORT           = 6
   6.105 +IMPORT_OP        = 7
   6.106 +IMPORT_APPEND    = 8
   6.107 +
   6.108 +# Output file stream
   6.109 +outfile = sys.stdout
   6.110 +
   6.111 +# Output buffer
   6.112 +outbuffer = []
   6.113 +
   6.114 +out_row = 1
   6.115 +out_col = 0
   6.116 +
   6.117 +# Variables used by rec_name_n_param()
   6.118 +name         = ""
   6.119 +param        = ""
   6.120 +doc_string   = ""
   6.121 +record_state = 0
   6.122 +bracket_counter = 0
   6.123 +
   6.124 +# Tuple: (row,column)
   6.125 +class_spos  = (0,0)
   6.126 +def_spos    = (0,0)
   6.127 +import_spos = (0,0)
   6.128 +
   6.129 +# Which import was used? ("import" or "from")
   6.130 +import_token = ""
   6.131 +
   6.132 +# Comment block buffer
   6.133 +comment_block = []
   6.134 +comment_finished = 0
   6.135 +
   6.136 +# Imported modules
   6.137 +modules = []
   6.138 +
   6.139 +# Program state
   6.140 +stateStack = [OUTSIDE]
   6.141 +
   6.142 +# Keep track of whether module has a docstring
   6.143 +module_has_docstring = False
   6.144 +
   6.145 +# Keep track of member protection
   6.146 +protection_level = "public"
   6.147 +private_member = False
   6.148 +
   6.149 +# Keep track of the module namespace
   6.150 +namespace = ""
   6.151 +
   6.152 +######################################################################
   6.153 +# Output string s. '\n' may only be at the end of the string (not
   6.154 +# somewhere in the middle).
   6.155 +#
   6.156 +# In: s    - String
   6.157 +#     spos - Startpos
   6.158 +######################################################################
   6.159 +def output(s,spos, immediate=0):
   6.160 +    global outbuffer, out_row, out_col, outfile
   6.161 +
   6.162 +    os = string.rjust(s,spos[1]-out_col+len(s))
   6.163 +
   6.164 +    if immediate:
   6.165 +        outfile.write(os)
   6.166 +    else:
   6.167 +        outbuffer.append(os)
   6.168 +
   6.169 +    assert -1 == string.find(s[0:-2], "\n"), s
   6.170 +
   6.171 +    if (s[-1:]=="\n"):
   6.172 +        out_row = out_row+1
   6.173 +        out_col = 0
   6.174 +    else:
   6.175 +        out_col = spos[1]+len(s)
   6.176 +
   6.177 +
   6.178 +######################################################################
   6.179 +# Records a name and parameters. The name is either a class name or
   6.180 +# a function name. Then the parameter is either the base class or
   6.181 +# the function parameters.
   6.182 +# The name is stored in the global variable "name", the parameters
   6.183 +# in "param".
   6.184 +# The variable "record_state" holds the current state of this internal
   6.185 +# state machine.
   6.186 +# The recording is started by calling start_recording().
   6.187 +#
   6.188 +# In: type, tok
   6.189 +######################################################################
   6.190 +def rec_name_n_param(type, tok):
   6.191 +    global record_state,name,param,doc_string,bracket_counter
   6.192 +    s = record_state
   6.193 +    # State 0: Do nothing.
   6.194 +    if   (s==0):
   6.195 +         return
   6.196 +    # State 1: Remember name.
   6.197 +    elif (s==1):
   6.198 +        name = tok
   6.199 +        record_state = 2
   6.200 +    # State 2: Wait for opening bracket or colon
   6.201 +    elif (s==2):
   6.202 +        if (tok=='('):
   6.203 +            bracket_counter = 1
   6.204 +            record_state=3
   6.205 +        if (tok==':'): record_state=4
   6.206 +    # State 3: Store parameter (or base class) and wait for an ending bracket
   6.207 +    elif (s==3):
   6.208 +        if (tok=='*' or tok=='**'):
   6.209 +            tok=''
   6.210 +        if (tok=='('):
   6.211 +            bracket_counter = bracket_counter+1
   6.212 +        if (tok==')'):
   6.213 +            bracket_counter = bracket_counter-1
   6.214 +        if bracket_counter==0:
   6.215 +            record_state=4
   6.216 +        else:
   6.217 +            param=param+tok
   6.218 +    # State 4: Look for doc string
   6.219 +    elif (s==4):
   6.220 +        if (type==token.NEWLINE or type==token.INDENT or type==token.SLASHEQUAL):
   6.221 +            return
   6.222 +        elif (tok==":"):
   6.223 +            return
   6.224 +        elif (type==token.STRING):
   6.225 +            while tok[:1]=='r' or tok[:1]=='u':
   6.226 +                tok=tok[1:]
   6.227 +            while tok[:1]=='"':
   6.228 +                tok=tok[1:]
   6.229 +            while tok[-1:]=='"':
   6.230 +                tok=tok[:-1]
   6.231 +            doc_string=tok
   6.232 +        record_state=0
   6.233 +
   6.234 +######################################################################
   6.235 +# Starts the recording of a name & param part.
   6.236 +# The function rec_name_n_param() has to be fed with tokens. After
   6.237 +# the necessary tokens are fed the name and parameters can be found
   6.238 +# in the global variables "name" und "param".
   6.239 +######################################################################
   6.240 +def start_recording():
   6.241 +    global record_state,param,name, doc_string
   6.242 +    record_state=1
   6.243 +    name=""
   6.244 +    param=""
   6.245 +    doc_string=""
   6.246 +
   6.247 +######################################################################
   6.248 +# Test if recording is finished
   6.249 +######################################################################
   6.250 +def is_recording_finished():
   6.251 +    global record_state
   6.252 +    return record_state==0
   6.253 +
   6.254 +######################################################################
   6.255 +## Gather comment block
   6.256 +######################################################################
   6.257 +def gather_comment(type,tok,spos):
   6.258 +    global comment_block,comment_finished
   6.259 +    if (type!=tokenize.COMMENT):
   6.260 +        comment_finished = 1
   6.261 +    else:
   6.262 +        # Output old comment block if a new one is started.
   6.263 +        if (comment_finished):
   6.264 +            print_comment(spos)
   6.265 +            comment_finished=0
   6.266 +        if (tok[0:2]=="##" and tok[0:3]!="###"):
   6.267 +            append_comment_lines(tok[2:])
   6.268 +
   6.269 +######################################################################
   6.270 +## Output comment block and empty buffer.
   6.271 +######################################################################
   6.272 +def print_comment(spos):
   6.273 +    global comment_block,comment_finished
   6.274 +    if (comment_block!=[]):
   6.275 +        output("/** ",spos)
   6.276 +        for c in comment_block:
   6.277 +            output(c,spos)
   6.278 +        output("*/\n",spos)
   6.279 +    comment_block    = []
   6.280 +    comment_finished = 0
   6.281 +
   6.282 +######################################################################
   6.283 +def set_state(s):
   6.284 +    global stateStack
   6.285 +    stateStack[len(stateStack)-1]=s
   6.286 +
   6.287 +######################################################################
   6.288 +def get_state():
   6.289 +    global stateStack
   6.290 +    return stateStack[len(stateStack)-1]
   6.291 +
   6.292 +######################################################################
   6.293 +def push_state(s):
   6.294 +    global stateStack
   6.295 +    stateStack.append(s)
   6.296 +
   6.297 +######################################################################
   6.298 +def pop_state():
   6.299 +    global stateStack
   6.300 +    stateStack.pop()
   6.301 +
   6.302 +
   6.303 +######################################################################
   6.304 +def tok_eater(type, tok, spos, epos, line):
   6.305 +    global stateStack,name,param,class_spos,def_spos,import_spos
   6.306 +    global doc_string, modules, import_token, module_has_docstring
   6.307 +    global protection_level, private_member
   6.308 +    global out_row
   6.309 +
   6.310 +    while out_row + 1 < spos[0]:
   6.311 +        output("\n", (0, 0))
   6.312 +
   6.313 +    rec_name_n_param(type,tok)
   6.314 +    if (string.replace(string.strip(tok)," ","")=="##private:"):
   6.315 +         protection_level = "private"
   6.316 +         output("private:\n",spos)
   6.317 +    elif (string.replace(string.strip(tok)," ","")=="##protected:"):
   6.318 +         protection_level = "protected"
   6.319 +         output("protected:\n",spos)
   6.320 +    elif (string.replace(string.strip(tok)," ","")=="##public:"):
   6.321 +         protection_level = "public"
   6.322 +         output("public:\n",spos)
   6.323 +    else:
   6.324 +         gather_comment(type,tok,spos)
   6.325 +
   6.326 +    state = get_state()
   6.327 +
   6.328 +#    sys.stderr.write("%d: %s\n"%(state, tok))
   6.329 +
   6.330 +    # OUTSIDE
   6.331 +    if   (state==OUTSIDE):
   6.332 +        if  (tok=="class"):
   6.333 +            start_recording()
   6.334 +            class_spos = spos
   6.335 +            push_state(BUILD_CLASS_DECL)
   6.336 +        elif (tok=="def"):
   6.337 +            start_recording()
   6.338 +            def_spos = spos
   6.339 +            push_state(BUILD_DEF_DECL)
   6.340 +        elif (tok=="import") or (tok=="from"):
   6.341 +            import_token = tok
   6.342 +            import_spos = spos
   6.343 +            modules     = []
   6.344 +            push_state(IMPORT)
   6.345 +        elif (spos[1] == 0 and tok[:3] == '"""'):
   6.346 +            # Capture module docstring as namespace documentation
   6.347 +            module_has_docstring = True
   6.348 +            append_comment_lines("\\namespace %s\n" % namespace)
   6.349 +            append_comment_lines(tok[3:-3])
   6.350 +            print_comment(spos)
   6.351 +
   6.352 +    # IMPORT
   6.353 +    elif (state==IMPORT):
   6.354 +        if (type==token.NAME):
   6.355 +            modules.append(tok)
   6.356 +            set_state(IMPORT_OP)
   6.357 +    # IMPORT_OP
   6.358 +    elif (state==IMPORT_OP):
   6.359 +        if (tok=="."):
   6.360 +            set_state(IMPORT_APPEND)
   6.361 +        elif (tok==","):
   6.362 +            set_state(IMPORT)
   6.363 +        else:
   6.364 +            for m in modules:
   6.365 +                output('#include "'+m.replace('.',os.path.sep)+'.py"\n', import_spos, immediate=1)
   6.366 +                if import_token=="from":
   6.367 +                    output('using namespace '+m.replace('.', '::')+';\n', import_spos)
   6.368 +            pop_state()
   6.369 +    # IMPORT_APPEND
   6.370 +    elif (state==IMPORT_APPEND):
   6.371 +        if (type==token.NAME):
   6.372 +            modules[len(modules)-1]+="."+tok
   6.373 +            set_state(IMPORT_OP)
   6.374 +    # BUILD_CLASS_DECL
   6.375 +    elif (state==BUILD_CLASS_DECL):
   6.376 +        if (is_recording_finished()):
   6.377 +            s = "class "+name
   6.378 +            if (param!=""): s = s+" : public "+param.replace('.','::')
   6.379 +            if (doc_string!=""):
   6.380 +                append_comment_lines(doc_string)
   6.381 +            print_comment(class_spos)
   6.382 +            output(s+"\n",class_spos)
   6.383 +            output("{\n",(class_spos[0]+1,class_spos[1]))
   6.384 +            protection_level = "public"
   6.385 +            output("  public:\n",(class_spos[0]+2,class_spos[1]))
   6.386 +            set_state(BUILD_CLASS_BODY)
   6.387 +    # BUILD_CLASS_BODY
   6.388 +    elif (state==BUILD_CLASS_BODY):
   6.389 +        if (type!=token.INDENT and type!=token.NEWLINE and type!=40 and
   6.390 +            type!=tokenize.NL and type!=tokenize.COMMENT and
   6.391 +            (spos[1]<=class_spos[1])):
   6.392 +            output("}; // end of class\n",(out_row+1,class_spos[1]))
   6.393 +            pop_state()
   6.394 +        elif (tok=="def"):
   6.395 +            start_recording()
   6.396 +            def_spos = spos
   6.397 +            push_state(BUILD_DEF_DECL)
   6.398 +    # BUILD_DEF_DECL
   6.399 +    elif (state==BUILD_DEF_DECL):
   6.400 +        if (is_recording_finished()):
   6.401 +            param = param.replace("\n", " ")
   6.402 +            param = param.replace("=", " = ")
   6.403 +            params = param.split(",")
   6.404 +            if BUILD_CLASS_BODY in stateStack:
   6.405 +                if len(name) > 1 \
   6.406 +                   and name[0:2] == '__' \
   6.407 +                   and name[len(name)-2:len(name)] != '__' \
   6.408 +                   and protection_level != 'private':
   6.409 +                       private_member = True
   6.410 +                       output("  private:\n",(def_spos[0]+2,def_spos[1]))
   6.411 +
   6.412 +            if (doc_string != ""):
   6.413 +                append_comment_lines(doc_string)
   6.414 +
   6.415 +            print_comment(def_spos)
   6.416 +
   6.417 +            output_function_decl(name, params)
   6.418 +#       output("{\n",(def_spos[0]+1,def_spos[1]))
   6.419 +            set_state(BUILD_DEF_BODY)
   6.420 +    # BUILD_DEF_BODY
   6.421 +    elif (state==BUILD_DEF_BODY):
   6.422 +        if (type!=token.INDENT and type!=token.NEWLINE \
   6.423 +            and type!=40 and type!=tokenize.NL \
   6.424 +            and (spos[1]<=def_spos[1])):
   6.425 +#            output("} // end of method/function\n",(out_row+1,def_spos[1]))
   6.426 +            if private_member and protection_level != 'private':
   6.427 +                private_member = False
   6.428 +                output("  " + protection_level + ":\n",(def_spos[0]+2,def_spos[1]))
   6.429 +            pop_state()
   6.430 +#       else:
   6.431 +#            output(tok,spos)
   6.432 +
   6.433 +
   6.434 +def output_function_decl(name, params):
   6.435 +    global def_spos
   6.436 +
   6.437 +    # Do we document a class method? then remove the 'self' parameter
   6.438 +    if params[0] == 'self':
   6.439 +        preamble = ''
   6.440 +        params = params[1:]
   6.441 +    else:
   6.442 +        preamble = 'static '
   6.443 +        if params[0] == 'cls':
   6.444 +            params = params[1:]
   6.445 +
   6.446 +    param_string = string.join(params, ", Type ")
   6.447 +
   6.448 +    if param_string == '':
   6.449 +        param_string = '(' + param_string + ');\n'
   6.450 +    else:
   6.451 +        param_string = '(Type ' + param_string + ');\n'
   6.452 +
   6.453 +    output(preamble, def_spos)
   6.454 +    output(name, def_spos)
   6.455 +    output(param_string, def_spos)
   6.456 +
   6.457 +
   6.458 +def append_comment_lines(lines):
   6.459 +    map(append_comment_line, doc_string.split('\n'))
   6.460 +
   6.461 +paramRE = re.compile(r'(@param \w+):')
   6.462 +
   6.463 +def append_comment_line(line):
   6.464 +    global paramRE
   6.465 +    
   6.466 +    comment_block.append(paramRE.sub(r'\1', line) + '\n')
   6.467 +
   6.468 +def dump(filename):
   6.469 +    f = open(filename)
   6.470 +    r = f.readlines()
   6.471 +    for s in r:
   6.472 +        sys.stdout.write(s)
   6.473 +
   6.474 +def filter(filename):
   6.475 +    global name, module_has_docstring, source_root
   6.476 +
   6.477 +    path,name = os.path.split(filename)
   6.478 +    root,ext  = os.path.splitext(name)
   6.479 +
   6.480 +    if source_root and path.find(source_root) == 0:
   6.481 +        path = path[len(source_root):]
   6.482 +
   6.483 +        if path[0] == os.sep:
   6.484 +            path = path[1:]
   6.485 +
   6.486 +        ns = path.split(os.sep)
   6.487 +    else:
   6.488 +        ns = []
   6.489 +
   6.490 +    ns.append(root)
   6.491 +
   6.492 +    for n in ns:
   6.493 +        output("namespace " + n + " {\n",(0,0))
   6.494 +
   6.495 +    # set module name for tok_eater to use if there's a module doc string
   6.496 +    name = root
   6.497 +
   6.498 +#    sys.stderr.write('Filtering "'+filename+'"...')
   6.499 +    f = open(filename)
   6.500 +    tokenize.tokenize(f.readline, tok_eater)
   6.501 +    f.close()
   6.502 +    print_comment((0,0))
   6.503 +
   6.504 +    output("\n",(0,0))
   6.505 +    
   6.506 +    for n in ns:
   6.507 +        output("}  // end of namespace\n",(0,0))
   6.508 +
   6.509 +    if not module_has_docstring:
   6.510 +        # Put in default namespace documentation
   6.511 +        output('/** \\namespace '+root+' \n',(0,0))
   6.512 +        output('    \\brief Module "%s" */\n'%(root),(0,0))
   6.513 +
   6.514 +    for s in outbuffer:
   6.515 +        outfile.write(s)
   6.516 +
   6.517 +
   6.518 +def filterFile(filename, out=sys.stdout):
   6.519 +    global outfile
   6.520 +
   6.521 +    outfile = out
   6.522 +
   6.523 +    try:
   6.524 +        root,ext  = os.path.splitext(filename)
   6.525 +
   6.526 +        if ext==".py":
   6.527 +            filter(filename)
   6.528 +        else:
   6.529 +            dump(filename)
   6.530 +
   6.531 +#        sys.stderr.write("OK\n")
   6.532 +    except IOError,e:
   6.533 +        sys.stderr.write(e[1]+"\n")
   6.534 +
   6.535 +
   6.536 +######################################################################
   6.537 +
   6.538 +# preparePath
   6.539 +def preparePath(path):
   6.540 +    """Prepare a path.
   6.541 +
   6.542 +    Checks if the path exists and creates it if it does not exist.
   6.543 +    """
   6.544 +    if not os.path.exists(path):
   6.545 +        parent = os.path.dirname(path)
   6.546 +        if parent!="":
   6.547 +            preparePath(parent)
   6.548 +        os.mkdir(path)
   6.549 +
   6.550 +# isNewer
   6.551 +def isNewer(file1,file2):
   6.552 +    """Check if file1 is newer than file2.
   6.553 +
   6.554 +    file1 must be an existing file.
   6.555 +    """
   6.556 +    if not os.path.exists(file2):
   6.557 +        return True
   6.558 +    return os.stat(file1)[ST_MTIME]>os.stat(file2)[ST_MTIME]
   6.559 +
   6.560 +# convert
   6.561 +def convert(srcpath, destpath):
   6.562 +    """Convert a Python source tree into a C+ stub tree.
   6.563 +
   6.564 +    All *.py files in srcpath (including sub-directories) are filtered
   6.565 +    and written to destpath. If destpath exists, only the files
   6.566 +    that have been modified are filtered again. Files that were deleted
   6.567 +    from srcpath are also deleted in destpath if they are still present.
   6.568 +    The function returns the number of processed *.py files.
   6.569 +    """
   6.570 +    count=0
   6.571 +    sp = os.path.join(srcpath,"*")
   6.572 +    sfiles = glob.glob(sp)
   6.573 +    dp = os.path.join(destpath,"*")
   6.574 +    dfiles = glob.glob(dp)
   6.575 +    leftovers={}
   6.576 +    for df in dfiles:
   6.577 +        leftovers[os.path.basename(df)]=1
   6.578 +
   6.579 +    for srcfile in sfiles:
   6.580 +        basename = os.path.basename(srcfile)
   6.581 +        if basename in leftovers:
   6.582 +            del leftovers[basename]
   6.583 +
   6.584 +        # Is it a subdirectory?
   6.585 +        if os.path.isdir(srcfile):
   6.586 +            sdir = os.path.join(srcpath,basename)
   6.587 +            ddir = os.path.join(destpath,basename)
   6.588 +            count+=convert(sdir, ddir)
   6.589 +            continue
   6.590 +        # Check the extension (only *.py will be converted)
   6.591 +        root, ext = os.path.splitext(srcfile)
   6.592 +        if ext.lower()!=".py":
   6.593 +            continue
   6.594 +
   6.595 +        destfile = os.path.join(destpath,basename)
   6.596 +        if destfile==srcfile:
   6.597 +            print "WARNING: Input and output names are identical!"
   6.598 +            sys.exit(1)
   6.599 +
   6.600 +        count+=1
   6.601 +#        sys.stdout.write("%s\015"%(srcfile))
   6.602 +
   6.603 +        if isNewer(srcfile, destfile):
   6.604 +            preparePath(os.path.dirname(destfile))
   6.605 +#            out=open(destfile,"w")
   6.606 +#            filterFile(srcfile, out)
   6.607 +#            out.close()
   6.608 +            os.system("python %s -f %s>%s"%(sys.argv[0],srcfile,destfile))
   6.609 +
   6.610 +    # Delete obsolete files in destpath
   6.611 +    for df in leftovers:
   6.612 +        dname=os.path.join(destpath,df)
   6.613 +        if os.path.isdir(dname):
   6.614 +            try:
   6.615 +                shutil.rmtree(dname)
   6.616 +            except:
   6.617 +                print "Can't remove obsolete directory '%s'"%dname
   6.618 +        else:
   6.619 +            try:
   6.620 +                os.remove(dname)
   6.621 +            except:
   6.622 +                print "Can't remove obsolete file '%s'"%dname
   6.623 +
   6.624 +    return count
   6.625 +
   6.626 +
   6.627 +######################################################################
   6.628 +######################################################################
   6.629 +######################################################################
   6.630 +
   6.631 +filter_file = False
   6.632 +source_root = None
   6.633 +
   6.634 +try:
   6.635 +    opts, args = getopt.getopt(sys.argv[1:], "hfr:", ["help"])
   6.636 +except getopt.GetoptError,e:
   6.637 +    print e
   6.638 +    sys.exit(1)
   6.639 +
   6.640 +for o,a in opts:
   6.641 +    if o=="-f":
   6.642 +        filter_file = True
   6.643 +
   6.644 +    if o=="-r":
   6.645 +        source_root = os.path.abspath(a)
   6.646 +
   6.647 +if filter_file:
   6.648 +    # Filter the specified file and print the result to stdout
   6.649 +    filename = string.join(args)
   6.650 +    filterFile(os.path.abspath(filename))
   6.651 +else:
   6.652 +
   6.653 +    if len(args)!=2:
   6.654 +        sys.stderr.write("%s options input output\n"%(os.path.basename(sys.argv[0])))
   6.655 +        sys.exit(1)
   6.656 +
   6.657 +    # Filter an entire Python source tree
   6.658 +    print '"%s" -> "%s"\n'%(args[0],args[1])
   6.659 +    c=convert(args[0],args[1])
   6.660 +    print "%d files"%(c)
   6.661 +
     7.1 --- a/tools/python/Makefile	Tue Sep 13 10:49:04 2005 +0000
     7.2 +++ b/tools/python/Makefile	Tue Sep 13 15:05:49 2005 +0000
     7.3 @@ -1,7 +1,8 @@
     7.4 -
     7.5  XEN_ROOT = ../..
     7.6  include $(XEN_ROOT)/tools/Rules.mk
     7.7  
     7.8 +.PHONY: all build install clean
     7.9 +
    7.10  all: build
    7.11  build:
    7.12  	CFLAGS="$(CFLAGS)" python setup.py build
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/tools/python/pylintrc	Tue Sep 13 15:05:49 2005 +0000
     8.3 @@ -0,0 +1,307 @@
     8.4 +# lint Python modules using external checkers.                            
     8.5 +#                                                                                
     8.6 +#     This is the main checker controling the other ones and the reports         
     8.7 +#     generation. It is itself both a raw checker and an astng checker in order  
     8.8 +#     to:                                                                        
     8.9 +#     * handle message activation / deactivation at the module level             
    8.10 +#     * handle some basic but necessary stats'data (number of classes, methods...)
    8.11 +#                                                                                 
    8.12 +# This checker also defines the following reports:                                    
    8.13 +#   * R0001: Total errors / warnings                                              
    8.14 +#   * R0002: % errors / warnings by module                                        
    8.15 +#   * R0003: Messages                                                             
    8.16 +#   * R0004: Global evaluation                                                    
    8.17 +# 
    8.18 +[MASTER]
    8.19 +# Add <file or directory> to the black list. It should be a base name, not a
    8.20 +# path. You may set this option multiple times.
    8.21 +ignore=CVS
    8.22 +
    8.23 +# Pickle collected data for later comparisons.
    8.24 +persistent=yes
    8.25 +
    8.26 +# Set the cache size for astng objects.
    8.27 +cache-size=500
    8.28 +
    8.29 +
    8.30 +
    8.31 +[REPORTS]
    8.32 +# Tells wether to display a full report or only the messages
    8.33 +reports=yes
    8.34 +
    8.35 +# Use HTML as output format instead of text
    8.36 +html=no
    8.37 +
    8.38 +# Use a parseable text output format, so your favorite text editor will be able
    8.39 +# to jump to the line corresponding to a message.
    8.40 +parseable=no
    8.41 +
    8.42 +# Colorizes text output using ansi escape codes
    8.43 +color=no
    8.44 +
    8.45 +# Put messages in a separate file for each module / package specified on the
    8.46 +# command line instead of printing them on stdout. Reports (if any) will be
    8.47 +# written in a file name "pylint_global.[txt|html]".
    8.48 +files-output=no
    8.49 +
    8.50 +# Python expression which should return a note less than 10 (10 is the highest
    8.51 +# note).You have access to the variables errors warning, statement which
    8.52 +# respectivly contain the number of errors / warnings messages and the total
    8.53 +# number of statements analyzed. This is used by the global evaluation report
    8.54 +# (R0004).
    8.55 +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
    8.56 +
    8.57 +# Add a comment according to your evaluation note. This is used by the global
    8.58 +# evaluation report (R0004).
    8.59 +comment=no
    8.60 +
    8.61 +# Include message's id in output
    8.62 +include-ids=yes
    8.63 +
    8.64 +
    8.65 +
    8.66 +# checks for                                                              
    8.67 +#     * unused variables / imports                                               
    8.68 +#     * undefined variables                                                      
    8.69 +#     * redefinition of variable from builtins or from an outer scope            
    8.70 +#     * use of variable before assigment                                         
    8.71 +#     
    8.72 +[VARIABLES]
    8.73 +# Enable / disable this checker
    8.74 +enable-variables=yes
    8.75 +
    8.76 +# Tells wether we should check for unused import in __init__ files.
    8.77 +init-import=no
    8.78 +
    8.79 +# List of variable names used for dummy variables (i.e. not used).
    8.80 +dummy-variables=_,dummy
    8.81 +
    8.82 +
    8.83 +
    8.84 +# checks for :                                                            
    8.85 +#     * doc strings                                                              
    8.86 +#     * modules / classes / functions / methods / arguments / variables name     
    8.87 +#     * number of arguments, local variables, branchs, returns and statements in
    8.88 +# functions, methods                                                       
    8.89 +#     * required module attributes                                             
    8.90 +#     * dangerous default values as arguments                                    
    8.91 +#     * redefinition of function / method / class                                
    8.92 +#     * uses of the global statement                                             
    8.93 +#                                                                                 
    8.94 +# This checker also defines the following reports:                                    
    8.95 +#   * R0101: Statistics by type                                                   
    8.96 +# 
    8.97 +[BASIC]
    8.98 +# Enable / disable this checker
    8.99 +enable-basic=yes
   8.100 +
   8.101 +# Required attributes for module, separated by a comma
   8.102 +required-attributes=
   8.103 +
   8.104 +# Regular expression which should only match functions or classes name which do
   8.105 +# not require a docstring
   8.106 +no-docstring-rgx=.*
   8.107 +
   8.108 +# Minimal length for module / class / function / method / argument / variable
   8.109 +# names
   8.110 +min-name-length=1
   8.111 +
   8.112 +# Regular expression which should only match correct module names
   8.113 +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
   8.114 +
   8.115 +# Regular expression which should only match correct class names
   8.116 +class-rgx=[A-Z_][a-zA-Z0-9]+$
   8.117 +
   8.118 +# Regular expression which should only match correct function names
   8.119 +function-rgx=[a-z_][A-Za-z0-9_]*$
   8.120 +
   8.121 +# Regular expression which should only match correct method names
   8.122 +method-rgx=[a-z_][A-Za-z0-9_]*$
   8.123 +
   8.124 +# Regular expression which should only match correct argument names
   8.125 +argument-rgx=[a-z_][A-Za-z0-9_]*$
   8.126 +
   8.127 +# Regular expression which should only match correct variable names
   8.128 +variable-rgx=[a-z_][A-Za-z0-9_]*$
   8.129 +
   8.130 +# Good variable names which should always be accepted, separated by a comma
   8.131 +good-names=i,j,k,ex,Run,_
   8.132 +
   8.133 +# Bad variable names which should always be refused, separated by a comma
   8.134 +bad-names=foo,bar,baz,toto,tutu,tata
   8.135 +
   8.136 +# List of builtins function names that should not be used, separated by a comma
   8.137 +bad-functions=map,filter,apply,input
   8.138 +
   8.139 +
   8.140 +
   8.141 +# checks for sign of poor/misdesign:                                      
   8.142 +#     * number of methods, attributes, local variables...                        
   8.143 +#     * size, complexity of functions, methods                                   
   8.144 +#     
   8.145 +[DESIGN]
   8.146 +# Enable / disable this checker
   8.147 +enable-design=yes
   8.148 +
   8.149 +# Maximum number of arguments for function / method
   8.150 +max-args=15
   8.151 +
   8.152 +# Maximum number of locals for function / method body
   8.153 +max-locals=15
   8.154 +
   8.155 +# Maximum number of return / yield for function / method body
   8.156 +max-returns=6
   8.157 +
   8.158 +# Maximum number of branch for function / method body
   8.159 +max-branchs=12
   8.160 +
   8.161 +# Maximum number of statements in function / method body
   8.162 +max-statements=50
   8.163 +
   8.164 +# Maximum number of parents for a class (see R0901).
   8.165 +max-parents=7
   8.166 +
   8.167 +# Maximum number of attributes for a class (see R0902).
   8.168 +max-attributes=7
   8.169 +
   8.170 +# Minimum number of public methods for a class (see R0903).
   8.171 +min-public-methods=2
   8.172 +
   8.173 +# Maximum number of public methods for a class (see R0904).
   8.174 +max-public-methods=20
   8.175 +
   8.176 +
   8.177 +
   8.178 +# checks for :                                                            
   8.179 +#     * methods without self as first argument                                   
   8.180 +#     * overriden methods signature                                              
   8.181 +#     * access only to existant members via self                                 
   8.182 +#     * attributes not defined in the __init__ method                            
   8.183 +#     * supported interfaces implementation                                      
   8.184 +#     * unreachable code                                                         
   8.185 +#     
   8.186 +[CLASSES]
   8.187 +# Enable / disable this checker
   8.188 +enable-classes=yes
   8.189 +
   8.190 +# List of interface methods to ignore, separated by a comma. This is used for
   8.191 +# instance to not check methods defines in Zope's Interface base class.
   8.192 +ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
   8.193 +
   8.194 +# Tells wether missing members accessed in mixin class should be ignored. A
   8.195 +# mixin class is detected if its name ends with "mixin" (case insensitive).
   8.196 +ignore-mixin-members=yes
   8.197 +
   8.198 +
   8.199 +
   8.200 +# checks for                                                              
   8.201 +#     * external modules dependencies                                            
   8.202 +#     * relative / wildcard imports                                                         
   8.203 +#     * cyclic imports                                                           
   8.204 +#     * uses of deprecated modules
   8.205 +#                                                                                 
   8.206 +# This checker also defines the following reports:                                    
   8.207 +#   * R0401: External dependencies                                                
   8.208 +#   * R0402: Modules dependencies graph                                           
   8.209 +# 
   8.210 +[IMPORTS]
   8.211 +# Enable / disable this checker
   8.212 +enable-imports=no
   8.213 +
   8.214 +# Deprecated modules which should not be used, separated by a comma
   8.215 +deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
   8.216 +
   8.217 +# Create a graph of every (i.e. internal and external) dependencies in the given
   8.218 +# file (report R0402 must not be disabled)
   8.219 +import-graph=
   8.220 +
   8.221 +# Create a graph of external dependencies in the given file (report R0402 must
   8.222 +# not be disabled)
   8.223 +ext-import-graph=
   8.224 +
   8.225 +# Create a graph of internal dependencies in the given file (report R0402 must
   8.226 +# not be disabled)
   8.227 +int-import-graph=
   8.228 +
   8.229 +
   8.230 +
   8.231 +# checks for                                                              
   8.232 +#     * excepts without exception filter                                         
   8.233 +#     * string exceptions                                                        
   8.234 +#     
   8.235 +[EXCEPTIONS]
   8.236 +# Enable / disable this checker
   8.237 +enable-exceptions=yes
   8.238 +
   8.239 +
   8.240 +
   8.241 +# checks for :                                                            
   8.242 +#     * unauthorized constructions                                               
   8.243 +#     * strict indentation                                                       
   8.244 +#     * line length                                                              
   8.245 +#     * use of <> instead of !=
   8.246 +#     
   8.247 +[FORMAT]
   8.248 +# Enable / disable this checker
   8.249 +enable-format=no
   8.250 +
   8.251 +# Maximum number of characters on a single line.
   8.252 +max-line-length=80
   8.253 +
   8.254 +# Maximum number of lines in a module
   8.255 +max-module-lines=1000
   8.256 +
   8.257 +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 tab).
   8.258 +indent-string='    '
   8.259 +
   8.260 +
   8.261 +
   8.262 +# does not check anything but gives some raw metrics :                    
   8.263 +#     * total number of lines                                                    
   8.264 +#     * total number of code lines                                               
   8.265 +#     * total number of docstring lines                                          
   8.266 +#     * total number of comments lines                                           
   8.267 +#     * total number of empty lines                                              
   8.268 +#                                                                                 
   8.269 +# This checker also defines the following reports:                                    
   8.270 +#   * R0701: Raw metrics                                                          
   8.271 +# 
   8.272 +[METRICS]
   8.273 +# Enable / disable this checker
   8.274 +enable-metrics=yes
   8.275 +
   8.276 +
   8.277 +
   8.278 +# checks for:                                                             
   8.279 +#     * warning notes in the code like FIXME, XXX                                
   8.280 +#     * PEP 263: source code with non ascii character but no encoding declaration
   8.281 +#     
   8.282 +[MISCELLANEOUS]
   8.283 +# Enable / disable this checker
   8.284 +enable-miscellaneous=yes
   8.285 +
   8.286 +# List of note tags to take in consideration, separated by a comma. Default to
   8.287 +# FIXME, XXX, TODO
   8.288 +notes=FIXME,XXX,TODO
   8.289 +
   8.290 +
   8.291 +
   8.292 +# checks for similarities and duplicated code. This computation may be
   8.293 +#     memory / CPU intensive, so you should disable it if you experiments some
   8.294 +#     problems.
   8.295 +#                                                                                 
   8.296 +# This checker also defines the following reports:                                    
   8.297 +#   * R0801: Duplication                                                          
   8.298 +# 
   8.299 +[SIMILARITIES]
   8.300 +# Enable / disable this checker
   8.301 +enable-similarities=yes
   8.302 +
   8.303 +# Minimum lines number of a similarity.
   8.304 +min-similarity-lines=4
   8.305 +
   8.306 +# Ignore comments when computing similarities.
   8.307 +ignore-comments=yes
   8.308 +
   8.309 +
   8.310 +
     9.1 --- a/tools/python/xen/sv/DomInfo.py	Tue Sep 13 10:49:04 2005 +0000
     9.2 +++ b/tools/python/xen/sv/DomInfo.py	Tue Sep 13 15:05:49 2005 +0000
     9.3 @@ -75,7 +75,7 @@ class DomGeneralTab( CompositeTab ):
     9.4         
     9.5  class DomGenTab( GeneralTab ):
     9.6  
     9.7 -    def __init__( self, urlWriter ):
     9.8 +    def __init__( self, _ ):
     9.9      
    9.10          titles = {}
    9.11      
    9.12 @@ -103,7 +103,7 @@ class DomGenTab( GeneralTab ):
    9.13              
    9.14  class DomSXPTab( PreTab ):
    9.15  
    9.16 -    def __init__( self, urlWriter ):
    9.17 +    def __init__( self, _ ):
    9.18          self.dom = 0
    9.19          PreTab.__init__( self, "" )
    9.20  
    9.21 @@ -126,7 +126,7 @@ class DomSXPTab( PreTab ):
    9.22         
    9.23  class DomActionTab( ActionTab ):
    9.24  
    9.25 -    def __init__( self, urlWriter ):
    9.26 +    def __init__( self, _ ):
    9.27      	actions = { "shutdown" : "Shutdown",
    9.28          	    "reboot" : "Reboot",
    9.29                      "pause" : "Pause",
    9.30 @@ -188,19 +188,19 @@ class DomDeviceListTab( NullTab ):
    9.31  
    9.32      title = "Device List"
    9.33  
    9.34 -    def __init__( self, urlWriter ):
    9.35 +    def __init__( self, _ ):
    9.36          pass
    9.37  
    9.38  class DomDeviceOptionsTab( NullTab ):
    9.39  
    9.40      title = "Device Options"
    9.41  
    9.42 -    def __init__( self, urlWriter ):
    9.43 +    def __init__( self, _ ):
    9.44          pass
    9.45  
    9.46  class DomDeviceActionTab( ActionTab ):
    9.47  
    9.48 -    def __init__( self, urlWriter ):
    9.49 +    def __init__( self, _ ):
    9.50          ActionTab.__init__( self, { "addvcpu" : "Add VCPU", "addvbd" : "Add VBD", "addvif" : "Add VIF" } )
    9.51  
    9.52  class DomMigrateTab( CompositeTab ):
    9.53 @@ -218,7 +218,7 @@ class DomMigrateExtraTab( Sheet ):
    9.54                                                                                                              
    9.55  class DomMigrateActionTab( ActionTab ):
    9.56  
    9.57 -    def __init__( self, urlWriter ):
    9.58 +    def __init__( self, _ ):
    9.59          actions = { "migrate" : "Migrate" }
    9.60          ActionTab.__init__( self, actions )
    9.61                  
    9.62 @@ -249,7 +249,7 @@ class DomSaveExtraTab( Sheet ):
    9.63                 
    9.64  class DomSaveActionTab( ActionTab ):
    9.65  
    9.66 -    def __init__( self, urlWriter ):
    9.67 +    def __init__( self, _ ):
    9.68          actions = { "save" : "Save" }
    9.69          ActionTab.__init__( self, actions )
    9.70  
    10.1 --- a/tools/python/xen/xend/XendDomainInfo.py	Tue Sep 13 10:49:04 2005 +0000
    10.2 +++ b/tools/python/xen/xend/XendDomainInfo.py	Tue Sep 13 15:05:49 2005 +0000
    10.3 @@ -102,34 +102,6 @@ def shutdown_reason(code):
    10.4      """
    10.5      return shutdown_reasons.get(code, "?")
    10.6  
    10.7 -config_handlers = {}
    10.8 -
    10.9 -def add_config_handler(name, h):
   10.10 -    """Add a handler for a config field.
   10.11 -
   10.12 -    @param name:     field name
   10.13 -    @param h:        handler: fn(vm, config, field, index)
   10.14 -    """
   10.15 -    config_handlers[name] = h
   10.16 -
   10.17 -def get_config_handler(name):
   10.18 -    """Get a handler for a config field.
   10.19 -
   10.20 -    returns handler or None
   10.21 -    """
   10.22 -    return config_handlers.get(name)
   10.23 -
   10.24 -"""Table of handlers for devices.
   10.25 -Indexed by device type.
   10.26 -"""
   10.27 -device_handlers = {}
   10.28 -
   10.29 -def add_device_handler(name, type):
   10.30 -    device_handlers[name] = type
   10.31 -
   10.32 -def get_device_handler(name):
   10.33 -    return device_handlers[name]
   10.34 -
   10.35  def dom_get(dom):
   10.36      """Get info from xen for an existing domain.
   10.37  
   10.38 @@ -369,12 +341,6 @@ class XendDomainInfo:
   10.39  
   10.40      __repr__ = __str__
   10.41  
   10.42 -    def getDeviceTypes(self):
   10.43 -        return self.controllers.keys()
   10.44 -
   10.45 -    def getDeviceControllers(self):
   10.46 -        return self.controllers.values()
   10.47 -
   10.48      def getDeviceController(self, type, error=True):
   10.49          ctrl = self.controllers.get(type)
   10.50          if not ctrl and error:
   10.51 @@ -583,7 +549,7 @@ class XendDomainInfo:
   10.52  
   10.53      def sxpr_devices(self):
   10.54          sxpr = []
   10.55 -        for ty in self.getDeviceTypes():
   10.56 +        for ty in self.controllers.keys():
   10.57              devs = self.getDeviceSxprs(ty)
   10.58              sxpr += devs
   10.59          if sxpr:
   10.60 @@ -784,7 +750,7 @@ class XendDomainInfo:
   10.61          """Release all vm devices.
   10.62          """
   10.63          reboot = self.restart_pending()
   10.64 -        for ctrl in self.getDeviceControllers():
   10.65 +        for ctrl in self.controllers.values():
   10.66              if ctrl.isDestroyed(): continue
   10.67              ctrl.destroyController(reboot=reboot)
   10.68          t = xstransact("%s/device" % self.path)
   10.69 @@ -851,6 +817,7 @@ class XendDomainInfo:
   10.70          self.store_channel = self.eventChannelOld("store_channel")
   10.71          self.console_channel = self.eventChannel("console", "port")
   10.72  
   10.73 +
   10.74      def create_configured_devices(self):
   10.75          devices = sxp.children(self.config, 'device')
   10.76          for d in devices:
   10.77 @@ -858,18 +825,20 @@ class XendDomainInfo:
   10.78              if dev_config is None:
   10.79                  raise VmError('invalid device')
   10.80              dev_type = sxp.name(dev_config)
   10.81 -            ctrl_type = get_device_handler(dev_type)
   10.82 -            if ctrl_type is None:
   10.83 +
   10.84 +            if not controller.isDevControllerClass(dev_type):
   10.85                  raise VmError('unknown device type: ' + dev_type)
   10.86 -            self.createDevice(ctrl_type, dev_config)
   10.87 -        
   10.88 +            
   10.89 +            self.createDevice(dev_type, dev_config)
   10.90 +
   10.91 +
   10.92      def create_devices(self):
   10.93          """Create the devices for a vm.
   10.94  
   10.95          @raise: VmError for invalid devices
   10.96          """
   10.97          if self.rebooting():
   10.98 -            for ctrl in self.getDeviceControllers():
   10.99 +            for ctrl in self.controllers.values():
  10.100                  ctrl.initController(reboot=True)
  10.101          else:
  10.102              self.create_configured_devices()
  10.103 @@ -1020,7 +989,7 @@ class XendDomainInfo:
  10.104              msg = "Had a bootloader specified, but can't find disk"
  10.105              log.error(msg)
  10.106              raise VmError(msg)
  10.107 -        config = sxp.merge(['vm', blconfig ], self.config)
  10.108 +        config = sxp.merge(['vm', blcfg ], self.config)
  10.109          return config
  10.110  
  10.111      def configure_backends(self):
  10.112 @@ -1069,7 +1038,7 @@ class XendDomainInfo:
  10.113          for field in sxp.children(self.config):
  10.114              field_name = sxp.name(field)
  10.115              field_index = index.get(field_name, 0)
  10.116 -            field_handler = get_config_handler(field_name)
  10.117 +            field_handler = config_handlers.get(field_name)
  10.118              # Ignore unknown fields. Warn?
  10.119              if field_handler:
  10.120                  v = field_handler(self, self.config, field, field_index)
  10.121 @@ -1138,23 +1107,17 @@ class XendDomainInfo:
  10.122          # get run-time value of vcpus and update store
  10.123          self.exportVCPUSToDB(dom_get(self.id)['vcpus'])
  10.124  
  10.125 -def vm_field_ignore(vm, config, val, index):
  10.126 -    """Dummy config field handler used for fields with built-in handling.
  10.127  
  10.128 -    @param vm:        virtual machine
  10.129 -    @param config:    vm config
  10.130 -    @param val:       config field
  10.131 -    @param index:     field index
  10.132 +def vm_field_ignore(_, _1, _2, _3):
  10.133 +    """Dummy config field handler used for fields with built-in handling.
  10.134 +    Matches the signature required by config_handlers.
  10.135      """
  10.136      pass
  10.137  
  10.138 -def vm_field_maxmem(vm, config, val, index):
  10.139 -    """Configure vm memory limit.
  10.140  
  10.141 -    @param vm:        virtual machine
  10.142 -    @param config:    vm config
  10.143 -    @param val:       config field
  10.144 -    @param index:     field index
  10.145 +def vm_field_maxmem(vm, _1, val, _2):
  10.146 +    """Config field handler to configure vm memory limit.  Matches the
  10.147 +    signature required by config_handlers.
  10.148      """
  10.149      maxmem = sxp.child0(val)
  10.150      if maxmem is None:
  10.151 @@ -1165,8 +1128,10 @@ def vm_field_maxmem(vm, config, val, ind
  10.152          raise VmError("invalid maxmem: " + str(maxmem))
  10.153      xc.domain_setmaxmem(vm.id, maxmem_kb = maxmem * 1024)
  10.154  
  10.155 +
  10.156  #============================================================================
  10.157  # Register image handlers.
  10.158 +
  10.159  from image import          \
  10.160       addImageHandlerClass, \
  10.161       ImageHandler,         \
  10.162 @@ -1176,43 +1141,37 @@ from image import          \
  10.163  addImageHandlerClass(LinuxImageHandler)
  10.164  addImageHandlerClass(VmxImageHandler)
  10.165  
  10.166 -# Ignore the fields we already handle.
  10.167 -add_config_handler('name',       vm_field_ignore)
  10.168 -add_config_handler('memory',     vm_field_ignore)
  10.169 -add_config_handler('ssidref',    vm_field_ignore)
  10.170 -add_config_handler('cpu',        vm_field_ignore)
  10.171 -add_config_handler('cpu_weight', vm_field_ignore)
  10.172 -add_config_handler('restart',    vm_field_ignore)
  10.173 -add_config_handler('image',      vm_field_ignore)
  10.174 -add_config_handler('device',     vm_field_ignore)
  10.175 -add_config_handler('backend',    vm_field_ignore)
  10.176 -add_config_handler('vcpus',      vm_field_ignore)
  10.177 -add_config_handler('bootloader', vm_field_ignore)
  10.178  
  10.179 -# Register other config handlers.
  10.180 -add_config_handler('maxmem',     vm_field_maxmem)
  10.181 +"""Table of handlers for field configuration.
  10.182 +
  10.183 +field_name[String]: fn(vm, config, field, index) -> value(ignored)
  10.184 +"""
  10.185 +config_handlers = {
  10.186 +    
  10.187 +    # Ignore the fields we already handle.
  10.188 +    
  10.189 +    'name':       vm_field_ignore,
  10.190 +    'memory':     vm_field_ignore,
  10.191 +    'ssidref':    vm_field_ignore,
  10.192 +    'cpu':        vm_field_ignore,
  10.193 +    'cpu_weight': vm_field_ignore,
  10.194 +    'restart':    vm_field_ignore,
  10.195 +    'image':      vm_field_ignore,
  10.196 +    'device':     vm_field_ignore,
  10.197 +    'backend':    vm_field_ignore,
  10.198 +    'vcpus':      vm_field_ignore,
  10.199 +    'bootloader': vm_field_ignore,
  10.200 +    
  10.201 +    # Register other config handlers.
  10.202 +    'maxmem':     vm_field_maxmem
  10.203 +    }
  10.204 +
  10.205  
  10.206  #============================================================================
  10.207  # Register device controllers and their device config types.
  10.208  
  10.209 -from server import blkif
  10.210 -controller.addDevControllerClass("vbd", blkif.BlkifController)
  10.211 -add_device_handler("vbd", "vbd")
  10.212 -
  10.213 -from server import netif
  10.214 -controller.addDevControllerClass("vif", netif.NetifController)
  10.215 -add_device_handler("vif", "vif")
  10.216 -
  10.217 -from server import tpmif
  10.218 -controller.addDevControllerClass("vtpm", tpmif.TPMifController)
  10.219 -add_device_handler("vtpm", "vtpm")
  10.220 -
  10.221 -from server import pciif
  10.222 -controller.addDevControllerClass("pci", pciif.PciController)
  10.223 -add_device_handler("pci", "pci")
  10.224 -
  10.225 -from xen.xend.server import usbif
  10.226 -controller.addDevControllerClass("usb", usbif.UsbifController)
  10.227 -add_device_handler("usb", "usb")
  10.228 -
  10.229 -#============================================================================
  10.230 +controller.addDevControllerClass("vbd",  server.blkif.BlkifController)
  10.231 +controller.addDevControllerClass("vif",  server.netif.NetifController)
  10.232 +controller.addDevControllerClass("vtpm", server.tpmif.TPMifController)
  10.233 +controller.addDevControllerClass("pci",  server.pciif.PciController)
  10.234 +controller.addDevControllerClass("usb",  server.usbif.UsbifController)
    11.1 --- a/tools/python/xen/xend/XendVnet.py	Tue Sep 13 10:49:04 2005 +0000
    11.2 +++ b/tools/python/xen/xend/XendVnet.py	Tue Sep 13 15:05:49 2005 +0000
    11.3 @@ -145,7 +145,7 @@ class XendVnet:
    11.4      def vnet_get(self, id):
    11.5          """Get a vnet.
    11.6  
    11.7 -        @param id: vnet id
    11.8 +        @param id vnet id
    11.9          """
   11.10          id = str(id)
   11.11          return self.vnet.get(id)
    12.1 --- a/tools/python/xen/xend/scheduler.py	Tue Sep 13 10:49:04 2005 +0000
    12.2 +++ b/tools/python/xen/xend/scheduler.py	Tue Sep 13 15:05:49 2005 +0000
    12.3 @@ -20,8 +20,8 @@ import threading
    12.4  def later(delay, fn, args=(), kwargs={}):
    12.5      """Schedule a function to be called later.
    12.6  
    12.7 -    @param _delay: delay in seconds
    12.8 -    @param _fn:    function
    12.9 +    @param delay:  delay in seconds
   12.10 +    @param fn:     function
   12.11      @param args:   arguments (list)
   12.12      @param kwargs  keyword arguments (map)
   12.13      """
   12.14 @@ -32,7 +32,7 @@ def later(delay, fn, args=(), kwargs={})
   12.15  def now(fn, args=(), kwargs={}):
   12.16      """Schedule a function to be called now.
   12.17  
   12.18 -    @param _fn:    function
   12.19 +    @param fn:     function
   12.20      @param args:   arguments (list)
   12.21      @param kwargs  keyword arguments (map)
   12.22      """
    13.1 --- a/tools/python/xen/xend/server/controller.py	Tue Sep 13 10:49:04 2005 +0000
    13.2 +++ b/tools/python/xen/xend/server/controller.py	Tue Sep 13 15:05:49 2005 +0000
    13.3 @@ -63,6 +63,13 @@ def addDevControllerClass(name, cls):
    13.4      cls.type = name
    13.5      getDevControllerTable().addDevControllerClass(cls)
    13.6  
    13.7 +
    13.8 +def isDevControllerClass(name):
    13.9 +    """@return True if a device controller class has been registered with
   13.10 +    the controller table under the given name."""
   13.11 +    return name in getDevControllerTable().controllerClasses
   13.12 +
   13.13 +
   13.14  def createDevController(name, vm, recreate=False):
   13.15      return getDevControllerTable().createDevController(name, vm, recreate=recreate)
   13.16  
    14.1 --- a/tools/xenstore/xenstore_client.c	Tue Sep 13 10:49:04 2005 +0000
    14.2 +++ b/tools/xenstore/xenstore_client.c	Tue Sep 13 15:05:49 2005 +0000
    14.3 @@ -76,7 +76,7 @@ main(int argc, char **argv)
    14.4  	/* NOTREACHED */
    14.5      }
    14.6  #if defined(CLIENT_write)
    14.7 -    if ((argc - optind) % 1) {
    14.8 +    if ((argc - optind) % 2 == 1) {
    14.9  	usage(argv[0]);
   14.10  	/* NOTREACHED */
   14.11      }