Update to better deal with python3 and multiple python ABIs
authorJim Ramsay <lack@gentoo.org>
Thu, 1 Apr 2010 16:56:13 +0000 (16:56 +0000)
committerJim Ramsay <lack@gentoo.org>
Thu, 1 Apr 2010 16:56:13 +0000 (16:56 +0000)
Package-Manager: portage-2.1.8.3/cvs/Linux i686

rox-base/zeroinstall-injector/ChangeLog
rox-base/zeroinstall-injector/Manifest
rox-base/zeroinstall-injector/files/0distutils-r2 [new file with mode: 0755]
rox-base/zeroinstall-injector/zeroinstall-injector-0.43-r1.ebuild [moved from rox-base/zeroinstall-injector/zeroinstall-injector-0.43.ebuild with 65% similarity]

index 3047f1d7482d76be4632689250bedb2a253fcad1..6c3d4c4079d90b8bd8c52899a74f1cc00ca9e3be 100644 (file)
@@ -1,6 +1,12 @@
 # ChangeLog for rox-base/zeroinstall-injector
 # Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/rox-base/zeroinstall-injector/ChangeLog,v 1.20 2010/03/31 12:53:22 lack Exp $
+# $Header: /var/cvsroot/gentoo-x86/rox-base/zeroinstall-injector/ChangeLog,v 1.21 2010/04/01 16:56:12 lack Exp $
+
+*zeroinstall-injector-0.43-r1 (01 Apr 2010)
+
+  01 Apr 2010; Jim Ramsay <lack@gentoo.org> +files/0distutils-r2,
+  -zeroinstall-injector-0.43.ebuild, +zeroinstall-injector-0.43-r1.ebuild:
+  Update to better deal with python3 and multiple python ABIs
 
   31 Mar 2010; Jim Ramsay <lack@gentoo.org> -files/0distutils,
   -zeroinstall-injector-0.33.ebuild:
index f51c47d4304f09e4ac03dfca229dd2fef3eb7361..5a67fe6ff444cb3df979b67cde4f06165ba0d7f7 100644 (file)
@@ -1,8 +1,9 @@
 AUX 0distutils-r1 3523 RMD160 4f0b2ce58bb6bd8b572cf89e5ef1dc444812eb4b SHA1 d9b8605e5dfaa221e8bc24e62d5d92f88baca2df SHA256 06b41367607d6f60ee5d895ac3e26744b9337254fa3d740aa952a325bc22bcd5
+AUX 0distutils-r2 3524 RMD160 d16ddbbef7d74879537492aca153f138c2d96083 SHA1 3c0e07b5e6389c941d509bd482d6e7a30e83bfe2 SHA256 b63dad04c5bbdd9d6c9429b43f4f50e27665501c677dcb29e22be7e05da6b4e1
 AUX global.cfg 74 RMD160 bb2aa8c35d498342388c7e280c303f9869f9e6a3 SHA1 5ad6042f6fd113062ff347bdff563108927a20b6 SHA256 00e469a631692d515af084f43e9d854ae0ae4fa7a312b61a3050d4fb5caf6f47
 DIST zeroinstall-injector-0.40.tar.bz2 150082 RMD160 6cc84fb16a33e7a9a24442ad2e92da0d531caf2d SHA1 d0e4c159ab9efdaa3938b37465dc7f8ac08141ac SHA256 89b0aacc07450884866cee21651779d3b5bcc9546c6ea65d72a77b181daef042
 DIST zeroinstall-injector-0.43.tar.bz2 187129 RMD160 a1781dd6853c29a0651ebdf3874ae5f274b791d7 SHA1 12f638d19db4a917f1c3327a9c770beaf1bfe366 SHA256 571f2cd8df67bd8c0408bef36fb8cf272a08495c8ab0bafd85ba5b464a8e984d
 EBUILD zeroinstall-injector-0.40.ebuild 1308 RMD160 224f8f4b730a336f20fab82af4566c80a27efed3 SHA1 5a8db82ed8b806760ffe318d8d668a6480f5a017 SHA256 3567c5ccd5a796b27e3ebe5ea40423b49aa4022acd1488100a9d4bb47f27f415
