summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Gregory <dp@xora.org.uk>2006-08-27 17:20:35 +0000
committerGraeme Gregory <dp@xora.org.uk>2006-08-27 17:20:35 +0000
commit69383bc09ea895755f1ed236c686e5c6cdf9ced7 (patch)
tree79debc84d115e3331af9e384af855e5dfdb25d2c
parentb59ce10791fa913ef0915e48a514f04ca2815977 (diff)
parent2ef9cf97f34b7ec69f1df908413afa462e09ba61 (diff)
merge of '31791b517fd0fdc4e50c48d20a836408a23727d3'
and 'ce3b6559d2cb3ba65a6dd0f69e76c890fe48f129'
-rw-r--r--classes/base.bbclass8
-rw-r--r--classes/package.bbclass4
-rw-r--r--conf/distro/angstrom-2007.1.conf (renamed from conf/distro/angstrom-2006.9.conf)2
-rw-r--r--conf/distro/include/angstrom.inc5
-rw-r--r--conf/distro/include/sane-srcdates.inc2
-rw-r--r--conf/distro/openomap.conf23
-rw-r--r--conf/machine/h4000.conf1
-rw-r--r--conf/machine/omap5912osk.conf2
-rw-r--r--contrib/feed-browser/includes/.mtn2git_empty0
-rw-r--r--contrib/feed-browser/includes/config.inc118
-rw-r--r--contrib/feed-browser/includes/functions.inc455
-rw-r--r--contrib/feed-browser/index.php475
-rw-r--r--contrib/feed-browser/update.php52
-rw-r--r--contrib/python/.mtn2git_empty0
-rwxr-xr-xcontrib/python/generate-manifest.py326
-rw-r--r--packages/avahi/avahi_0.6.13.bb64
-rw-r--r--packages/avetanabt/avetanabt_20060413.bb63
-rw-r--r--packages/avetanabt/avetanabt_cvs.bb8
-rw-r--r--packages/busybox/busybox_1.2.1.bb2
-rw-r--r--packages/db/db-native_4.3.29.bb4
-rw-r--r--packages/dbus/dbus-glib-native/.mtn2git_empty0
-rw-r--r--packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch32
-rw-r--r--packages/dbus/dbus-glib-native_0.71.bb3
-rw-r--r--packages/dbus/dbus-native_0.92.bb27
-rw-r--r--packages/dbus/dbus_0.92.bb5
-rw-r--r--packages/glibc/glibc-package.bbclass2
-rw-r--r--packages/glibc/glibc_2.4.bb4
-rw-r--r--packages/gnome/gconf-dbus_svn.bb5
-rw-r--r--packages/gnome/libgnomecups_0.2.2.bb2
-rw-r--r--packages/gpe-edit/gpe-edit_0.32.bb4
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.7.bb5
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.4.bb2
-rw-r--r--packages/gstreamer/gstreamer_0.10.8.bb31
-rwxr-xr-xpackages/initscripts/initscripts-1.0/checkroot.sh5
-rwxr-xr-xpackages/initscripts/initscripts-1.0/devices2
-rw-r--r--packages/initscripts/initscripts-1.0/slugos/devices.patch4
-rw-r--r--packages/initscripts/initscripts_1.0.bb2
-rw-r--r--packages/ipsec-tools/ipsec-tools.inc3
-rw-r--r--packages/libvncserver/libvncserver_0.8.2.bb2
-rw-r--r--packages/linux/handhelds-pxa-2.6_cvs.bb4
-rw-r--r--packages/linux/linux-omap1_2.6.12-rc2.bb20
-rw-r--r--packages/networkmanager/networkmanager_0.6.4.bb2
-rw-r--r--packages/nfs-utils/nfs-utils_1.0.6.bb4
-rw-r--r--packages/pango/pango_1.14.0.bb8
-rw-r--r--packages/patch/patch-2.5.9/global-reject-file.diff201
-rw-r--r--packages/patch/patch-2.5.9/unified-reject-files.diff305
-rw-r--r--packages/patch/patch_2.5.9.bb5
-rw-r--r--packages/python/python-2.4.3-manifest.inc6
-rw-r--r--packages/qemu/files/arm_nptl.patch857
-rw-r--r--packages/qemu/qemu-0.8.0/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.8.0/arm_nptl.patch854
-rw-r--r--packages/qemu/qemu-0.8.2/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.8.2/arm_nptl.patch857
-rw-r--r--packages/qemu/qemu-native_0.8.0.bb1
-rw-r--r--packages/qemu/qemu-native_0.8.2.bb7
-rw-r--r--packages/qemu/qemu_0.8.0.bb5
-rw-r--r--packages/qemu/qemu_0.8.2.bb11
-rw-r--r--packages/qemu/qemu_cvs.bb7
-rw-r--r--packages/subversion/subversion_1.3.2.bb23
-rw-r--r--packages/syslog-ng/files/syslog-ng.conf89
-rw-r--r--packages/syslog-ng/syslog-ng_1.6.8.bb5
-rw-r--r--packages/udev/udev-097/links.conf20
-rw-r--r--packages/udev/udev_097.bb2
-rw-r--r--packages/xorg-xserver/xserver-kdrive_git.bb10
64 files changed, 4481 insertions, 576 deletions
diff --git a/classes/base.bbclass b/classes/base.bbclass
index 6f8468b119..e413afb2b3 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -50,7 +50,7 @@ def base_set_filespath(path, d):
overrides = overrides + ":"
for o in overrides.split(":"):
filespath.append(os.path.join(p, o))
- bb.data.setVar("FILESPATH", ":".join(filespath), d)
+ return ":".join(filespath)
FILESPATH = "${@base_set_filespath([ "${FILE_DIRNAME}/${PF}", "${FILE_DIRNAME}/${P}", "${FILE_DIRNAME}/${PN}", "${FILE_DIRNAME}/files", "${FILE_DIRNAME}" ], d)}"
@@ -601,8 +601,6 @@ base_do_compile() {
fi
}
-
-addtask stage after do_compile
base_do_stage () {
:
}
@@ -614,13 +612,13 @@ do_populate_staging[dirs] = "${STAGING_DIR}/${TARGET_SYS}/bin ${STAGING_DIR}/${T
${STAGING_DATADIR} \
${S} ${B}"
-addtask populate_staging after do_compile
+addtask populate_staging after do_package
python do_populate_staging () {
bb.build.exec_func('do_stage', d)
}
-addtask install after do_compile
+addtask install after do_compile
do_install[dirs] = "${S} ${B}"
base_do_install() {
diff --git a/classes/package.bbclass b/classes/package.bbclass
index 0d6a7734af..9b913ecf82 100644
--- a/classes/package.bbclass
+++ b/classes/package.bbclass
@@ -725,7 +725,7 @@ python package_do_split_locales() {
bb.data.setVar('RDEPENDS_%s' % mainpkg, ' '.join(rdep), d)
}
-PACKAGEFUNCS ?= " do_install package_do_split_locales \
+PACKAGEFUNCS ?= " package_do_split_locales \
populate_packages package_do_shlibs \
package_do_pkgconfig read_shlibdeps"
python package_do_package () {
@@ -738,4 +738,4 @@ do_package[dirs] = "${D}"
do_package[deptask] = "do_package"
populate_packages[dirs] = "${D}"
EXPORT_FUNCTIONS do_package do_shlibs do_split_locales mapping_rename_hook
-addtask package before do_build after do_populate_staging
+addtask package before do_build after do_install
diff --git a/conf/distro/angstrom-2006.9.conf b/conf/distro/angstrom-2007.1.conf
index ca7ddc873d..327d4123cc 100644
--- a/conf/distro/angstrom-2006.9.conf
+++ b/conf/distro/angstrom-2007.1.conf
@@ -32,6 +32,8 @@ FEED_URIS += " \
SRCDATE_gconf-dbus = "20060719"
SRCDATE_gnome-vfs-dbus = "20060803"
+PREFERRED_VERSION_qemu-native = "0.8.2"
+
CVS_TARBALL_STASH = "\
http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4/sources/ \
http://www.oesources.org/source/current/"
diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc
index 9c2679aff1..7e765bd925 100644
--- a/conf/distro/include/angstrom.inc
+++ b/conf/distro/include/angstrom.inc
@@ -16,8 +16,8 @@ MAINTAINER = "Angstrom Developers <angstrom-dev@linuxtogo.org>"
INHERIT += "package_ipk debian multimachine"
#Generate locales on the buildsystem instead of on the target. Speeds up first boot, set to "1" to enable
-PREFERRED_PROVIDER_qemu-native = "qemu-qop-nogfx-native"
-ENABLE_BINARY_LOCALE_GENERATION ?= ""
+PREFERRED_PROVIDER_qemu-native = "qemu-native"
+ENABLE_BINARY_LOCALE_GENERATION ?= "1"
#Use the ARM EABI when building for an ARM cpu. We can't use overrides
@@ -32,6 +32,7 @@ TARGET_OS = "linux${@['','-gnueabi'][bb.data.getVar('TARGET_ARCH',d,1)=='arm']}"
#Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"
BUILD_OPTIMIZATION = "-Os"
+CXXFLAGS += "-fvisibility-inlines-hidden"
#ARM EABI is softfloat by default, but let's make sure :)
TARGET_FPU_arm = "soft"
diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc
index b9cc82e1d3..0696ad1909 100644
--- a/conf/distro/include/sane-srcdates.inc
+++ b/conf/distro/include/sane-srcdates.inc
@@ -72,7 +72,7 @@ SRCDATE_oprofile ?= "20060214"
SRCDATE_portaudio ?= "20060814"
SRCDATE_putty ?= "20060814"
SRCDATE_python-cairo ?= "20060814"
-SRCDATE_qemu-native ?= "20060526"
+SRCDATE_qemu-native ?= "20060723"
SRCDATE_roadster ?= "20060814"
SRCDATE_sctzap ?= "20060814"
SRCDATE_tslib ?= "20051101"
diff --git a/conf/distro/openomap.conf b/conf/distro/openomap.conf
index 192400b9a1..fb06ca7f47 100644
--- a/conf/distro/openomap.conf
+++ b/conf/distro/openomap.conf
@@ -9,3 +9,26 @@ TARGET_FPU ?= "soft"
# 2.4 vs 2.6 is a distro decision.
MODUTILS = "26"
BOOTSTRAP_EXTRA_RDEPENDS += "udev"
+
+PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc:gcc-cross"
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}g++:gcc-cross"
+
+#EABI stuff
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/arm-angstrom-linux-gnueabi-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/arm-linux-libc-for-gcc = "glibc-intermediate"
+
+
+#use EABI toolchain
+PREFERRED_VERSION_gcc ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial ?= "4.1.1"
+PREFERRED_VERSION_binutils ?= "2.17"
+PREFERRED_VERSION_binutils-cross ?= "2.17"
+PREFERRED_VERSION_linux-libc-headers ?= "2.6.15.99"
+PREFERRED_VERSION_glibc ?= "2.4"
+PREFERRED_VERSION_glibc-intermediate ?= "2.4"
+
diff --git a/conf/machine/h4000.conf b/conf/machine/h4000.conf
index 410de9a100..41301c1721 100644
--- a/conf/machine/h4000.conf
+++ b/conf/machine/h4000.conf
@@ -11,6 +11,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive"
PREFERRED_PROVIDER_virtual/kernel = "handhelds-pxa-2.6"
ROOT_FLASH_SIZE = "32"
+MODUTILS = "26"
PCMCIA_MANAGER = "pcmciautils"
BOOT_MODULES = " ${@linux_module_packages('${H4000_MODULES}', d)}"
diff --git a/conf/machine/omap5912osk.conf b/conf/machine/omap5912osk.conf
index 49ea6f6b90..a2c01add5d 100644
--- a/conf/machine/omap5912osk.conf
+++ b/conf/machine/omap5912osk.conf
@@ -10,6 +10,8 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-omap1"
PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross"
PREFERRED_VERSION_u-boot = "LABEL.2006.06.30.2020"
+#PREFERRED_VERSION_linux-omap1 = "2.6.17-omap1"
+PREFERRED_VERSION_linux-omap1 = "2.6.12-rc2"
BOOTSTRAP_EXTRA_RDEPENDS += "modutils-collateral"
diff --git a/contrib/feed-browser/includes/.mtn2git_empty b/contrib/feed-browser/includes/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/contrib/feed-browser/includes/.mtn2git_empty
diff --git a/contrib/feed-browser/includes/config.inc b/contrib/feed-browser/includes/config.inc
new file mode 100644
index 0000000000..0a270a8eb0
--- /dev/null
+++ b/contrib/feed-browser/includes/config.inc
@@ -0,0 +1,118 @@
+<?php
+
+define('DB_FILENAME', './feeds.db');
+
+$feeds = array(
+ array(
+ 'distro_name'=>'OpenZaurus',
+ 'distro_version'=>'3.5.4',
+ 'feed_base_url'=>'http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4/feed/',
+ 'feeds'=>array(
+ array(
+ 'name'=>'base',
+ 'url'=>'base',
+ ),
+ array(
+ 'name'=>'opie',
+ 'url'=>'opie',
+ ),
+ array(
+ 'name'=>'x11',
+ 'url'=>'x11',
+ ),
+ array(
+ 'name'=>'upgrades',
+ 'url'=>'upgrades',
+ ),
+ array(
+ 'name'=>'perl',
+ 'url'=>'perl',
+ ),
+ array(
+ 'name'=>'python',
+ 'url'=>'python',
+ ),
+ array(
+ 'name'=>'Collie upgrades',
+ 'url'=>'upgrades/machine/collie',
+ ),
+ array(
+ 'name'=>'Tosa upgrades',
+ 'url'=>'upgrades/machine/tosa',
+ ),
+ array(
+ 'name'=>'Poodle upgrades',
+ 'url'=>'upgrades/machine/poodle',
+ ),
+ array(
+ 'name'=>'Poodle',
+ 'url'=>'machine/poodle',
+ ),
+ array(
+ 'name'=>'Collie',
+ 'url'=>'machine/collie',
+ ),
+ array(
+ 'name'=>'Tosa',
+ 'url'=>'machine/tosa',
+ )
+ )
+ ),
+ array(
+ 'distro_name'=>'OpenZaurus',
+ 'distro_version'=>'3.5.4.1',
+ 'feed_base_url'=>'http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4.1/feed/',
+ 'feeds'=>array(
+ array(
+ 'name'=>'base',
+ 'url'=>'base',
+ ),
+ array(
+ 'name'=>'opie',
+ 'url'=>'opie',
+ ),
+ array(
+ 'name'=>'perl',
+ 'url'=>'perl',
+ ),
+ array(
+ 'name'=>'python',
+ 'url'=>'python',
+ ),
+ array(
+ 'name'=>'upgrades',
+ 'url'=>'upgrades',
+ ),
+ array(
+ 'name'=>'x11',
+ 'url'=>'x11',
+ ),
+ array(
+ 'name'=>'C7x0',
+ 'url'=>'machine/c7x0',
+ ),
+ array(
+ 'name'=>'Spitz',
+ 'url'=>'machine/spitz',
+ ),
+ array(
+ 'name'=>'Akita',
+ 'url'=>'machine/akita',
+ ),
+ array(
+ 'name'=>'Akita upgrades',
+ 'url'=>'upgrades/machine/akita',
+ ),
+ array(
+ 'name'=>'C7x0 upgrades',
+ 'url'=>'upgrades/machine/c7x0',
+ ),
+ array(
+ 'name'=>'Spitz upgrades',
+ 'url'=>'upgrades/machine/spitz',
+ )
+ )
+ )
+);
+
+?>
diff --git a/contrib/feed-browser/includes/functions.inc b/contrib/feed-browser/includes/functions.inc
new file mode 100644
index 0000000000..4745c75910
--- /dev/null
+++ b/contrib/feed-browser/includes/functions.inc
@@ -0,0 +1,455 @@
+<?php
+/*
+ * (c) Koen Kooi 2006
+ * (c) Marcin Juszkiewicz 2006
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License along
+ * with this library; see the file COPYING.LIB. If not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ */
+
+error_reporting(E_ALL);
+
+function db_query($query)
+{
+ $result = FALSE;
+
+ if($db_h = sqlite_open(DB_FILENAME))
+ {
+ $query_h = sqlite_query ($db_h, $query);
+ $result = sqlite_fetch_all ($query_h, SQLITE_ASSOC);
+ sqlite_close($db_h);
+ }
+
+ return $result;
+}
+
+function db_query_n($query)
+{
+ $result = FALSE;
+
+ if($db_h = sqlite_open(DB_FILENAME))
+ {
+ $query_h = sqlite_query ($db_h, $query);
+ sqlite_close($db_h);
+ }
+
+ return $result;
+}
+
+function db_table_exists ($db, $mytable)
+{
+ if($query = sqlite_query ($db, "SELECT name FROM sqlite_master WHERE type='table'"))
+ {
+ $tables = sqlite_fetch_all ($query, SQLITE_ASSOC);
+
+ if (!$tables)
+ {
+ return FALSE;
+ }
+ else
+ {
+ foreach ($tables as $table)
+ {
+ if ($table['name'] == $mytable)
+ {
+ return TRUE;
+ }
+ }
+ }
+ }
+
+ // function which is expected to return something need to return something always
+ return FALSE;
+}
+
+function insert_feeds ($db)
+{
+ global $feeds;
+
+ if(isset($feeds))
+ {
+ $id = 1;
+
+ foreach($feeds as $distro)
+ {
+ foreach($distro['feeds'] as $feed)
+ {
+ sqlite_query($db, "INSERT INTO feeds (f_id, f_name, f_uri) VALUES
+ (
+ {$id},
+ '{$distro['distro_name']} {$distro['distro_version']} {$feed['name']}',
+ '{$distro['feed_base_url']}{$feed['url']}'
+ )");
+
+ $id++;
+ }
+ }
+ }
+}
+
+function searchletter($searchletter = '')
+{
+ $ipkgoutput = "<div id='letters'>";
+ $alfabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y');
+
+ foreach($alfabet as $letter)
+ {
+ if($letter == $searchletter)
+ {
+ $ipkgoutput .= sprintf(" %s |", $letter );
+ }
+ else
+ {
+ $ipkgoutput .= sprintf(" <a href='?action=letter&amp;g=%s' title='packages which names begins with \"%s\"'>%s</a> |", $letter, $letter, $letter );
+ }
+ }
+
+ $ipkgoutput .= " <a href='?action=letter&amp;g=z' title='packages which names begins with \"z\"'>z</a></div>";
+
+ return $ipkgoutput;
+}
+
+function searchpkg ($searchword)
+{
+ if($result = db_query("SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_name LIKE '$searchword' ORDER BY p_name ASC"))
+ {
+ return generate_list_of_packages($result);
+ }
+}
+
+function generate_list_of_packages($query_result)
+{
+ $ipkgoutput = "<table>\n";
+ $ipkgoutput .="<tr><th>Package</th><th>Section</th><th>Description</th></tr>\n";
+
+ foreach($query_result as $package)
+ {
+ if (!strstr ($package['p_name'], 'locale'))
+ {
+ if(strlen($package['p_desc']) > 40)
+ {
+ $pos = strpos($package['p_desc'],' ', 40);
+
+ if($pos)
+ {
+ $package['p_desc'] = substr($package['p_desc'], 0, $pos) . '...';
+ }
+ }
+
+ $ipkgoutput .= sprintf
+ ("<tr><td><a href='?action=details&amp;pnm=%s'>%s</a></td><td><a href=\"?action=section&amp;section=%s\">%s</a></td><td> %s</td></tr>\n",
+ urlencode($package['p_name']), $package['p_name'], $package['p_section'], $package['p_section'], htmlentities($package['p_desc']));
+ }
+
+ }
+
+ $ipkgoutput .= '</table>';
+
+ return $ipkgoutput;
+}
+
+function searchsection($section)
+{
+ if($result = db_query("SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_section LIKE '$section%' ORDER BY p_section ASC, p_name ASC"))
+ {
+ return generate_list_of_packages($result);
+ }
+}
+
+function pkgdetails ($package)
+{
+ $result = db_query("SELECT * FROM packages,feeds
+ WHERE (packages.p_name='$package' OR packages.p_provides='$package')
+ AND feeds.f_id = packages.p_feed
+ ORDER BY packages.p_version DESC, feeds.f_name ASC, packages.p_arch DESC ");
+
+ // display first result
+
+ if ($result)
+ {
+ $package = $result[0];
+
+ $details = sprintf("<h1>Package details for %s %s</h1>", $package['packages.p_name'], $package['packages.p_version']);
+ $details .= sprintf ("<p id='description'>%s</p>", htmlentities($package['packages.p_desc']));
+ $details .= "<dl>";
+
+ $details .= sprintf ("\n<dt>Maintainer:</dt><dd>%s</dd>", str_replace(array('@',', '), array(' at ', '<br />'), htmlentities($package['packages.p_maintainer'])));
+
+ if($package['packages.p_homepage'])
+ {
+ $details .= sprintf ("\n<dt>Homepage:</dt><dd>%s</dd>", $package['packages.p_homepage']);
+ }
+
+ if($package['packages.p_section'])
+ {
+ $details .= sprintf ("\n<dt>Section:</dt><dd><a href='?action=section&amp;section=%s'>%s</a></dd>", $package['packages.p_section'],$package['packages.p_section']);
+ }
+
+ if($package['packages.p_depends'])
+ {
+ $details .= sprintf ("\n<dt>Depends:</dt><dd>%s</dd>", addlinks ($package['packages.p_depends']));
+ }
+
+ if($package['packages.p_recommends'])
+ {
+ $details .= sprintf ("\n<dt>Recommends:</dt><dd>%s</dd>", addlinks ($package['packages.p_recommends']));
+ }
+
+ if($package['packages.p_replaces'])
+ {
+ $details .= sprintf ("\n<dt>Replaces:</dt><dd>%s</