+proc wgendoc {workBench {outDir {}} {modules {}} {createChmHelp NO} {hhcLocation ""} {doxygenPath ""} {graphvizPath ""}} {
+ global env
+
+ if {$workBench == "-help" || $workBench == "-he"} {
+ puts "Command wgendoc allow you to generate Doxygen documentation"
+ puts ""
+ puts "wgendoc {workBench} {outDir} {modules} {createChmHelp} {hhcLocation} {doxygenPath} {graphvizPath}"
+ puts "Parameters:"
+ puts " workBench - name of your OCCT workbench"
+ puts " outDir - documentation output directory"
+ puts " modules - list of OCCT modules, which documentation will be generated"
+ puts " createChmHelp - if \"YES\", with HTML files will be generated a CHM documentation file. Default value is \"NO\"."
+ puts " hhcLocation - if createChmHelp is \"YES\", then you must say, where is HTML Help Workshop directory (which contain file hhc.exe)"
+ puts " doxygenPath - you can say doxygen.exe directory (if you have latest version of Doxygen). It is optional parameter."
+ puts " graphvizPath - you can say dot.exe directory (if you have latest version of GraphViz). It is optional parameter."
+ return
+ }
+
+ if { "$doxygenPath" == "" } { set doxygenPath "$env(WOKHOME)/3rdparty/win32/utils" }
+ if { "$graphvizPath" == "" } { set graphvizPath "$env(WOKHOME)/3rdparty/win32/utils" }
+
+ wokcd $workBench
+ OS -box
+ OCCDoc_GenerateDoc $outDir $modules $createChmHelp $hhcLocation $doxygenPath $graphvizPath {} {}
+}
+
# general procedure for generation Doxygen documentation
# it launches both generation process and post process
-proc OCCDoc_GenerateDoc {outDir {modules {}} {doxygenPath {}} {graphvizPath {}} {useSearch YES} {tagFiles {}}} {
- catch {exec $doxygenPath/doxygen [OCCDoc_MakeDoxyfile $outDir $modules $graphvizPath]}
+proc OCCDoc_GenerateDoc {outDir {modules {}} {createChmHelp NO} {hhcLocation {}} {doxygenPath {}} {graphvizPath {}} {useSearch YES} {tagFiles {}}} {
+ catch {exec $doxygenPath/doxygen [OCCDoc_MakeDoxyfile $outDir $modules $createChmHelp $hhcLocation $graphvizPath]}
OCCDoc_PostProcessor $outDir
}
# generate Doxygen configuration file for specified OCCT module of toolkit
-proc OCCDoc_MakeDoxyfile {outDir {modules {}} {graphvizPath {}} {useSearch YES} {tagFiles {}}} {
+proc OCCDoc_MakeDoxyfile {outDir {modules {}} {createChmHelp NO} {hhcLocation {}} {graphvizPath {}} {useSearch YES} {tagFiles {}}} {
# by default take all modules
if { [llength $modules] <= 0 } {
# create target directory
if { ! [file exists $outDir] } {
- mkdir $outDir
+ file mkdir $outDir
}
-
+
+ if { ! [file exists $outDir/html] } {
+ file mkdir $outDir/html
+ }
+
# set context
set one_module [expr [llength $modules] == 1]
if { $one_module } {
puts $fileid "HIDE_FRIEND_COMPOUNDS = YES"
puts $fileid "HIDE_UNDOC_MEMBERS = NO"
puts $fileid "INLINE_INFO = YES"
- puts $fileid "SHOW_DIRECTORIES = NO"
puts $fileid "VERBATIM_HEADERS = NO"
puts $fileid "QUIET = YES"
puts $fileid "WARNINGS = NO"
puts $fileid "GENERATE_TAGFILE = ${path_prefix}${name}.tag"
puts $fileid "ALLEXTERNALS = NO"
puts $fileid "EXTERNAL_GROUPS = NO"
+
+ #chm help file
+ if { $createChmHelp } {
+ append hhcLocation "/hhc.exe"
+ if { [file exists $hhcLocation] } {
+ puts $fileid "GENERATE_HTMLHELP = YES"
+ puts $fileid "CHM_FILE = ../${name}HTMLHelp.CHM"
+ puts $fileid "HHC_LOCATION = \"$hhcLocation\""
+ } else {
+ puts "Can't find $hhcLocation/hhc.exe"
+ }
+ }
# add tag files for OCCT modules (except current one and depending);
# this is based on file Modules.tcl in unit "OS" which defines list of modules
set graphvizPath $env(GRAPHVIZ_HOME)
}
if { "$graphvizPath" != "" } {
- puts $fileid "HAVE_DOT = YES"
- puts $fileid "DOT_PATH = $graphvizPath"
+ puts $fileid "HAVE_DOT = YES"
+ puts $fileid "DOT_PATH = $graphvizPath"
+ #puts $fileid "CLASS_DIAGRAMS = YES"
+ #puts $fileid "HIDE_UNDOC_RELATIONS = YES"
+ #puts $fileid "TEMPLATE_RELATIONS = NO"
+ #puts $fileid "GRAPHICAL_HIERARCHY = YES"
+ #puts $fileid "DIRECTORY_GRAPH = YES"
+ puts $fileid "DOT_GRAPH_MAX_NODES = 100"
+ puts $fileid "INCLUDE_GRAPH = NO"
+ puts $fileid "INCLUDED_BY_GRAPH = NO"
+ puts $fileid "DOT_MULTI_TARGETS = YES"
+ puts $fileid "DOT_IMAGE_FORMAT = png"
+ puts $fileid "GENERATE_LEGEND = YES"
+ puts $fileid "DOTFILE_DIRS = $outDir/html"
+ puts $fileid "DOT_CLEANUP = YES"
} else {
puts "Warning: DOT is not found; use environment variable GRAPHVIZ_HOME or command argument to specify its location"
puts $fileid "HAVE_DOT = NO"
puts $fileid "INCLUDE_FILE_PATTERNS = *.hxx *.pxx"
puts $fileid "EXCLUDE_PATTERNS = */Handle_*.hxx"
puts $fileid "SKIP_FUNCTION_MACROS = YES"
- puts $fileid "INCLUDE_GRAPH = NO"
- puts $fileid "INCLUDED_BY_GRAPH = NO"
- puts $fileid "DOT_MULTI_TARGETS = YES"
- puts $fileid "DOT_IMAGE_FORMAT = png"
puts $fileid "INLINE_SOURCES = NO"
# include dirs
puts $fileid "INCLUDE_PATH = $incdirs"
# list of files to generate
- set mainpage [OCCDoc_MakeMainPage $outDir/$name.dox $modules]
+ set mainpage [OCCDoc_MakeMainPage $outDir $outDir/$name.dox $modules]
puts $fileid "INPUT = $mainpage \\"
foreach header $filelist {
puts $fileid " $header \\"
- }
+ }
puts $fileid ""
-
+
close $fileid
return $filename
}
# generate main page file describing module structure
-proc OCCDoc_MakeMainPage {outFile modules} {
- set one_module [expr [llength $modules] == 1]
+proc OCCDoc_MakeMainPage {outDir outFile modules} {
+
+ global env
+ source $env(WOKHOME)/lib/OCCTDocumentationProcedures.tcl
+ set one_module [expr [llength $modules] == 1]
set fd [open $outFile "w"]
+
+ set module_prefix "module_"
+ set toolkit_prefix "toolkit_"
+ set package_prefix "package_"
+ OCCDoc_LoadData
+
# main page: list of modules
if { ! $one_module } {
puts $fd "/**"
puts $fd "\\mainpage Open CASCADE Technology"
foreach mod $modules {
- puts $fd "\\li \\subpage [string tolower module_$mod]"
+ puts $fd "\\li \\subpage [string tolower $module_prefix$mod]"
}
+ # insert modules relationship diagramm
+ puts $fd "\\dotfile [OCCDoc_CreateModulesDependencyGraph $outDir/html schema_all_modules $modules $module_prefix]"
puts $fd "**/\n"
}
lappend toolkits $tk
puts $fd "\\li \\subpage [string tolower toolkit_$tk]"
}
+ puts $fd "\\dotfile [OCCDoc_CreateModuleToolkitsDependencyGraph $outDir/html schema_$mod $mod $toolkit_prefix]"
puts $fd "**/\n"
}
-
+
# one page per toolkit: list of packages
set packages {}
foreach tk $toolkits {
puts $fd "/**"
+ puts $fd "\\dotfile [OCCDoc_CreateToolkitDependencyGraph $outDir/html schema_$tk $tk $toolkit_prefix]"
puts $fd "\\page [string tolower toolkit_$tk] Toolkit $tk"
foreach pk [lsort [osutils:tk:units [woklocate -u $tk]]] {
lappend packages $pk
# puts $fd "/**"
# puts $fd "\\class $obj"
# puts $fd "Contained in \\ref [string tolower package_$u]"
-## puts $fd "\\addtogroup package_$u"
+# puts $fd "\\addtogroup package_$u"
# puts $fd "**/\n"
# }
# }
# }
close $fd
+
return $outFile
}
close $packageFilePnt
}
+ puts "Done"
} else {
puts "no files found"
}
--- /dev/null
+# main graph dependency of modules
+proc OCCDoc_CreateModulesDependencyGraph {dir filename modules mpageprefix} {
+ global module_dependency
+
+ if {![catch {open $dir/$filename.dot "w"} file]} {
+ puts $file "digraph $filename"
+ puts $file "\{"
+
+ foreach mod $modules {
+ puts $file "\t$mod \[ URL = \"$mpageprefix$mod.html\" \]"
+ foreach mod_depend $module_dependency($mod) {
+ puts $file "\t$mod_depend -> $mod \[ dir = \"back\", color = \"midnightblue\", style = \"solid\" \]"
+ }
+ }
+
+ puts $file "\}"
+ close $file
+
+ return $filename
+ }
+}
+
+# dependency of all toolkits in module
+proc OCCDoc_CreateModuleToolkitsDependencyGraph {dir filename modulename tpageprefix} {
+ global toolkits_in_module
+ global toolkit_dependency
+ global toolkit_parent_module
+
+ if {![catch {open $dir/$filename.dot "w"} file]} {
+ puts $file "digraph $filename"
+ puts $file "\{"
+
+ #vertex
+ foreach tk $toolkits_in_module($modulename) {
+ puts $file "\t$tk \[ URL = \"$tpageprefix$tk.html\"\ ]"
+ foreach tkd $toolkit_dependency($tk) {
+ if {$toolkit_parent_module($tkd) == $modulename} {
+ puts $file "\t$tkd -> $tk \[ dir = \"back\", color = \"midnightblue\", style = \"solid\" \]"
+ }
+ }
+ }
+
+ puts $file "\}"
+ close $file
+
+ return $filename
+ }
+}
+
+# dependency of current toolkit to other toolkits
+proc OCCDoc_CreateToolkitDependencyGraph {dir filename toolkitname tpageprefix} {
+ global toolkit_dependency
+
+ if {![catch {open $dir/$filename.dot "w"} file]} {
+ puts $file "digraph $filename"
+ puts $file "\{"
+
+ puts $file "\t$toolkitname \[ URL = \"$tpageprefix$toolkitname.html\"\, shape = box ]"
+ foreach tkd $toolkit_dependency($toolkitname) {
+ puts $file "\t$tkd \[ URL = \"$tpageprefix$tkd.html\"\ , shape = box ]"
+ puts $file "\t$toolkitname -> $tkd \[ color = \"midnightblue\", style = \"solid\" \]"
+ }
+
+ puts $file "\}"
+ close $file
+
+ return $filename
+ }
+}
+
+# fill arrays of modules, toolkits, dependency of modules/toolkits etc
+proc OCCDoc_LoadData {} {
+ global toolkits_in_module
+ global toolkit_dependency
+ global toolkit_parent_module
+ global module_dependency
+
+ source [woklocate -p OS:source:Modules.tcl]
+ set modules [OS:Modules]
+ foreach mod $modules {
+ source [woklocate -p OS:source:$mod.tcl]
+ # get toolkits of current module
+ set toolkits_in_module($mod) [$mod:toolkits]
+ # get all dependence of current toolkit
+ foreach tk $toolkits_in_module($mod) {
+
+ # set parent module of current toolkit
+ set toolkit_parent_module($tk) $mod
+ #puts "$tk $mod"
+
+ set exlibfile [open [woklocate -p $tk:source:EXTERNLIB] r]
+ set exlibfile_data [read $exlibfile]
+ set exlibfile_data [split $exlibfile_data "\n"]
+
+ set toolkit_dependency($tk) {}
+ foreach dtk $exlibfile_data {
+ if {[string first TK $dtk 0] == 0} {
+ lappend toolkit_dependency($tk) $dtk
+ }
+ }
+ close $exlibfile
+ }
+ }
+
+ # get modules dependency
+ foreach mod $modules {
+ set module_dependency($mod) {}
+ foreach tk $toolkits_in_module($mod) {
+ foreach tkd $toolkit_dependency($tk) {
+ if { $toolkit_parent_module($tkd) != $mod &&
+ [lsearch $module_dependency($mod) $toolkit_parent_module($tkd)] == -1} {
+ lappend module_dependency($mod) $toolkit_parent_module($tkd)
+ }
+ }
+ }
+ }
+}
+
+