-EBUILD zeroinstall-injector-0.43.ebuild 1311 RMD160 74043f30374bee87d22f37ebc6a7b1bef363e685 SHA1 bc1b7fcc45053ebf4c799b8a4190f1f794e843c9 SHA256 c8dc5866767728904ef1c671d617e83cd3dac53379d1e87e8671103be9f27de5
-MISC ChangeLog 3183 RMD160 4537c7a411de860b9682672e3a2e1439740cfa28 SHA1 06ab5e3ce0b2be145af8b4e12703d8381e316e04 SHA256 51fe717722dc2b7d4c46b9a64f76533190361b14cb5234ebc96997db5cf2ebf7
+EBUILD zeroinstall-injector-0.43-r1.ebuild 1433 RMD160 47dc13ebfb15eb0aaf6bc712e6ae6d5f0190a4b3 SHA1 1b9badc08c514e53bbc2db3a46651875226bf3c7 SHA256 bcb912507e91a54db4cd3938e2a6ca2c59f389cb1d3b0e6cf11cee6001f9eaa8
+MISC ChangeLog 3432 RMD160 3b536f827d1aee49aa6d59c135d992870b5f95bb SHA1 54c355de66dcfb63e5159e3e961db487a734bdc7 SHA256 3dcbb806179b9dd38c2fb4964f7b7e7af73e11d7136e795c157b4859cd0cd683
 MISC metadata.xml 157 RMD160 fd6d83b802caa82822e8bb4d1752063fcda9b47f SHA1 54ccd31d923f052c9111f04c1a7d8b8f04f0a7b2 SHA256 941fe96a972d5a4f49555c01cbfab71d51e81ade3a53322fee549061aa17012c
diff --git a/rox-base/zeroinstall-injector/files/0distutils-r2 b/rox-base/zeroinstall-injector/files/0distutils-r2
new file mode 100755 (executable)
index 0000000..05c1eca
--- /dev/null
@@ -0,0 +1,116 @@
+#!/usr/bin/python2
+
+import os
+from xml.dom import minidom
+import xml.dom
+
+ns0compile = "http://zero-install.sourceforge.net/2006/namespaces/0compile"
+
+def escape(uri):
+       import zeroinstall.injector.model
+       return zeroinstall.injector.model._pretty_escape(uri)
+
+def cacheescape(uri):
+       import zeroinstall.injector.model
+       return zeroinstall.injector.model.escape(uri)
+
+def strip(node):
+       torm = []
+       for c in node.childNodes:
+               if c.nodeType == xml.dom.Node.TEXT_NODE and \
+                  c.nodeValue.strip() == "":
+                       torm.append(c)
+               elif c.hasChildNodes():
+                       strip(c)
+       for c in torm:
+               node.removeChild(c)
+               c.unlink()
+
+class LocalFeed(object):
+       def __init__(self, xmlfile):
+               self.xml = minidom.parse(xmlfile)
+               if self.xml.documentElement.nodeName != "interface":
+                       raise TypeError("Not an interface")
+               strip(self.xml.documentElement)
+       
+       def getUri(self):
+               for element in self.xml.documentElement.getElementsByTagName("feed-for"):
+                       if element.hasAttribute("interface"):
+                               return element.getAttribute("interface")
+               return None
+
+       def edit(self, id=".", main="AppRun", stability="packaged"):
+               for attribute in ("main", "uri"):
+                       if self.xml.documentElement.hasAttribute(attribute):
+                               self.xml.documentElement.removeAttribute(attribute)
+               for group in self.xml.documentElement.getElementsByTagName("group"):
+                       group.setAttribute("main", "AppRun")
+                       if group.hasAttribute("arch") and group.getAttribute("arch") == "*-src":
+                               uname = os.uname()
+                               group.setAttribute("arch", "%s-%s" % (uname[0], uname[-1]))
+                               attr0comp = []
+                               for aidx in range(0, group.attributes.length):
+                                       attr = group.attributes.item(aidx)
+                                       if attr.namespaceURI == ns0compile:
+                                               attr0comp.append(attr)
+                               for attr in attr0comp:
+                                       group.removeAttributeNode(attr)
+                               reqlist = group.getElementsByTagName("requires")
+                               for req in reqlist:
+                                       group.removeChild(req)
+                                       req.unlink()
+                       for imp in group.getElementsByTagName("implementation"):
+                               imp.setAttribute("stability",stability)
+                               imp.setAttribute("id",id)
+
+       def dump(self):
+               print self.xml.toprettyxml()
+
+def main(xmlfile, mode="edit"):
+       try:
+               feed = LocalFeed(xmlfile)
+               if mode == "uri":
+                       print feed.getUri()
+               elif mode == "escape":
+                       print escape(feed.getUri())
+               elif mode == "cache":
+                       print cacheescape(feed.getUri())
+               else:
+                       feed.edit()
+                       feed.dump()
+       except Exception, e:
+               import sys
+               print "Fatal:", e
+               sys.exit(2)
+
+def usage(program):
+       import os.path
+       progname = os.path.basename(program)
+       print "Usage:", progname, "[-u|-e] <xmlfile>"
+       print "Options:"
+       print "\t-u --uri:    Finds the URI from the feed"
+       print "\t-e --escape: Escapes the URI from the feed"
+
+if __name__ == "__main__":
+       from optparse import OptionParser
+       import sys
+       parser = OptionParser(usage="usage: %prog [options] feed.xml",
+               description="By default, edits the given feed and prints the result on stdout.")
+       parser.add_option("-e", "--escape", action="store_const",
+               const="escape", dest="mode",
+               help="Return the cache-escaped URI from the feed on stdout.")
+       parser.add_option("-c", "--cache", action="store_const",
+               const="cache", dest="mode",
+               help="Return the file-escaped URI from the feed on stdout.")
+       parser.add_option("-u", "--uri", action="store_const",
+               const="uri", dest="mode",
+               help="Return the original URI from the feed on stdout.")
+       (options, args) = parser.parse_args()
+       if len(args) == 0:
+               parser.print_help()
+       else:
+               if len(args) > 1:
+                       parser.error("requires exactly one .xml file")
+               main(args[0], options.mode)
+
+# vim: nosta noet sw=4 ts=4
similarity index 65%
rename from rox-base/zeroinstall-injector/zeroinstall-injector-0.43.ebuild
rename to rox-base/zeroinstall-injector/zeroinstall-injector-0.43-r1.ebuild
index aac46292783ba2768aa694af592d7ee9235e1e55..be91f08a459693d8bd806adfe10d949f85fe2279 100644 (file)
@@ -1,8 +1,12 @@
 # Copyright 1999-2010 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/rox-base/zeroinstall-injector/zeroinstall-injector-0.43.ebuild,v 1.1 2010/01/12 13:33:58 lack Exp $
+# $Header: /var/cvsroot/gentoo-x86/rox-base/zeroinstall-injector/zeroinstall-injector-0.43-r1.ebuild,v 1.1 2010/04/01 16:56:12 lack Exp $
 
-EAPI=2
+EAPI=3
+SUPPORT_PYTHON_ABIS="1"
+RESTRICT_PYTHON_ABIS="3.*"
+PYTHON_DEPEND="2"
+PYTHON_USE_WITH="xml"
 inherit distutils
 
 DESCRIPTION="Zeroinstall Injector allows regular users to install software themselves"
@@ -16,21 +20,31 @@ IUSE=""
 
 DEPEND="!<=rox-base/rox-session-0.30"
 RDEPEND=">=dev-python/pygtk-2.0
-       app-crypt/gnupg
-       dev-lang/python[xml]"
+       app-crypt/gnupg"
 
 PYTHON_MODNAME="zeroinstall"
 
 src_prepare() {
        # Change manpage install path (Bug 207495)
        sed -i 's:man/man1:share/man/man1:' setup.py
+       cp "${FILESDIR}/0distutils-r2" "${WORKDIR}/0distutils"
+}
+
+src_compile() {
+       distutils_src_compile
 }
 
 src_install() {
        distutils_src_install
 
+       fix_0launch_gui() {
+               python_convert_shebangs "${PYTHON_ABI}" \
+                       "${ED}$(python_get_sitedir)/zeroinstall/0launch-gui/0launch-gui"
+       }
+       python_execute_function -q fix_0launch_gui
+
        exeinto "/usr/sbin/"
-       newexe "${FILESDIR}/0distutils-r1" 0distutils
+       doexe "${WORKDIR}/0distutils"
 
        local BASE_XDG_CONFIG="/etc/xdg/0install.net"
        local BASE_XDG_DATA="/usr/share/0install.net"
@@ -40,11 +54,3 @@ src_install() {
 
        dodir "${BASE_XDG_DATA}/native_feeds"
 }
-
-pkg_postinst() {
-       python_version
-       # Note: Must use '-f' because python_mod_optimize sometimes leaves old files
-       # around.
-       python_mod_optimize -f \
-               /usr/$(get_libdir)/python${PYVER}/site-packages/zeroinstall
-}