60714bb2ed
In English, unlike in French, almost all usages of the word 'information' are uncountable, meaning that 'informations' is invalid. This patch fixes this typo throughout the tree, except in CHANGES and docs/news.html (historic text). Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
181 lines
6.3 KiB
Python
Executable File
181 lines
6.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
# This script generates a report on the packaging status of X.org
|
|
# releases in Buildroot. It does so by downloading the list of
|
|
# tarballs that are part of a given X.org release, and compare that
|
|
# with the packages that are available in Buildroot.
|
|
|
|
import BeautifulSoup
|
|
import re
|
|
import os
|
|
import urllib
|
|
from distutils.version import LooseVersion
|
|
|
|
# This can be customized
|
|
XORG_VERSION = "X11R7.7"
|
|
|
|
# Key names in dictionaries
|
|
XORG_VERSION_KEY = "xorg-version"
|
|
BR_VERSION_KEY = "br-version"
|
|
BR_NAME_KEY = "br-name"
|
|
|
|
# Packages part of X.org releases that we do not want to package in
|
|
# Buildroot (old drivers for hardware unlikely to be used in embedded
|
|
# contexts).
|
|
XORG_EXCEPTIONS = [
|
|
'xf86-video-suncg6',
|
|
'xf86-video-sunffb',
|
|
]
|
|
|
|
# Get the list of tarballs of a X.org release, parse it, and return a
|
|
# dictionary of dictionaries, of the form:
|
|
#
|
|
# { <name_of_package> : { XORG_VERSION_KEY: <version_of_package> },
|
|
# <name_of_package2> : { XORG_VERSION_KEY: <version_of_package2> }}
|
|
#
|
|
def get_xorg_release_pkgs():
|
|
u = urllib.URLopener().open("http://www.x.org/releases/%s/src/everything/" % XORG_VERSION)
|
|
b = BeautifulSoup.BeautifulSoup()
|
|
b.feed(u.read())
|
|
links = b.findAll("a")
|
|
packages = {}
|
|
r = re.compile("(.*)-([0-9\.]*).tar.bz2")
|
|
# We now have a list of all links.
|
|
for link in links:
|
|
href = link.get("href")
|
|
# Skip everything but tarballs
|
|
if not href.endswith(".tar.bz2"):
|
|
continue
|
|
# Separate the name and the version
|
|
groups = r.match(href)
|
|
if not groups:
|
|
continue
|
|
name = groups.group(1)
|
|
version = groups.group(2)
|
|
# Skip packages we don't want to hear about
|
|
if name in XORG_EXCEPTIONS:
|
|
continue
|
|
packages[name] = { XORG_VERSION_KEY : version }
|
|
return packages
|
|
|
|
# Files and directories in package/x11r7/ that should be ignored in
|
|
# our processing.
|
|
BUILDROOT_EXCEPTIONS = [
|
|
"mcookie", # Code is directly in package directory
|
|
"x11r7.mk",
|
|
"Config.in",
|
|
"xdriver_xf86-input-tslib", # From Pengutronix, not part of X.org releases
|
|
]
|
|
|
|
# Prefixes of directories in package/x11r7/ that must be stripped
|
|
# before trying to match Buildroot package names with X.org tarball
|
|
# names.
|
|
BUILDROOT_PREFIXES = [
|
|
"xapp",
|
|
"xdriver",
|
|
"xfont",
|
|
"xlib",
|
|
"xserver",
|
|
"xutil",
|
|
"xproto",
|
|
]
|
|
|
|
# From a Buildroot package name, try to see if a prefix should be
|
|
# stripped from it. For example, passing "xapp_xlsfonts" as argument
|
|
# to this function will return "xlsfonts".
|
|
def buildroot_strip_prefix(dirname):
|
|
for prefix in BUILDROOT_PREFIXES:
|
|
if dirname.startswith(prefix + "_"):
|
|
return dirname[len(prefix) + 1:]
|
|
return dirname
|
|
|
|
# From a Buildroot package name, parse its .mk file to find the
|
|
# Buildroot version of the package by looking at the <foo>_VERSION
|
|
# line.
|
|
def buildroot_get_version(dirname):
|
|
f = open(os.path.join("package", "x11r7", dirname, dirname + ".mk"))
|
|
r = re.compile("^([A-Z0-9_]*)_VERSION = ([0-9\.]*)$")
|
|
for l in f.readlines():
|
|
m = r.match(l)
|
|
if m:
|
|
return m.group(2)
|
|
return None
|
|
|
|
# Augment the information of the X.org list of packages (given as
|
|
# argument) by details about their packaging in Buildroot. Those
|
|
# details are found by looking at the contents of package/x11r7/.
|
|
def get_buildroot_pkgs(packages):
|
|
dirs = os.listdir(os.path.join(os.getcwd(), "package", "x11r7"))
|
|
for d in dirs:
|
|
# Skip exceptions
|
|
if d in BUILDROOT_EXCEPTIONS:
|
|
continue
|
|
pkgname = buildroot_strip_prefix(d)
|
|
version = buildroot_get_version(d)
|
|
if packages.has_key(pkgname):
|
|
# There is a X.org package of the same name, so we just
|
|
# add information to the existing dict entry.
|
|
packages[pkgname]['br-version'] = version
|
|
packages[pkgname]['br-name'] = d
|
|
else:
|
|
# There is no X.org package with this name, so we add a
|
|
# new dict entry.
|
|
packages[pkgname] = { BR_VERSION_KEY: version,
|
|
BR_NAME_KEY : d }
|
|
return packages
|
|
|
|
def show_summary(packages):
|
|
FORMAT_STRING = "%40s | %15s | %15s | %-30s"
|
|
print FORMAT_STRING % ("Package name", "Vers in BR", "Vers in X.org", "Action")
|
|
print FORMAT_STRING % ("-" * 40, "-" * 15, "-" * 15, "-" * 30)
|
|
pkgs = packages.keys()
|
|
pkgs.sort()
|
|
total_pkgs = 0
|
|
upgrade_pkgs = 0
|
|
add_pkgs = 0
|
|
remove_pkgs = 0
|
|
nothing_todo_pkgs = 0
|
|
for pkgname in pkgs:
|
|
pkg = packages[pkgname]
|
|
total_pkgs += 1
|
|
if pkg.has_key(XORG_VERSION_KEY) and not pkg.has_key(BR_VERSION_KEY):
|
|
xorg_version = pkg[XORG_VERSION_KEY]
|
|
br_version = "N/A"
|
|
action = "Add to Buildroot"
|
|
add_pkgs += 1
|
|
elif not pkg.has_key(XORG_VERSION_KEY) and pkg.has_key(BR_VERSION_KEY):
|
|
br_version = pkg[BR_VERSION_KEY]
|
|
xorg_version = "N/A"
|
|
action = "Remove from Buildroot"
|
|
remove_pkgs += 1
|
|
elif LooseVersion(pkg[XORG_VERSION_KEY]) > LooseVersion(pkg[BR_VERSION_KEY]):
|
|
br_version = pkg[BR_VERSION_KEY]
|
|
xorg_version = pkg[XORG_VERSION_KEY]
|
|
action = "Upgrade"
|
|
upgrade_pkgs += 1
|
|
elif LooseVersion(pkg[XORG_VERSION_KEY]) < LooseVersion(pkg[BR_VERSION_KEY]):
|
|
br_version = pkg[BR_VERSION_KEY]
|
|
xorg_version = pkg[XORG_VERSION_KEY]
|
|
action = "More recent"
|
|
nothing_todo_pkgs += 1
|
|
else:
|
|
br_version = pkg[BR_VERSION_KEY]
|
|
xorg_version = pkg[XORG_VERSION_KEY]
|
|
action = ""
|
|
nothing_todo_pkgs += 1
|
|
|
|
print FORMAT_STRING % (pkgname, br_version.center(15), xorg_version.center(15), action)
|
|
print FORMAT_STRING % ("-" * 40, "-" * 15, "-" * 15, "-" * 30)
|
|
STAT_FORMAT_STRING = "%40s : %3d"
|
|
print STAT_FORMAT_STRING % ("Total number of packages", total_pkgs)
|
|
print STAT_FORMAT_STRING % ("Packages to upgrade", upgrade_pkgs)
|
|
print STAT_FORMAT_STRING % ("Packages to add", add_pkgs)
|
|
print STAT_FORMAT_STRING % ("Packages to remove", remove_pkgs)
|
|
print STAT_FORMAT_STRING % ("Packages with nothing to do", nothing_todo_pkgs)
|
|
|
|
packages = get_xorg_release_pkgs()
|
|
packages = get_buildroot_pkgs(packages)
|
|
# print packages
|
|
show_summary(packages)
|
|
|