[Python-modules-commits] r17740 - in packages/sphinx/trunk/debian (5 files)

jwilk at users.alioth.debian.org jwilk at users.alioth.debian.org
Thu Jul 7 16:20:53 UTC 2011


    Date: Thursday, July 7, 2011 @ 16:20:52
  Author: jwilk
Revision: 17740

Add new tool, dh_sphinxdoc that aids shipping Sphinx-generated documentation in Debian packages.

Added:
  packages/sphinx/trunk/debian/dh_sphinxdoc
Modified:
  packages/sphinx/trunk/debian/changelog
  packages/sphinx/trunk/debian/control
  packages/sphinx/trunk/debian/python-sphinx.links
  packages/sphinx/trunk/debian/rules

Modified: packages/sphinx/trunk/debian/changelog
===================================================================
--- packages/sphinx/trunk/debian/changelog	2011-07-07 09:17:43 UTC (rev 17739)
+++ packages/sphinx/trunk/debian/changelog	2011-07-07 16:20:52 UTC (rev 17740)
@@ -14,8 +14,12 @@
     + Build-depend on xvfb, xauth, python-webkit, libjs-jquery and
       libjs-underscore.
   * Add build-arch and build-indep targets to debian/rules.
+  * Add new tool, dh_sphinxdoc that aids shipping Sphinx-generated
+    documentation in Debian packages.
+    + Update debian/rules, debian/control and debian/*.links to use
+      dh_sphinxdoc.
 
- -- Jakub Wilk <jwilk at debian.org>  Sun, 26 Jun 2011 13:15:18 +0200
+ -- Jakub Wilk <jwilk at debian.org>  Thu, 07 Jul 2011 18:11:57 +0200
 
 sphinx (1.0.7-5) unstable; urgency=low
 

Modified: packages/sphinx/trunk/debian/control
===================================================================
--- packages/sphinx/trunk/debian/control	2011-07-07 09:17:43 UTC (rev 17739)
+++ packages/sphinx/trunk/debian/control	2011-07-07 16:20:52 UTC (rev 17740)
@@ -16,7 +16,7 @@
 Package: python-sphinx
 Architecture: all
 Depends: ${misc:Depends}, ${python:Depends}, python-docutils (>= 0.5), python-pygments (>= 0.8), python-jinja2 (>= 2.2),
-  libjs-jquery (>= 1.4), libjs-underscore
+  ${sphinxdoc:Depends}
 Recommends: python (>= 2.6) | python-simplejson, python-imaging
 Suggests: jsmath
 Description: tool for producing documentation for Python projects

Added: packages/sphinx/trunk/debian/dh_sphinxdoc
===================================================================
--- packages/sphinx/trunk/debian/dh_sphinxdoc	                        (rev 0)
+++ packages/sphinx/trunk/debian/dh_sphinxdoc	2011-07-07 16:20:52 UTC (rev 17740)
@@ -0,0 +1,130 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use File::Find;
+use Debian::Debhelper::Dh_Lib;
+
+my @packaged_js = (
+    ['jquery.js', '/usr/share/javascript/jquery/jquery.js', 'libjs-jquery (>= 1.4)'],
+    ['underscore.js', '/usr/share/javascript/underscore/underscore.js', 'libjs-underscore'],
+);
+
+sub looks_like_sphinx_doc($)
+{
+    my ($path) = @_;
+    return 0 unless -f "$path/searchindex.js";
+    return 0 unless -f "$path/search.html";
+    return 1;
+}
+
+sub sanity_check($)
+{
+    local $/;
+    my ($path) = @_;
+    my $indexfn = "$path/searchindex.js";
+    open(F, '<', $indexfn) or error("cannot open $indexfn");
+    my $index = <F>;
+    close(F);
+    $index =~ m{^Search[.]setIndex[(].*?filenames:\["(.*?)"\].*[)]$} or error("$indexfn doesn't look like a Sphinx search index");
+    $index = $1;
+    my $searchfn = "$path/search.html";
+    open(F, '<', $searchfn) or error("cannot open $searchfn");
+    my $search = <F>;
+    close F;
+    my @js = $search =~ m{<script type="text/javascript" src="([^"]++)"></script>}g;
+    my $loads_searchindex = $search =~ m/\QjQuery(function() { Search.loadIndex("searchindex.js"); });\E/;
+    my ($has_source) = $search =~ m{HAS_SOURCE:\s*(true|false)};
+    my ($url_root) = $search =~ m{URL_ROOT:\s*'([^']*)'};
+    (@js and $loads_searchindex and defined $has_source and defined $url_root) or error("$searchfn doesn't look like Sphinx search page");
+    $url_root =~ m{^([a-z]+:/)?/} and error("URL_ROOT in $searchfn is not relative");
+    my $static_root;
+    for my $js (@js)
+    {
+        if ($js =~ m{/\Qsearchtools.js\E$})
+        {
+            open(F, '<', "$path/$js") or error("cannot open $path/$js");
+            my $searchtools = <F>;
+            close F;
+            ($static_root) = $searchtools =~ m{\Qget(DOCUMENTATION_OPTIONS.URL_ROOT\E\s*[+]\s*'([^']+)/'};
+            defined $static_root or error("$path/$js doesn't look like Sphinx code");
+            $searchtools =~ m/"text"/ or error("$path/$js doesn't look like if it was built with up-to-date Sphinx");
+            $static_root = "$url_root/$static_root"
+        }
+        -f "$path/$js" or error("$path/$js is missing");
+    }
+    for my $page (split(/","/, $index))
+    {
+        -f "$path/$page.html" or error("$path/$page.html is missing");
+        -f "$path$static_root/$page.txt" or error("$path$static_root/$page.txt is missing") if $has_source;
+    }
+    return @js;
+}
+
+sub fix_symlinks($@)
+{
+    my @deps = ();
+    my ($path, @js) = @_;
+    for my $js (@js)
+    {
+        for (@packaged_js)
+        {
+            my ($source, $target, $dependency) = @{$_};
+            next unless $js =~ m{/\Q$source\E$};
+            doit('ln', '-sf', "$target", "$path/$js");
+            push @deps, $dependency;
+        }
+    }
+    return @deps;
+}
+ 
+sub fix_sphinx_doc($$)
+{
+    my ($package, $path) = @_;
+    return 0 if not looks_like_sphinx_doc($path);
+    my @js = sanity_check($path);
+    my @deps = fix_symlinks($path, @js);
+    map { addsubstvar($package, "sphinxdoc:Depends", $_) } @deps;
+    return 1;
+}
+
+my @paths = @ARGV;
+ at paths = (undef) unless @paths;
+
+init();
+
+foreach my $path (@paths)
+{
+    my $done = 0;
+    foreach my $package (@{$dh{DOPACKAGES}})
+    {
+        my $pkgpath = tmpdir($package);
+        if (defined $path)
+        {
+            next if -l $path;
+            $pkgpath .= "/$path";
+            $done += fix_sphinx_doc($package, $pkgpath);
+        }
+        else
+        {
+            find({
+                wanted => sub {
+                    return unless -d;
+                    return if -l;
+                    return if excludefile($_);
+                    $done += fix_sphinx_doc($package, $_);
+                },
+                no_chdir => 1
+            }, "$pkgpath/usr/share/doc/");
+        }
+    }
+    if ($done == 0)
+    {
+        my $message = 'Sphinx documentation not found';
+        $message .= " at $path" if defined $path;
+        error($message);
+    }
+}
+
+# vim:ts=4 sw=4 et


Property changes on: packages/sphinx/trunk/debian/dh_sphinxdoc
___________________________________________________________________
Added: svn:executable
   + *

Modified: packages/sphinx/trunk/debian/python-sphinx.links
===================================================================
--- packages/sphinx/trunk/debian/python-sphinx.links	2011-07-07 09:17:43 UTC (rev 17739)
+++ packages/sphinx/trunk/debian/python-sphinx.links	2011-07-07 16:20:52 UTC (rev 17740)
@@ -1,7 +1,4 @@
 /usr/share/javascript/jquery/jquery.js /usr/share/sphinx/themes/basic/static/jquery.js 
 /usr/share/javascript/underscore/underscore.js /usr/share/sphinx/themes/basic/static/underscore.js 
 
-/usr/share/javascript/jquery/jquery.js /usr/share/doc/python-sphinx/html/_static/jquery.js
-/usr/share/javascript/underscore/underscore.js /usr/share/doc/python-sphinx/html/_static/underscore.js
-
 /usr/share/doc/python-sphinx/html/_sources/ /usr/share/doc/python-sphinx/rst

Modified: packages/sphinx/trunk/debian/rules
===================================================================
--- packages/sphinx/trunk/debian/rules	2011-07-07 09:17:43 UTC (rev 17739)
+++ packages/sphinx/trunk/debian/rules	2011-07-07 16:20:52 UTC (rev 17740)
@@ -89,7 +89,9 @@
 	dh_testroot
 	dh_installchangelogs CHANGES
 	dh_installdocs
+	dh_install debian/dh_sphinxdoc /usr/bin/
 	rm -rf $(PACKAGE_DIR)/usr/share/doc/python-sphinx/html/.doctrees
+	./debian/dh_sphinxdoc /usr/share/doc/python-sphinx/html/
 	dh_installexamples
 	dh_installman
 	dh_pysupport




More information about the Python-modules-commits mailing list