summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk Baechle <dl9obn@darc.de>2013-12-20 22:21:12 +0100
committerDirk Baechle <dl9obn@darc.de>2013-12-20 22:21:12 +0100
commitaebd22f11151aa6fbd78b97415a4f7eaad7d9f80 (patch)
tree91d7e37c70d5bfbe090c2e0db21657978669732b
parent60fe76544cb6edb6bfd6f80043a569a68518a207 (diff)
downloadscons-aebd22f11151aa6fbd78b97415a4f7eaad7d9f80.tar.gz
- added xsltproc tests and improved handling of the base_dir parameter
-rw-r--r--src/engine/SCons/Tool/docbook/__init__.py54
-rw-r--r--test/Docbook/basedir/htmlchunked/htmlchunked_cmd.py57
-rw-r--r--test/Docbook/basedir/htmlchunked/image/SConstruct.cmd2
-rw-r--r--test/Docbook/basedir/htmlhelp/htmlhelp_cmd.py61
-rw-r--r--test/Docbook/basedir/htmlhelp/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basedir/slideshtml/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basedir/slideshtml/slideshtml_cmd.py64
-rw-r--r--test/Docbook/basic/html/html_cmd.py54
-rw-r--r--test/Docbook/basic/html/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basic/htmlchunked/htmlchunked_cmd.py55
-rw-r--r--test/Docbook/basic/htmlchunked/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basic/htmlhelp/htmlhelp_cmd.py58
-rw-r--r--test/Docbook/basic/htmlhelp/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basic/man/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basic/man/man_cmd.py56
-rw-r--r--test/Docbook/basic/slideshtml/image/SConstruct.cmd3
-rw-r--r--test/Docbook/basic/slideshtml/slideshtml_cmd.py64
17 files changed, 535 insertions, 11 deletions
diff --git a/src/engine/SCons/Tool/docbook/__init__.py b/src/engine/SCons/Tool/docbook/__init__.py
index d6713c69..1e88cfe8 100644
--- a/src/engine/SCons/Tool/docbook/__init__.py
+++ b/src/engine/SCons/Tool/docbook/__init__.py
@@ -260,6 +260,34 @@ def __xml_scan(node, env, path, arg):
docbook_xml_scanner = SCons.Script.Scanner(function = __xml_scan,
argument = None)
+
+#
+# Action generators
+#
+def __generate_xsltproc_action(source, target, env, for_signature):
+ cmd = env['DOCBOOK_XSLTPROCCOM']
+ # Does the environment have a base_dir defined?
+ base_dir = env.subst('$base_dir')
+ if base_dir:
+ # Yes, so replace target path by its filename
+ return cmd.replace('$TARGET','${TARGET.file}')
+ return cmd
+
+
+#
+# Emitters
+#
+def __emit_xsl_basedir(target, source, env):
+ # Does the environment have a base_dir defined?
+ base_dir = env.subst('$base_dir')
+ if base_dir:
+ # Yes, so prepend it to each target
+ return [os.path.join(base_dir, str(t)) for t in target], source
+
+ # No, so simply pass target and source names through
+ return target, source
+
+
#
# Builders
#
@@ -340,11 +368,13 @@ def __xinclude_lxml(target, source, env):
__libxml2_builder = SCons.Builder.Builder(
action = __build_libxml2,
src_suffix = '.xml',
- source_scanner = docbook_xml_scanner)
+ source_scanner = docbook_xml_scanner,
+ emitter = __emit_xsl_basedir)
__lxml_builder = SCons.Builder.Builder(
action = __build_lxml,
src_suffix = '.xml',
- source_scanner = docbook_xml_scanner)
+ source_scanner = docbook_xml_scanner,
+ emitter = __emit_xsl_basedir)
__xinclude_libxml2_builder = SCons.Builder.Builder(
action = __xinclude_libxml2,
@@ -358,9 +388,11 @@ __xinclude_lxml_builder = SCons.Builder.Builder(
source_scanner = docbook_xml_scanner)
__xsltproc_builder = SCons.Builder.Builder(
- action = SCons.Action.Action('$DOCBOOK_XSLTPROCCOM','$DOCBOOK_XSLTPROCCOMSTR'),
+ action = SCons.Action.CommandGeneratorAction(__generate_xsltproc_action,
+ {'cmdstr' : '$DOCBOOK_XSLTPROCCOMSTR'}),
src_suffix = '.xml',
- source_scanner = docbook_xml_scanner)
+ source_scanner = docbook_xml_scanner,
+ emitter = __emit_xsl_basedir)
__xmllint_builder = SCons.Builder.Builder(
action = SCons.Action.Action('$DOCBOOK_XMLLINTCOM','$DOCBOOK_XMLLINTCOMSTR'),
suffix = '.xml',
@@ -420,11 +452,11 @@ def DocbookHtmlChunked(env, target, source=None, *args, **kw):
# Create targets
result = []
- r = __builder.__call__(env, base_dir+__ensure_suffix(str(target[0]), '.html'), source[0], **kw)
+ r = __builder.__call__(env, __ensure_suffix(str(target[0]), '.html'), source[0], **kw)
env.Depends(r, kw['DOCBOOK_XSL'])
result.extend(r)
# Add supporting files for cleanup
- env.Clean(r, glob.glob(base_dir+'*.html'))
+ env.Clean(r, glob.glob(os.path.join(base_dir, '*.html')))
return result
@@ -455,12 +487,12 @@ def DocbookHtmlhelp(env, target, source=None, *args, **kw):
# Create targets
result = []
- r = __builder.__call__(env, base_dir+__ensure_suffix(str(target[0]), '.html'), source[0], **kw)
+ r = __builder.__call__(env, __ensure_suffix(str(target[0]), '.html'), source[0], **kw)
env.Depends(r, kw['DOCBOOK_XSL'])
result.extend(r)
# Add supporting files for cleanup
env.Clean(r, ['toc.hhc', 'htmlhelp.hhp', 'index.hhk'] +
- glob.glob(base_dir+'[ar|bk|ch]*.html'))
+ glob.glob(os.path.join(base_dir, '[ar|bk|ch]*.html')))
return result
@@ -605,12 +637,12 @@ def DocbookSlidesHtml(env, target, source=None, *args, **kw):
# Create targets
result = []
- r = __builder.__call__(env, base_dir+__ensure_suffix(str(target[0]), '.html'), source[0], **kw)
+ r = __builder.__call__(env, __ensure_suffix(str(target[0]), '.html'), source[0], **kw)
env.Depends(r, kw['DOCBOOK_XSL'])
result.extend(r)
# Add supporting files for cleanup
- env.Clean(r, [base_dir+'toc.html'] +
- glob.glob(base_dir+'foil*.html'))
+ env.Clean(r, [os.path.join(base_dir, 'toc.html')] +
+ glob.glob(os.path.join(base_dir, 'foil*.html')))
return result
diff --git a/test/Docbook/basedir/htmlchunked/htmlchunked_cmd.py b/test/Docbook/basedir/htmlchunked/htmlchunked_cmd.py
new file mode 100644
index 00000000..b507eb12
--- /dev/null
+++ b/test/Docbook/basedir/htmlchunked/htmlchunked_cmd.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the base_dir argument for the chunked HTML builder while using
+the xsltproc executable, if it exists.
+"""
+
+import os
+import sys
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not (xsltproc and
+ os.path.isdir('/usr/share/xml/docbook/stylesheet/docbook-xsl')):
+ test.skip_test('No xsltproc or no stylesheets installed, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('output/index.html'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('output/index.html'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basedir/htmlchunked/image/SConstruct.cmd b/test/Docbook/basedir/htmlchunked/image/SConstruct.cmd
new file mode 100644
index 00000000..d981b284
--- /dev/null
+++ b/test/Docbook/basedir/htmlchunked/image/SConstruct.cmd
@@ -0,0 +1,2 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookHtmlChunked('manual', xsl='html.xsl', base_dir='output/')
diff --git a/test/Docbook/basedir/htmlhelp/htmlhelp_cmd.py b/test/Docbook/basedir/htmlhelp/htmlhelp_cmd.py
new file mode 100644
index 00000000..a0f5e8ac
--- /dev/null
+++ b/test/Docbook/basedir/htmlhelp/htmlhelp_cmd.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the base_dir argument for the HTMLHELP builder while using
+the xsltproc executable, if it exists.
+"""
+
+import os
+import sys
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not (xsltproc and
+ os.path.isdir('/usr/share/xml/docbook/stylesheet/docbook-xsl')):
+ test.skip_test('No xsltproc or no stylesheets installed, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('output/index.html'))
+test.must_exist(test.workpath('htmlhelp.hhp'))
+test.must_exist(test.workpath('toc.hhc'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('output/index.html'))
+test.must_not_exist(test.workpath('htmlhelp.hhp'))
+test.must_not_exist(test.workpath('toc.hhc'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basedir/htmlhelp/image/SConstruct.cmd b/test/Docbook/basedir/htmlhelp/image/SConstruct.cmd
new file mode 100644
index 00000000..8c7c9ca3
--- /dev/null
+++ b/test/Docbook/basedir/htmlhelp/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookHtmlhelp('manual', xsl='htmlhelp.xsl', base_dir='output/')
+
diff --git a/test/Docbook/basedir/slideshtml/image/SConstruct.cmd b/test/Docbook/basedir/slideshtml/image/SConstruct.cmd
new file mode 100644
index 00000000..297aeb59
--- /dev/null
+++ b/test/Docbook/basedir/slideshtml/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookSlidesHtml('virt', xsl='slides.xsl', base_dir='output/')
+
diff --git a/test/Docbook/basedir/slideshtml/slideshtml_cmd.py b/test/Docbook/basedir/slideshtml/slideshtml_cmd.py
new file mode 100644
index 00000000..51ed6e4d
--- /dev/null
+++ b/test/Docbook/basedir/slideshtml/slideshtml_cmd.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the base_dir argument for the Slides HTML builder while using
+the xsltproc executable, if it exists.
+"""
+
+import os
+import sys
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not (xsltproc and
+ os.path.isdir('/usr/share/xml/docbook/stylesheet/docbook-xsl/slides') and
+ os.path.isdir('/usr/share/xml/docbook/custom/slides/3.3.1')):
+ test.skip_test('No xsltproc or no "slides" stylesheets installed, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('output/index.html'))
+test.must_exist(test.workpath('output/toc.html'))
+test.must_exist(test.workpath('output/foil01.html'))
+test.must_exist(test.workpath('output/foilgroup01.html'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('output/index.html'))
+test.must_not_exist(test.workpath('output/toc.html'))
+test.must_not_exist(test.workpath('output/foil01.html'))
+test.must_not_exist(test.workpath('output/foilgroup01.html'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basic/html/html_cmd.py b/test/Docbook/basic/html/html_cmd.py
new file mode 100644
index 00000000..acb4dad9
--- /dev/null
+++ b/test/Docbook/basic/html/html_cmd.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the HTML builder while using
+the xsltproc executable, if it exists.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not xsltproc:
+ test.skip_test('No xsltproc executable found, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'])
+test.must_exist(test.workpath('manual.html'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('manual.html'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basic/html/image/SConstruct.cmd b/test/Docbook/basic/html/image/SConstruct.cmd
new file mode 100644
index 00000000..20b4aa25
--- /dev/null
+++ b/test/Docbook/basic/html/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookHtml('manual')
+
diff --git a/test/Docbook/basic/htmlchunked/htmlchunked_cmd.py b/test/Docbook/basic/htmlchunked/htmlchunked_cmd.py
new file mode 100644
index 00000000..e1ad49a2
--- /dev/null
+++ b/test/Docbook/basic/htmlchunked/htmlchunked_cmd.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the chunked HTML builder while using
+the xsltproc executable, if it exists.
+"""
+
+import os
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not xsltproc:
+ test.skip_test('No xsltproc executable found, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('index.html'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('index.html'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basic/htmlchunked/image/SConstruct.cmd b/test/Docbook/basic/htmlchunked/image/SConstruct.cmd
new file mode 100644
index 00000000..e2406f29
--- /dev/null
+++ b/test/Docbook/basic/htmlchunked/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookHtmlChunked('manual')
+
diff --git a/test/Docbook/basic/htmlhelp/htmlhelp_cmd.py b/test/Docbook/basic/htmlhelp/htmlhelp_cmd.py
new file mode 100644
index 00000000..8e1c1b6b
--- /dev/null
+++ b/test/Docbook/basic/htmlhelp/htmlhelp_cmd.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the HTMLHELP builder while using
+the xsltproc executable, if it exists.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not xsltproc:
+ test.skip_test('No xsltproc executable found, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('index.html'))
+test.must_exist(test.workpath('htmlhelp.hhp'))
+test.must_exist(test.workpath('toc.hhc'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('index.html'))
+test.must_not_exist(test.workpath('htmlhelp.hhp'))
+test.must_not_exist(test.workpath('toc.hhc'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basic/htmlhelp/image/SConstruct.cmd b/test/Docbook/basic/htmlhelp/image/SConstruct.cmd
new file mode 100644
index 00000000..29fb4fa6
--- /dev/null
+++ b/test/Docbook/basic/htmlhelp/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookHtmlhelp('manual')
+
diff --git a/test/Docbook/basic/man/image/SConstruct.cmd b/test/Docbook/basic/man/image/SConstruct.cmd
new file mode 100644
index 00000000..8b1406b7
--- /dev/null
+++ b/test/Docbook/basic/man/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookMan('refdb')
+
diff --git a/test/Docbook/basic/man/man_cmd.py b/test/Docbook/basic/man/man_cmd.py
new file mode 100644
index 00000000..f5127e32
--- /dev/null
+++ b/test/Docbook/basic/man/man_cmd.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the Man builder while using
+the xsltproc executable, if it exists.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not xsltproc:
+ test.skip_test('No xsltproc executable found, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('refdb.8'))
+test.must_exist(test.workpath('refdb.sh.8'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('refdb.8'))
+test.must_not_exist(test.workpath('refdb.sh.8'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Docbook/basic/slideshtml/image/SConstruct.cmd b/test/Docbook/basic/slideshtml/image/SConstruct.cmd
new file mode 100644
index 00000000..133cb118
--- /dev/null
+++ b/test/Docbook/basic/slideshtml/image/SConstruct.cmd
@@ -0,0 +1,3 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookSlidesHtml('virt')
+
diff --git a/test/Docbook/basic/slideshtml/slideshtml_cmd.py b/test/Docbook/basic/slideshtml/slideshtml_cmd.py
new file mode 100644
index 00000000..ce5c30ba
--- /dev/null
+++ b/test/Docbook/basic/slideshtml/slideshtml_cmd.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2001-2010 The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+"""
+Test the Slides HTML builder while using
+the xsltproc executable, if it exists.
+"""
+
+import os
+import sys
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+xsltproc = test.where_is('xsltproc')
+if not (xsltproc and
+ os.path.isdir('/usr/share/xml/docbook/stylesheet/docbook-xsl/slides') and
+ os.path.isdir('/usr/share/xml/docbook/custom/slides/3.3.1')):
+ test.skip_test('No xsltproc executable or no "slides" stylesheets installed, skipping test.\n')
+
+test.dir_fixture('image')
+
+# Normal invocation
+test.run(arguments=['-f','SConstruct.cmd'], stderr=None)
+test.must_exist(test.workpath('index.html'))
+test.must_exist(test.workpath('toc.html'))
+test.must_exist(test.workpath('foil01.html'))
+test.must_exist(test.workpath('foilgroup01.html'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('index.html'))
+test.must_not_exist(test.workpath('toc.html'))
+test.must_not_exist(test.workpath('foil01.html'))
+test.must_not_exist(test.workpath('foilgroup01.html'))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4: