#!/usr/bin/env python # Given a URL with a load of tarballs in, print commands to update port version # numbers. This is intended for use with things like: # http://ftp.gnome.org/pub/GNOME/desktop/2.4/2.4.2/sources/ import os, sys, re, glob import garstowlib aliases = { "GConf": "gconf", "ORBit2": "orbit", "Terminal": "terminal", "Thunar": "thunar", "gconfmm": "gconfmm2.4", "glade3": "glade", "glibmm": "glibmm2.4", "gnome-vfsmm": "gnome-vfsmm2.4", "gtk+": "gtk", "gtkmm": "gtkmm2.4", "libart_lgpl": "libart", "libglademm": "libglademm2.4", "libgnomecanvasmm": "libgnomecanvasmm2.4", "libgnomemm": "libgnomemm2.4", "libsigc++": "libsigc++2.0", } version_scores = { "tar.gz": 10, "tar.bz2": 20, } def getfiles(url): f = os.popen("elinks -dump " + url) files = {} for l in f.readlines(): m = re.search(r'([A-Za-z0-9_+-]+)-(X11R\d+\.\d+-)?([0-9\.]+[0-9a-z]*(?:-rc[0-9]+)?)\.(tar\.gz|tar\.bz2)', l) if m is not None: (fn, name, xorgtag, version, format) = m.group(0, 1, 2, 3, 4) l = files.setdefault(name, []) l.append((version, version_scores[format], fn, xorgtag, format)) f.close() found = {} for (name, l) in files.items(): l.sort() (version, vs, fn, xorgtag, format) = l[-1] found[fn] = (name, xorgtag, version, format) return found def main(args): fs = {} for arg in args: print "# Reading filenames from " + arg fs.update(getfiles(arg)) os.chdir(garstowlib.gar_dir) ports = {} package_names = garstowlib.get_package_names() fns = fs.keys() fns.sort() for fn in fns: (name, xorgtag, version, format) = fs[fn] portname = aliases.get(name, name) if not portname in package_names: print "# Can't find corresponding port for " + name else: portdir = package_names[portname] ports[portname] = portdir new = garstowlib.parse_version(version) oldv = garstowlib.get_version(portname) old = garstowlib.parse_version(oldv) if new > old: makefile = portdir + "/Makefile" print "# from " + oldv perl = "s/^(GARVERSION =).*/$1 %s/;" % version portfile = garstowlib.get_portfile(portname) if xorgtag is not None: if "XORGTAG" in portfile.vars: perl += "s/^(XORGTAG =).*/$1 %s/;" % xorgtag else: perl += "s/^(GARVERSION =.*)/$1\\nXORGTAG = %s/" % xorgtag print "perl -i.bak -pe '%s' %s" % (perl, makefile) print "# For all these packages:" pns = ports.keys() pns.sort(garstowlib.cmp_install) print "# LIBDEPS = " + " ".join(map(lambda p: ports[p], pns)) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))