summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk Baechle <dl9obn@darc.de>2014-01-05 13:27:10 +0100
committerDirk Baechle <dl9obn@darc.de>2014-01-05 13:27:10 +0100
commitf78a5612498648257400084a47dab9d94936eb11 (patch)
tree781ecb9cdb5d31dae26d17c1c8a68ae10d001686
parent093702c094cb6b5dcfc1e904d49beaacc83ab7be (diff)
downloadscons-f78a5612498648257400084a47dab9d94936eb11.tar.gz
- corrected dependencies for EPUB builder (docbook)
- added a proper test for EPUB with xsltproc
-rw-r--r--src/engine/SCons/Tool/docbook/__init__.py27
-rw-r--r--test/Docbook/basic/epub/epub_cmd.py59
-rw-r--r--test/Docbook/basic/epub/image/SConstruct.cmd2
3 files changed, 79 insertions, 9 deletions
diff --git a/src/engine/SCons/Tool/docbook/__init__.py b/src/engine/SCons/Tool/docbook/__init__.py
index d14d60bb..72ea1758 100644
--- a/src/engine/SCons/Tool/docbook/__init__.py
+++ b/src/engine/SCons/Tool/docbook/__init__.py
@@ -501,20 +501,29 @@ def DocbookEpub(env, target, source=None, *args, **kw):
# Create targets
result = []
- tlist = ['OEBPS/toc.ncx', 'META-INF/container.xml']
- dirs = [SCons.Script.Dir('OEBPS'), SCons.Script.Dir('META-INF')]
- r = __builder.__call__(env, tlist, source[0], **kw)
+ if not env.GetOption('clean'):
+ # Ensure that the folders OEBPS and META-INF exist
+ __create_output_dir('OEBPS/')
+ __create_output_dir('META-INF/')
+ dirs = env.Dir(['OEBPS', 'META-INF'])
- env.Depends(r, kw['DOCBOOK_XSL'])
- result.extend(r)
+ # Set the fixed base_dir
+ kw['base_dir'] = 'OEBPS/'
+ tocncx = __builder.__call__(env, 'toc.ncx', source[0], **kw)
+ cxml = env.File('META-INF/container.xml')
+ env.SideEffect(cxml, tocncx)
+
+ env.Depends(tocncx, kw['DOCBOOK_XSL'])
+ result.extend(tocncx+[cxml])
container = env.Command(__ensure_suffix(str(target[0]), '.epub'),
- tlist, [add_resources, build_open_container])
-
- env.Depends(container, r)
+ tocncx+[cxml], [add_resources, build_open_container])
+ mimetype = env.File('mimetype')
+ env.SideEffect(mimetype, container)
+
result.extend(container)
# Add supporting files for cleanup
- env.Clean(r, dirs + [SCons.Script.File('mimetype')])
+ env.Clean(tocncx, dirs)
return result
diff --git a/test/Docbook/basic/epub/epub_cmd.py b/test/Docbook/basic/epub/epub_cmd.py
new file mode 100644
index 00000000..b79d1859
--- /dev/null
+++ b/test/Docbook/basic/epub/epub_cmd.py
@@ -0,0 +1,59 @@
+#!/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 EPUB 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('manual.epub'))
+test.must_exist(test.workpath('OEBPS','toc.ncx'))
+test.must_exist(test.workpath('OEBPS','content.opf'))
+test.must_exist(test.workpath('META-INF','container.xml'))
+
+# Cleanup
+test.run(arguments=['-f','SConstruct.cmd','-c'])
+test.must_not_exist(test.workpath('manual.epub'))
+test.must_not_exist(test.workpath('OEBPS'))
+test.must_not_exist(test.workpath('META-INF'))
+
+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/epub/image/SConstruct.cmd b/test/Docbook/basic/epub/image/SConstruct.cmd
new file mode 100644
index 00000000..27cf2c8f
--- /dev/null
+++ b/test/Docbook/basic/epub/image/SConstruct.cmd
@@ -0,0 +1,2 @@
+env = Environment(DOCBOOK_PREFER_XSLTPROC=1, tools=['docbook'])
+env.DocbookEpub('manual')