summaryrefslogtreecommitdiff
path: root/libxsd/doc/buildfile
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd/doc/buildfile')
-rw-r--r--libxsd/doc/buildfile92
1 files changed, 92 insertions, 0 deletions
diff --git a/libxsd/doc/buildfile b/libxsd/doc/buildfile
new file mode 100644
index 0000000..1298db1
--- /dev/null
+++ b/libxsd/doc/buildfile
@@ -0,0 +1,92 @@
+# file : doc/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+define html: file
+html{*}: extension = html
+
+define doxygen: file
+doxygen{*}: extension = doxygen
+
+define doxytag: file
+doxytag{*}: extension = doxytag
+
+doxygen_doc = $config.libxsd.doxygen
+
+if $doxygen_doc
+ import! doxygen = doxygen%exe{doxygen}
+
+./: cxx/tree/reference/doxytag{libxsd}: include = $doxygen_doc
+
+cxx/tree/reference/
+{
+ headers = buffer types date-time elements element-map exceptions
+
+ <doxytag{libxsd}>: doxygen{libxsd} \
+ html{footer} \
+ $src_root/xsd/cxx/tree/hxx{$headers} \
+ $doxygen
+ %
+ if $doxygen_doc
+ {{
+ o = $directory($>[0]) # Target output directory.
+ c = $path($<[0]) # Doxygen config file.
+ t = $path($>[0]).t # Temp dir.
+ tc = $t/"$leaf($c)" # Temp doxygen config file.
+ d = $t/$name($>[0]).d # Dep file (target list).
+
+ # Describe the dynamic targets for better diagnostics.
+ #
+ dyndep_options = --target-what 'generated doxygen'
+
+ # Doxygen doesn't provide any way to list the would-be-generated HTML
+ # files so the best we can do is to generate them, get their list, and
+ # throw them away. Note that this code is inspired by the hello-thrift
+ # example (see its buildfile for details).
+ #
+ # Note: fsdir{} could have been static prerequisite but let's keep it
+ # dynamic in case we want to turn this into a rule one day.
+ #
+ depdb dyndep --dyn-target $dyndep_options --format lines --file $d -- \
+ mkdir -p $t && \
+ sed -e "s%^\\s*\(HTML_OUTPUT\\s*=\).*\$%\\1 $t/html%" \
+ -e "s%^\\s*\(GENERATE_TAGFILE\\s*=\).*\$%\\1%" $c >$tc && \
+ $doxygen $tc &$t/html/*** && \
+ find $t/html -type f >$d && \
+ sed -e "s%[/\\\\]$path.leaf($t)%%g" -i $d && \
+ echo '' >>$d && \
+ echo $path.representation([dir_path] $o/html) >>$d
+
+ diag doxygen ($<[0]) -> ($>[0]) $o/fsdir{html/}
+
+ rm -rf $o/html # Note: doxygen doesn't clean it up itself.
+
+ # @@ It's unclear if it would be beneficial (or even possible) to list
+ # relative inputs in doxygen{libxsd} and then adjust the CWD here. Note
+ # that while relative header paths are used in libxsd.doxygen for
+ # make-based build system, absolute paths still end up in
+ # libxsd.doxytag.
+ #
+ $doxygen $c
+ }}
+
+ doxygen{libxsd}: in{libxsd}
+ {
+ in.symbol = '%'
+
+ input = $regex.merge($headers, \
+ '^(.*)$', \
+ "$src_root/xsd/cxx/tree/\\1.hxx", \
+ ' ')
+ }
+
+ html{footer}: in{footer}
+ {
+ # Extract the copyright notice from the LICENSE file.
+ #
+ # Note that cat is a builtin which means this is both portable and fast.
+ #
+ copyright = $process.run_regex(cat $src_root/LICENSE, \
+ 'Copyright \(c\) (.+)\.', \
+ '\1')
+ }
+}