buildroot/support/scripts/xorg-release
Thomas De Schampheleire 60714bb2ed trivial: fix typo 'informations'
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>
2014-07-24 22:31:20 +02:00

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)