diff --git a/CHANGES b/CHANGES
index b47d08966..c37a72f73 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,7 @@ Bugs fixed
* #2882: Fall back to a GET request on 403 status in linkcheck
* #2902: jsdump.loads fails to load search index if keywords starts with
underscore
+* #2900: Fix epub content.opf: add auto generated orphan files to spine.
Release 1.4.6 (released Aug 20, 2016)
=====================================
diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py
index f5f0d8098..e2c780261 100644
--- a/sphinx/builders/epub.py
+++ b/sphinx/builders/epub.py
@@ -123,6 +123,9 @@ FILE_TEMPLATE = u'''\
SPINE_TEMPLATE = u'''\
'''
+NO_LINEAR_SPINE_TEMPLATE = u'''\
+ '''
+
GUIDE_TEMPLATE = u'''\
'''
@@ -202,6 +205,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
coverpage_name = COVERPAGE_NAME
file_template = FILE_TEMPLATE
spine_template = SPINE_TEMPLATE
+ no_linear_spine_template = NO_LINEAR_SPINE_TEMPLATE
guide_template = GUIDE_TEMPLATE
toctree_template = TOCTREE_TEMPLATE
doctype = DOCTYPE
@@ -584,6 +588,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
# spine
spine = []
+ spinefiles = set()
for item in self.refnodes:
if '#' in item['refuri']:
continue
@@ -592,14 +597,23 @@ class EpubBuilder(StandaloneHTMLBuilder):
spine.append(self.spine_template % {
'idref': self.esc(self.make_id(item['refuri']))
})
+ spinefiles.add(item['refuri'])
for info in self.domain_indices:
spine.append(self.spine_template % {
'idref': self.esc(self.make_id(info[0] + self.out_suffix))
})
+ spinefiles.add(info[0] + self.out_suffix)
if self.get_builder_config('use_index', 'epub'):
spine.append(self.spine_template % {
'idref': self.esc(self.make_id('genindex' + self.out_suffix))
})
+ spinefiles.add('genindex' + self.out_suffix)
+ # add auto generated files
+ for name in self.files:
+ if name not in spinefiles and name.endswith(self.out_suffix):
+ spine.append(self.no_linear_spine_template % {
+ 'idref': self.esc(self.make_id(name))
+ })
# add the optional cover
content_tmpl = self.content_template
@@ -626,6 +640,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
ctx = {'image': self.esc(image), 'title': self.config.project}
self.handle_page(
path.splitext(self.coverpage_name)[0], ctx, html_tmpl)
+ spinefiles.add(self.coverpage_name)
guide = []
auto_add_cover = True