diff options
251 files changed, 18766 insertions, 467 deletions
diff --git a/classes/kernel-arch.bbclass b/classes/kernel-arch.bbclass index 2ce0f9727d..65d220063e 100644 --- a/classes/kernel-arch.bbclass +++ b/classes/kernel-arch.bbclass @@ -32,8 +32,10 @@ def map_kernel_arch(a, d): export ARCH = "${@map_kernel_arch(bb.data.getVar('TARGET_ARCH', d, 1), d)}" def map_uboot_arch(a, d): - if a == "powerpc": - return "ppc" + import re + + if re.match('powerpc$', a): return 'ppc' + elif re.match('i.86$', a): return 'x86' return a export UBOOT_ARCH = "${@map_uboot_arch(bb.data.getVar('ARCH', d, 1), d)}" diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index a7d34ca476..5085d9cabd 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -16,8 +16,15 @@ python __anonymous () { depends = bb.data.getVar("DEPENDS", d, 1) depends = "%s u-boot-mkimage-openmoko-native" % depends bb.data.setVar("DEPENDS", depends, d) + + image = bb.data.getVar('INITRAMFS_IMAGE', d, True) + if image != '' and image is not None: + bb.data.setVar('INITRAMFS_TASK', '${INITRAMFS_IMAGE}:do_rootfs', d) } +INITRAMFS_IMAGE ?= "" +INITRAMFS_TASK ?= "" + inherit kernel-arch PACKAGES_DYNAMIC += "kernel-module-*" @@ -79,21 +86,28 @@ kernel_do_compile() { fi } -INITRAMFS_SYMLINK_NAME ?= "initramfs-${MACHINE}" -INITRAMFS_IMAGE_TARGET ?= "initramfs-image" do_builtin_initramfs() { - unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE - cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_SYMLINK_NAME}" usr/initramfs_data.cpio.gz - oe_runmake ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" - install -d ${DEPLOY_DIR_IMAGE} - install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}-initramfs.bin - # Make sure to kill injected initramfs, in case someone will do "-c compile -f" - rm usr/initramfs_data.cpio.gz + if [ ! -z "${INITRAMFS_IMAGE}" ]; then + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE + cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz" usr/initramfs_data.cpio.gz + oe_runmake ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" + + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}-${INITRAMFS_IMAGE}.bin + package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}-${INITRAMFS_IMAGE}.bin + + # Make sure to kill injected initramfs, in case someone will do "-c compile -f" + rm usr/initramfs_data.cpio.gz + + cd ${DEPLOY_DIR_IMAGE} + rm -f ${KERNEL_IMAGE_SYMLINK_NAME}-${INITRAMFS_IMAGE}.bin + ln -sf ${KERNEL_IMAGE_BASE_NAME}-${INITRAMFS_IMAGE}.bin ${KERNEL_IMAGE_SYMLINK_NAME}-${INITRAMFS_IMAGE}.bin + package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_SYMLINK_NAME}-${INITRAMFS_IMAGE}.bin + fi } -#addtask builtin_initramfs after do_compile -#do_builtin_initramfs[nostamp] = "1" -#do_builtin_initramfs[depends] = "${INITRAMFS_IMAGE_TARGET}:do_rootfs" +addtask builtin_initramfs before do_build after do_package_write +do_builtin_initramfs[depends] = '${INITRAMFS_TASK}' kernel_do_stage() { ASMDIR=`readlink include/asm` @@ -148,6 +162,8 @@ kernel_do_stage() { install -m 0644 arch/x86/Makefile* ${STAGING_KERNEL_DIR}/arch/x86 fi cp -fR include/config* ${STAGING_KERNEL_DIR}/include/ + # Install kernel images and system.map to staging + [ -e vmlinux ] && install -m 0644 vmlinux ${STAGING_KERNEL_DIR}/ install -m 0644 ${KERNEL_OUTPUT} ${STAGING_KERNEL_DIR}/${KERNEL_IMAGETYPE} install -m 0644 System.map ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} [ -e Module.symvers ] && install -m 0644 Module.symvers ${STAGING_KERNEL_DIR}/ diff --git a/classes/opie.bbclass b/classes/opie.bbclass index 6324dbf522..bd1bbaf578 100644 --- a/classes/opie.bbclass +++ b/classes/opie.bbclass @@ -22,7 +22,6 @@ DEPENDS_prepend = "${@["libopie2 ", ""][(bb.data.getVar('PN', d, 1) == 'libopie2 # to be consistent, put all targets into workdir # NOTE: leave one space at the end, other files are expecting that EXTRA_QMAKEVARS_POST += " DESTDIR=${S} " -EXTRA_QMAKEVARS_POST += " DEFINES+=OPIE_BINDIR='\"${bindir}\"' DEFINES+=OPIE_LIBDIR='\"${libdir}/opie/lib\"' DEFINES+=OPIE_QTDIR='\"${libdir}/opie\"' " # Opie standard TAG value TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}" diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index a98b4a71a5..0dd6900d77 100644 --- a/classes/packaged-staging.bbclass +++ b/classes/packaged-staging.bbclass @@ -16,28 +16,14 @@ PSTAGE_PKGARCH = "${BUILD_SYS}" PSTAGE_EXTRAPATH ?= "" PSTAGE_PKGPATH = "${DISTRO}${PSTAGE_EXTRAPATH}" PSTAGE_PKGPN = "${@bb.data.expand('staging-${PN}-${MULTIMACH_ARCH}${TARGET_VENDOR}-${TARGET_OS}', d).replace('_', '-')}" -PSTAGE_PKGNAME = "${PSTAGE_PKGPN}_${PSTAGE_PKGVERSION}_${PSTAGE_PKGARCH}.ipk" +PSTAGE_PKGNAME = "${PSTAGE_PKGPN}_${PSTAGE_PKGVERSION}_${PSTAGE_PKGARCH}.ipk" PSTAGE_PKG = "${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGPATH}/${PSTAGE_PKGNAME}" # multimachine.bbclass will override this but add a default in case we're not using it MULTIMACH_ARCH ?= "${PACKAGE_ARCH}" PSTAGE_NATIVEDEPENDS = "\ - pkgconfig-native \ - autoconf-native \ - automake-native \ - curl-native \ - zlib-native \ - libtool-native \ - gnu-config-native \ shasum-native \ - libtool-native \ - automake-native \ - update-alternatives-cworth-native \ - ipkg-utils-native \ - opkg-native \ - m4-native \ - quilt-native \ stagemanager-native \ " @@ -69,26 +55,31 @@ python () { # Add task dependencies if we're active, otherwise mark packaged staging # as inactive. if pstage_allowed: - deps = bb.data.getVarFlag('do_populate_staging', 'depends', d) or "" - deps += " stagemanager-native:do_populate_staging" - bb.data.setVarFlag('do_populate_staging', 'depends', deps, d) - deps = bb.data.getVarFlag('do_setscene', 'depends', d) or "" - deps += " opkg-native:do_populate_staging ipkg-utils-native:do_populate_staging" + deps += " stagemanager-native:do_populate_staging" bb.data.setVarFlag('do_setscene', 'depends', deps, d) + + policy = bb.data.getVar("BB_STAMP_POLICY", d, True) + if policy == "whitelist" or policy == "full": + deps = bb.data.getVarFlag('do_setscene', 'recrdeptask', d) or "" + deps += " do_setscene" + bb.data.setVarFlag('do_setscene', 'recrdeptask', deps, d) + bb.data.setVar("PSTAGING_ACTIVE", "1", d) else: bb.data.setVar("PSTAGING_ACTIVE", "0", d) } -DEPLOY_DIR_PSTAGE = "${DEPLOY_DIR}/pstage" -PSTAGE_MACHCONFIG = "${DEPLOY_DIR_PSTAGE}/opkg.conf" +DEPLOY_DIR_PSTAGE = "${DEPLOY_DIR}/pstage" +PSTAGE_MACHCONFIG = "${DEPLOY_DIR_PSTAGE}/opkg.conf" + +PSTAGE_PKGMANAGER = "stage-manager-ipkg" -PSTAGE_BUILD_CMD = "${IPKGBUILDCMD}" -PSTAGE_INSTALL_CMD = "opkg-cl install -force-depends -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}" -PSTAGE_UPDATE_CMD = "opkg-cl update -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}" -PSTAGE_REMOVE_CMD = "opkg-cl remove -force-depends -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}" -PSTAGE_LIST_CMD = "opkg-cl list_installed -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR}" +PSTAGE_BUILD_CMD = "stage-manager-ipkg-build -o 0 -g 0" +PSTAGE_INSTALL_CMD = "${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -force-depends -o ${TMPDIR} install" +PSTAGE_UPDATE_CMD = "${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR} update" +PSTAGE_REMOVE_CMD = "${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -force-depends -o ${TMPDIR} remove" +PSTAGE_LIST_CMD = "${PSTAGE_PKGMANAGER} -f ${PSTAGE_MACHCONFIG} -o ${TMPDIR} list_installed" PSTAGE_TMPDIR_STAGE = "${WORKDIR}/staging-pkg" @@ -104,10 +95,21 @@ def pstage_manualclean(srcname, destvarname, d): bb.note("rm %s" % filepath) os.system("rm %s" % filepath) +def pstage_set_pkgmanager(d): + import bb + path = bb.data.getVar("PATH", d, 1) + pkgmanager = bb.which(path, 'opkg-cl') + if pkgmanager == "": + pkgmanager = bb.which(path, 'ipkg-cl') + if pkgmanager != "": + bb.data.setVar("PSTAGE_PKGMANAGER", pkgmanager, d) + + def pstage_cleanpackage(pkgname, d): import os, bb - path = bb.data.getVar("PATH", d, 1) + path = bb.data.getVar("PATH", d, 1) + pstage_set_pkgmanager(d) list_cmd = bb.data.getVar("PSTAGE_LIST_CMD", d, True) bb.note("Checking if staging package installed") @@ -128,16 +130,16 @@ def pstage_cleanpackage(pkgname, d): bb.utils.unlockfile(lf) do_clean_prepend() { - """ - Clear the build and temp directories - """ + """ + Clear the build and temp directories + """ removepkg = bb.data.expand("${PSTAGE_PKGPN}", d) pstage_cleanpackage(removepkg, d) - stagepkg = bb.data.expand("${PSTAGE_PKG}", d) - bb.note("Removing staging package %s" % stagepkg) - os.system('rm -rf ' + stagepkg) + stagepkg = bb.data.expand("${PSTAGE_PKG}", d) + bb.note("Removing staging package %s" % stagepkg) + os.system('rm -rf ' + stagepkg) } staging_helper () { @@ -151,6 +153,14 @@ staging_helper () { echo "arch $arch $priority" >> $conffile priority=$(expr $priority + 5) done + echo "dest root /" >> $conffile + fi + if [ ! -e ${TMPDIR}${layout_libdir}/opkg/info/ ]; then + mkdir -p ${TMPDIR}${layout_libdir}/opkg/info/ + fi + if [ ! -e ${TMPDIR}${layout_libdir}/ipkg/ ]; then + cd ${TMPDIR}${layout_libdir}/ + ln -s opkg/ ipkg fi } @@ -164,26 +174,71 @@ python packagestage_scenefunc () { if bb.data.getVar("PSTAGING_ACTIVE", d, 1) == "0": return + bb.build.exec_func("staging_helper", d) + removepkg = bb.data.expand("${PSTAGE_PKGPN}", d) pstage_cleanpackage(removepkg, d) stagepkg = bb.data.expand("${PSTAGE_PKG}", d) if os.path.exists(stagepkg): - bb.note("Following speedup\n") path = bb.data.getVar("PATH", d, 1) - installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1) - - bb.build.exec_func("staging_helper", d) - - bb.debug(1, "Staging stuff already packaged, using that instead") - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) - ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg)) - bb.utils.unlockfile(lf) + pstage_set_pkgmanager(d) + file = bb.data.getVar("FILE", d, True) + bb.debug(2, "Packaged staging active for %s\n" % file) + + # + # Install the staging package somewhere temporarily so we can extract the stamp files + # + cmd = bb.data.expand("${PSTAGE_PKGMANAGER} -force-depends -f ${PSTAGE_MACHCONFIG} -o ${WORKDIR}/tstage install", d) + ret = os.system("PATH=\"%s\" %s %s" % (path, cmd, stagepkg)) if ret != 0: - bb.note("Failure installing prestage package") + bb.fatal("Couldn't install the staging package to a temp directory") - bb.build.make_stamp("do_stage_package_populated", d) + # + # Copy the stamp files into the main stamps directoy + # + cmd = bb.data.expand("cp -dpR ${WORKDIR}/tstage/stamps/* ${TMPDIR}/stamps/", d) + ret = os.system(cmd) + if ret != 0: + bb.fatal("Couldn't copy the staging package stamp files") + + # + # Iterate over the stamps seeing if they're valid. If we find any that + # are invalid or the task wasn't in the taskgraph, assume caution and + # do a rebuild. + # + # FIXME - some tasks are safe to ignore in the task graph. e.g. package_write_* + stageok = True + taskscovered = bb.data.getVar("PSTAGE_TASKS_COVERED", d, True).split() + stamp = bb.data.getVar("STAMP", d, True) + for task in taskscovered: + task = 'do_' + task + stampfn = "%s.%s" % (stamp, task) + bb.debug(1, "Checking %s" % (stampfn)) + if os.path.exists(stampfn): + stageok = bb.runqueue.check_stamp_fn(file, task, d) + bb.debug(1, "Result %s" % (stageok)) + if not stageok: + break + + # Remove the stamps and files we added above + # FIXME - we should really only remove the stamps we added + os.system('rm -f ' + stamp + '.*') + os.system(bb.data.expand("rm -rf ${WORKDIR}/tstage", d)) + + if stageok: + bb.note("Staging package found, using it for %s." % file) + installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1) + lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg)) + bb.utils.unlockfile(lf) + if ret != 0: + bb.note("Failure installing prestage package") + + bb.build.make_stamp("do_stage_package_populated", d) + else: + bb.note("Staging package found but invalid for %s" % file) } packagestage_scenefunc[cleandirs] = "${PSTAGE_TMPDIR_STAGE}" @@ -224,9 +279,17 @@ populate_staging_postamble () { # list the packages currently installed in staging # ${PSTAGE_LIST_CMD} | awk '{print $1}' > ${DEPLOY_DIR_PSTAGE}/installed-list + # exitcode == 5 is ok, it means the files change set +e stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u -d ${PSTAGE_TMPDIR_STAGE}/staging + exitcode=$? + if [ "$exitcode" != "5" -a "$exitcode" != "0" ]; then + exit $exitcode + fi stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u -d ${PSTAGE_TMPDIR_STAGE}/cross + if [ "$exitcode" != "5" -a "$exitcode" != "0" ]; then + exit $exitcode + fi set -e fi } @@ -263,7 +326,6 @@ staging_packager () { fi ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGPATH} - ${PSTAGE_INSTALL_CMD} ${PSTAGE_PKG} } staging_package_installer () { @@ -275,6 +337,14 @@ staging_package_installer () { echo "Status: install user installed" >> $STATUSFILE echo "Architecture: ${PSTAGE_PKGARCH}" >> $STATUSFILE echo "" >> $STATUSFILE + + CTRLFILE=${TMPDIR}${layout_libdir}/opkg/info/${PSTAGE_PKGPN}.control + echo "Package: ${PSTAGE_PKGPN}" > $CTRLFILE + echo "Version: ${PSTAGE_PKGVERSION}" >> $CTRLFILE + echo "Architecture: ${PSTAGE_PKGARCH}" >> $CTRLFILE + + cd ${PSTAGE_TMPDIR_STAGE} + find -type f | grep -v ./CONTROL | sed -e 's/^\.//' > ${TMPDIR}${layout_libdir}/opkg/info/${PSTAGE_PKGPN}.list } python do_package_stage () { @@ -317,7 +387,7 @@ python do_package_stage () { if bb.data.inherits_class('package_deb', d): if arch == 'all': srcname = bb.data.expand(pkgname + "_${PV}-" + pr + "_all.deb", d) - else: + else: srcname = bb.data.expand(pkgname + "_${PV}-" + pr + "_${DPKG_ARCH}.deb", d) srcfile = bb.data.expand("${DEPLOY_DIR_DEB}/" + arch + "/" + srcname, d) if os.path.exists(srcfile): @@ -335,6 +405,7 @@ python do_package_stage () { bb.build.make_stamp("do_package_stage", d) os.system("cp -dpR %s.do_* %s/" % (stampfn, destdir)) + pstage_set_pkgmanager(d) bb.build.exec_func("staging_helper", d) bb.build.exec_func("staging_packager", d) lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) @@ -352,7 +423,3 @@ do_package_stage_all () { } do_package_stage_all[recrdeptask] = "do_package_stage" addtask package_stage_all after do_package_stage before do_build - - - - diff --git a/classes/palmtop.bbclass b/classes/palmtop.bbclass index fa25d598e9..b4ee62c2a3 100644 --- a/classes/palmtop.bbclass +++ b/classes/palmtop.bbclass @@ -17,6 +17,7 @@ EXTRA_QMAKEVARS_POST += '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "ye EXTRA_QMAKEVARS_POST += "${@["LIBS+=-lqpe ", ""][(bb.data.getVar('PN', d, 1) == 'libqpe-opie')]}" DEPENDS_prepend = "${@["virtual/libqpe1 uicmoc-native ", ""][(bb.data.getVar('PN', d, 1) == 'libqpe-opie')]}" QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte", d)}' +EXTRA_QMAKEVARS_POST += " DEFINES+=OPIE_BINDIR='\"${bindir}\"' DEFINES+=OPIE_LIBDIR='\"${libdir}/opie/lib\"' DEFINES+=OPIE_QTDIR='\"${libdir}/opie\"' " PACKAGES = "${PN}-dbg ${PN}-dev ${PN} ${PN}-doc ${PN}-locale" FILES_${PN} += " ${palmtopdir} " diff --git a/classes/patch.bbclass b/classes/patch.bbclass index 6f83d9c88b..075e826523 100644 --- a/classes/patch.bbclass +++ b/classes/patch.bbclass @@ -425,15 +425,8 @@ def patch_init(d): addtask patch after do_unpack do_patch[dirs] = "${WORKDIR}" -python () { - import bb - # do_patch tasks require PATCHTOOL-native to have staged - patchdeps = bb.data.getVar("PATCHTOOL", d, True) - if patchdeps: - patchdeps = "%s-native" % patchdeps - if not patchdeps in bb.data.getVar("PROVIDES", d, True): - bb.data.setVarFlag('do_patch', 'depends', patchdeps + ":do_populate_staging", d) -} +PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_staging" +do_patch[depends] = "${PATCHDEPENDENCY}" python patch_do_patch() { import re diff --git a/classes/siteinfo.bbclass b/classes/siteinfo.bbclass index 0d31be4dc4..039afbbee1 100644 --- a/classes/siteinfo.bbclass +++ b/classes/siteinfo.bbclass @@ -47,6 +47,7 @@ def get_siteinfo_list(d): "powerpc-darwin": "endian-big bit-32 common-darwin",\ "ppc-linux": "endian-big bit-32 common-linux common-glibc powerpc-common",\ "powerpc-linux": "endian-big bit-32 common-linux common-glibc powerpc-common",\ + "powerpc-linux-gnuspe": "endian-big bit-32 common-linux common-glibc powerpc-common",\ "powerpc-linux-uclibc": "endian-big bit-32 common-linux common-uclibc powerpc-common",\ "sh3-linux": "endian-little bit-32 common-linux common-glibc sh-common",\ "sh4-linux": "endian-little bit-32 common-linux common-glibc sh-common",\ diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc index 382d562426..8517c5bc8e 100644 --- a/conf/distro/include/angstrom-2008-preferred-versions.inc +++ b/conf/distro/include/angstrom-2008-preferred-versions.inc @@ -1,9 +1,11 @@ PREFERRED_VERSION_busybox = "1.9.2" +PREFERRED_VERSION_cairo = "1.6.4" PREFERRED_VERSION_dbus = "1.2.1" PREFERRED_VERSION_glib-2.0 = "2.16.1" PREFERRED_VERSION_gst-pulse = "0.9.7" PREFERRED_VERSION_libtool = "1.5.10" PREFERRED_VERSION_pango = "1.18.3" +PREFERRED_VERSION_pixman = "0.10.0" PREFERRED_VERSION_pulseaudio = "0.9.9" PREFERRED_VERSION_udev = "118" PREFERRED_VERSION_xserver-kdrive = "1.4.0.90" diff --git a/conf/distro/include/angstrom-eglibc.inc b/conf/distro/include/angstrom-eglibc.inc index 394ec7c2d4..07873fe700 100644 --- a/conf/distro/include/angstrom-eglibc.inc +++ b/conf/distro/include/angstrom-eglibc.inc @@ -14,6 +14,8 @@ PREFERRED_PROVIDER_virtual/sparc${TARGET_VENDOR}-linux-libc-for-gcc = " TARGET_OS = "linux${@['','-gnueabi'][bb.data.getVar('TARGET_ARCH',d,1) in ['arm', 'armeb'] and bb.data.getVar('MACHINE',d) not in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}" +#TARGET_OS = "linux-gnuspe" + #mess with compiler flags to use -Os instead of -O2 #Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info # perl has some problems, see http://bugs.openembedded.net/show_bug.cgi?id=1616 diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index bd56a09de6..bbdbe7f80b 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -281,9 +281,10 @@ TINDER_CLOBBER = "1" TINDER_REPORT = "1" # Configuration for seppuku autobuilder, people only need to put: -# INHERIT += "seppuku" +# INHERIT += "seppuku oestats-client" # SEPPUKU_USER = "your_bugzilla@user.id" # SEPPUKU_PASS = "your_bugzilla_password" +# OESTATS_BUILDER = "your_name" # in their local.conf # seppuku bbclass @@ -297,7 +298,7 @@ SEPPUKU_AUTOBUILD = "1" SEPPUKU_PRODUCT = "Openembedded" SEPPUKU_COMPONENT = "org.openembedded.dev" - +OESTATS_SERVER ?= "tinderbox.openembedded.net" diff --git a/conf/distro/include/fso-autorev.inc b/conf/distro/include/fso-autorev.inc index df53515a9a..65a4543437 100644 --- a/conf/distro/include/fso-autorev.inc +++ b/conf/distro/include/fso-autorev.inc @@ -4,6 +4,7 @@ SRCREV_pn-mickeyterm = "${AUTOREV}" SRCREV_pn-pyneod = "${AUTOREV}" SRCREV_pn-pynoeg = "${AUTOREV}" SRCREV_pn-python-odeviced = "${AUTOREV}" +SRCREV_pn-python-oeventd = "${AUTOREV}" SRCREV_pn-python-ophoned = "${AUTOREV}" SRCREV_pn-python-ousaged = "${AUTOREV}" SRCREV_pn-python-pytrc = "${AUTOREV}" diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 293340c478..8b91857a78 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -14,8 +14,8 @@ SRCREV_pn-aircrack-ng ?= "802" SRCREV_pn-assassin ?= "93" SRCREV_pn-bfin-uclibc ?= "1857" -SRCREV_pn-uclibc ?= "21926" -SRCREV_pn-uclibc-initial ?= "21926" +SRCREV_pn-uclibc ?= "21996" +SRCREV_pn-uclibc-initial ?= "21996" SRCREV_pn-contact ?= "1410" SRCREV_pn-dbus-c++-native ?= "13131" SRCREV_pn-dbus-c++ ?= "13131" @@ -24,9 +24,9 @@ SRCREV_pn-dfu-util-native ?= "4160" SRCREV_pn-diversity-daemon ?= "277" SRCREV_pn-diversity-nav ?= "340" SRCREV_pn-eds-dbus ?= "659" -SRCREV_pn-eglibc ?= "5963" -SRCREV_pn-eglibc-initial ?= "5963" -SRCREV_pn-eglibc-intermediate ?= "5963" +SRCREV_pn-eglibc ?= "6229" +SRCREV_pn-eglibc-initial ?= "6229" +SRCREV_pn-eglibc-intermediate ?= "6229" SRCREV_pn-enlazar ?= "37" SRCREV_pn-exalt ?= "79" SRCREV_pn-exalt-daemon ?= "78" @@ -152,14 +152,15 @@ SRCREV_pn-openmoko-toolchain-scripts ?= "3767" SRCREV_pn-openmoko-worldclock2 ?= "3365" SRCREV_pn-openocd ?= "517" SRCREV_pn-openocd-native ?= "517" -SRCREV_pn-opkg ?= "4247" -SRCREV_pn-opkg-native ?= "4247" -SRCREV_pn-opkg-sdk ?= "4247" +SRCREV_pn-opkg ?= "4452" +SRCREV_pn-opkg-native ?= "4452" +SRCREV_pn-opkg-sdk ?= "4452" SRCREV_pn-oprofileui ?= "160" -SRCREV_pn-packagekit ?= "74a3b7e3f3bc8627c23349e0b0d8429fd5f53fc6" +SRCREV_pn-packagekit ?= "ebbbfa191257861bd19bd47ba646dce590b51858" SRCREV_pn-psplash ?= "249" SRCREV_pn-pty-forward-native ?= "4214" SRCREV_pn-python-odeviced ?= "2f02576532b52732251b3c530a09e4c08685a911" +SRCREV_pn-python-oeventd ?= "d9646ee640fe6eabd023b82a7a0b8ed529cf07b7" SRCREV_pn-python-ophoned ?= "8bb89a912163c8a846be7a14b2a6e2f832f91bd6" SRCREV_pn-python-ousaged ?= "c7f83c3f696b6e72f3cab244af4e88dc4851018e" SRCREV_pn-pygsm ?= "976477f6b403f422b4ea730f71ebf409f6671141" diff --git a/conf/machine/beagleboard.conf b/conf/machine/beagleboard.conf index 824ab2b7b3..6842897dd1 100644 --- a/conf/machine/beagleboard.conf +++ b/conf/machine/beagleboard.conf @@ -18,7 +18,7 @@ include conf/machine/include/tune-arm1136jf-s.inc #include conf/machine/include/tune-cortexa8.inc -IMAGE_FSTYPES ?= "tar.bz2" +IMAGE_FSTYPES += "tar.bz2 jffs2" # Guesswork SERIAL_CONSOLE = "115200 ttyS2" diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf new file mode 100644 index 0000000000..e66109a785 --- /dev/null +++ b/conf/machine/neuros-osd2.conf @@ -0,0 +1,23 @@ +#@TYPE: Machine +#@NAME: neuros OSD2 +#@DESCRIPTION: neuros OSD2 + +TARGET_ARCH = "arm" + +PACKAGE_EXTRA_ARCHS = "armv4t armv5te" + +PREFERRED_PROVIDER_xserver = "xserver-kdrive" +PREFERRED_PROVIDER_virtual/kernel = "linux-davinci" + +PREFERRED_VERSION_u-boot = "git" +#UBOOT_MACHINE = "davinci_dvevm_config" + +SERIAL_CONSOLE ?= "115200 ttyS0" +EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" + +ROOT_FLASH_SIZE = "29" + +MACHINE_FEATURES = "kernel26 pcmcia usbhost screen" + +require conf/machine/include/tune-arm926ejs.inc + diff --git a/packages/abiword/abiword_2.6.3.bb b/packages/abiword/abiword_2.6.3.bb new file mode 100644 index 0000000000..e2db4a09cb --- /dev/null +++ b/packages/abiword/abiword_2.6.3.bb @@ -0,0 +1,3 @@ +require abiword-2.5.inc + +RCONFLICTS = "abiword-embedded" diff --git a/packages/acpid/acpid/gcc40.patch b/packages/acpid/acpid/gcc40.patch index 5320cee0bb..8e3b31da60 100644 --- a/packages/acpid/acpid/gcc40.patch +++ b/packages/acpid/acpid/gcc40.patch @@ -1,4 +1,5 @@ upstream: https://sourceforge.net/tracker/index.php?func=detail&aid=1895615&group_id=33140&atid=407341 +status: not necessary anymore at least from version 1.0.6 onwards where this patch reverse-applies cleanly Index: acpid-1.0.3/ud_socket.c =================================================================== diff --git a/packages/acpid/acpid_1.0.6.bb b/packages/acpid/acpid_1.0.6.bb index f48c262254..e096796fbd 100644 --- a/packages/acpid/acpid_1.0.6.bb +++ b/packages/acpid/acpid_1.0.6.bb @@ -1,4 +1,3 @@ require acpid.inc -SRC_URI += "file://gcc40.patch;patch=1" -PR = "r3" +PR = "r4" diff --git a/packages/automake/automake_1.10.bb b/packages/automake/automake_1.10.bb index eef69f4e4a..e4e8f3385b 100644 --- a/packages/automake/automake_1.10.bb +++ b/packages/automake/automake_1.10.bb @@ -2,6 +2,8 @@ DESCRIPTION = "A tool for automatically generating Makefiles." LICENSE = "GPL" HOMEPAGE = "http://www.gnu.org/software/automake/" SECTION = "devel" +DEFAULT_PREFERENCE = "-1" +PR = "r1" SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2 \ ${@['file://path_prog_fixes.patch;patch=1', ''][bb.data.inherits_class('native', d)]}" @@ -21,11 +23,9 @@ do_install () { oe_runmake 'DESTDIR=${D}' install install -d ${D}${datadir} if [ ! -e ${D}${datadir}/aclocal ]; then - ln -sf aclocal-1.9 ${D}${datadir}/aclocal + ln -sf aclocal-1.10 ${D}${datadir}/aclocal fi if [ ! -e ${D}${datadir}/automake ]; then - ln -sf automake-1.9 ${D}${datadir}/automake + ln -sf automake-1.10 ${D}${datadir}/automake fi } - -DEFAULT_PREFERENCE = "-1" diff --git a/packages/curl/curl-sdk_7.18.0.bb b/packages/curl/curl-sdk_7.18.0.bb new file mode 100644 index 0000000000..816fe645bc --- /dev/null +++ b/packages/curl/curl-sdk_7.18.0.bb @@ -0,0 +1,14 @@ +require curl_${PV}.bb +inherit sdk +DEPENDS = "zlib-sdk" + +do_stage () { + install -d ${STAGING_INCDIR}/curl + install -m 0644 ${S}/include/curl/*.h ${STAGING_INCDIR}/curl/ + oe_libinstall -so -a -C lib libcurl ${STAGING_LIBDIR} +} + +do_install() { + : +} + diff --git a/packages/dbus-java/dbus-java_2.4.bb b/packages/dbus-java/dbus-java_2.4.bb new file mode 100644 index 0000000000..461bcb19eb --- /dev/null +++ b/packages/dbus-java/dbus-java_2.4.bb @@ -0,0 +1,87 @@ +DESCRIPTION = "A pure Java D-Bus Implementation" +DESCRIPTION_dbus-java-viewer = "${DESCRIPTION} (DBusViewer Binary)" +DESCRIPTION_dbus-java-bin = "${DESCRIPTION} (Binaries)" +AUTHOR = "Matthew Johnson <dbus@matthew.ath.cx>" +HOMEPAGE = "http://dbus.freedesktop.org/doc/dbus-java" +SECTION = "libs" +LICENSE = "GPLv2 AFL" +DEPENDS = "libmatthew docbook-utils-native docbook-sgml-dtd-4.1-native fastjar-native" +RDEPENDS_dbus-java-viewer = "java2-runtime libmatthew-java ${JPN}" +RDEPENDS_dbus-java-bin = "java2-runtime libmatthew-java ${JPN}" +RSUGGESTS_libdbus-java = "libmatthew-java dbus" +PR = "r0" + +SRC_URI = "http://dbus.freedesktop.org/releases/dbus-java/dbus-java-${PV}.tar.gz" + +S = "${WORKDIR}/dbus-java-${PV}" + +inherit java-library + +do_compile () { + # run target .binclasses first to fix a brokenness in the Makefile + oe_runmake \ + JCFLAGS="-source 1.5" \ + JAVAC="javac" \ + JARPREFIX="${STAGING_DATADIR_JAVA}" \ + JAVAUNIXJARDIR="${STAGING_DATADIR_JAVA}" \ + CLASSPATH="${S}/classes" \ + JAR="fastjar" \ + .binclasses + oe_runmake \ + JCFLAGS="-source 1.5" \ + JAVAC="javac" \ + JARPREFIX="${STAGING_DATADIR_JAVA}" \ + JAVAUNIXJARDIR="${STAGING_DATADIR_JAVA}" \ + CLASSPATH="${S}/classes" \ + JAR="fastjar" \ + all + # Generated shell scripts will have staging paths inside them. + rm bin/* + # Generate them again with target paths. + oe_runmake \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + JARPREFIX=${datadir_java} \ + JAVAUNIXPATH=${datadir_java} \ + all + # Trigger generation of all documentation files to prevent this + # being happen at the target 'install-man' in do_install. + oe_runmake \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + JARPREFIX=${datadir_java} \ + JAVAUNIXPATH=${datadir_java} \ + CreateInterface.1 ListDBus.1 DBusDaemon.1 DBusViewer.1 changelog AUTHORS COPYING README INSTALL DBusCall.1 +} + +do_install () { + oe_jarinstall ${JPN}-${PV}.jar ${JPN}.jar + oe_jarinstall dbus-java-viewer-${PV}.jar dbus-java-viewer.jar + oe_jarinstall dbus-java-bin-${PV}.jar dbus-java-bin.jar + install -d ${D}${bindir} + install bin/DBusViewer ${D}${bindir} + install bin/DBusCall ${D}${bindir} + install bin/CreateInterface ${D}${bindir} + install bin/ListDBus ${D}${bindir} + install bin/DBusDaemon ${D}${bindir} + oe_runmake \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + MANPREFIX=${D}${mandir} \ + DOCPREFIX=${D}${docdir}/${JPN} \ + install-man +} + +do_stage () { + oe_jarinstall -s ${JPN}-${PV}.jar ${JPN}.jar +} + +PACKAGE_ARCH = "all" +# ${JPN} must be last otherwise it would pick up dbus-viewer*.jar +# and dbus-bin*.jar +PACKAGES = "dbus-java-viewer dbus-java-viewer-doc dbus-java-bin dbus-java-bin-doc ${JPN}" + +FILES_dbus-java-viewer = "${datadir}/java/dbus-java-viewer*.jar ${bindir}/DBusViewer" +FILES_dbus-java-viewer-doc = "${mandir}/DBusViewer*" +FILES_dbus-java-bin = "${datadir}/java/dbus-java-bin*.jar ${bindir}" +FILES_dbus-java-bin-doc = "${mandir} ${docdir}/${JPN}" diff --git a/packages/dbus/dbus-1.2.1/dbus-1.init b/packages/dbus/dbus-1.2.1/dbus-1.init index bf002748a1..a70e7a2373 100644 --- a/packages/dbus/dbus-1.2.1/dbus-1.init +++ b/packages/dbus/dbus-1.2.1/dbus-1.init @@ -10,7 +10,7 @@ DAEMON=/usr/bin/dbus-daemon NAME=dbus DAEMONUSER=messagebus RUNDIR=/var/run/dbus -PIDFILE=/var/run/messagebus.pid +PIDFILE=/var/run/dbus/pid UUIDDIR=/var/lib/dbus DESC="system message bus" EVENTDIR=/etc/dbus-1/event.d diff --git a/packages/dbus/dbus_1.2.1.bb b/packages/dbus/dbus_1.2.1.bb index 8e3e329fde..7838e55ca1 100644 --- a/packages/dbus/dbus_1.2.1.bb +++ b/packages/dbus/dbus_1.2.1.bb @@ -1,3 +1,3 @@ include dbus.inc -PR = "r1" +PR = "r2" diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index 56c2905f62..7aa24578e9 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,10 +1,13 @@ DESCRIPTION = "DSP Link for TI ARM/DSP processors" DEPENDS = "virtual/kernel perl-native" +RDEPENDS = "update-modules" -inherit module-base +inherit module PR = "r0" +PE = "1" +PV = "1.50" # Get dsplink tarball from TI website, place in sources and calculate # md5sum @@ -22,6 +25,15 @@ S = "${WORKDIR}/dsplink_1_50/dsplink" # Needed for buildscripts export DSPLINK = "${S}" +DSPLINKPLATFORM ?= "Davinci" + +DSPLINKPLATFORM_omap5912osk = "Omap" +DSPLINKPLATFORM_beagleboard = "Omap" +DSPLINKPLATFORM_davinci-sffsdr = "Davinci" +DSPLINKPLATFORM_davinci-dvevm = "Davinci" + +export DSPLINKPLATFORM + do_configure () { cp ${WORKDIR}/CURRENTCFG.MK ${S}/config cp ${WORKDIR}/davinci_mvlpro5.0.mk ${S}/make/Linux @@ -31,7 +43,7 @@ do_configure () { -e s:SED_ME_GPPDISTRO:davinci_mvlpro5\.0:g \ -e s:SED_ME_KERNELVERSION:${KERNEL_VERSION}:g \ -e s:SED_ME_DSPDISTRO:davinci_mvlpro5\.0:g \ - -e s:SED_ME_PLATFORM:Davinci:g \ + -e s:SED_ME_PLATFORM:${DSPLINKPLATFORM}:g \ ${S}/config/CURRENTCFG.MK sed -i -e s:SED_ME_CROSS:${STAGING_INCDIR}:g \ @@ -46,10 +58,37 @@ PARALLEL_MAKE = "" do_compile () { ln -sf ${S}/gpp/src/api/*h ${S}/gpp/inc/ - ln -sf ${S}/gpp/src/pmgr/Linux/2.6.18 ${S}/gpp/src/pmgr/Linux/2.6.26-rc2-omap1 + ln -sf ${S}/gpp/src/pmgr/Linux/2.6.18 ${S}/gpp/src/pmgr/Linux/${KERNEL_VERSION} + ln -sf ${S}/gpp/src/api/Linux/2.6.18 ${S}/gpp/src/api/Linux/${KERNEL_VERSION} + ln -sf ${S}/gpp/src/osal/Linux/2.6.18 ${S}/gpp/src/osal/Linux/${KERNEL_VERSION} + ln -sf ${S}/gpp/src/pmgr/Linux/drv_pmgr.h ${S}/gpp/inc/drv_pmgr.h + ln -sf ${S}/gpp/src/pmgr/pmgr_proc.h ${S}/gpp/inc/pmgr_proc.h + unset DISPLAY - oe_runmake -C ${S}/gpp/src + + oe_runmake -C ${S}/gpp/src all targets + oe_runmake -C ${S}/gpp/src/samples +} + +do_install () { + install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + cp ${S}/gpp/BUILD/EXPORT/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/ } +pkg_postinst_${PN}-module () { + if [ -n "$D" ]; then + exit 1 + fi + depmod -a + update-modules || true +} + +pkg_postrm_${PN}-module () { + update-modules || true +} + +PACKAGES =+ "${PN}-module" +FILES_${PN}-module = "${sysconfdir} /lib/modules" + PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/packages/dsplink/files/davinci_mvlpro5.0.mk b/packages/dsplink/files/davinci_mvlpro5.0.mk index 2ea2fd8915..66365f607b 100644 --- a/packages/dsplink/files/davinci_mvlpro5.0.mk +++ b/packages/dsplink/files/davinci_mvlpro5.0.mk @@ -78,7 +78,7 @@ endif # Name of the compiler # ---------------------------------------------------------------------------- COMPILER := SED_ME_TARGET_PREFIXgcc -LD := SED_ME_TARGET_PREFIXDIR-ld +LD := SED_ME_TARGET_PREFIXld CROSS_COMPILE := SED_ME_TARGET_PREFIX export CROSS_COMPILE @@ -135,7 +135,7 @@ STD_CC_DEFNS := -D_REENTRANT # ============================================================================ # ARCHIVER1 - This denotes the linker. # ============================================================================ -ARCHIVER1 := SED_ME_TARGET_PREFIX-ld +ARCHIVER1 := SED_ME_TARGET_PREFIXld # ---------------------------------------------------------------------------- # Standard flags for the archiver @@ -146,7 +146,7 @@ STD_AR_FLAGS1 := -EL -r # ============================================================================ # ARCHIVER2 - This denotes the archiver. # ============================================================================ -ARCHIVER2 := SED_ME_TARGET_PREFIX-ar +ARCHIVER2 := SED_ME_TARGET_PREFIXar # ---------------------------------------------------------------------------- # Standard flags for the archiver diff --git a/packages/glibc/eglibc-svn/.mtn2git_empty b/packages/eglibc/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/glibc/eglibc-svn/.mtn2git_empty +++ b/packages/eglibc/.mtn2git_empty diff --git a/packages/eglibc/eglibc-initial.inc b/packages/eglibc/eglibc-initial.inc new file mode 100644 index 0000000000..342711c157 --- /dev/null +++ b/packages/eglibc/eglibc-initial.inc @@ -0,0 +1,31 @@ +SECTION = "libs" +DEPENDS = "linux-libc-headers" +PROVIDES = "virtual/${TARGET_PREFIX}libc-initial" +FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/eglibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" + +PACKAGES = "" +PACKAGES_DYNAMIC = "" + +do_configure () { + sed -ie 's,{ (exit 1); exit 1; }; },{ (exit 0); }; },g' ${S}/configure + chmod +x ${S}/configure + CC="${BUILD_CC}" CPP="${BUILD_CPP}" LD="${BUILD_LD}" \ + ${S}/configure --host=${TARGET_SYS} --build=${BUILD_SYS} \ + --without-cvs --disable-sanity-checks \ + --with-headers=${STAGING_DIR_TARGET}${layout_includedir} \ + --enable-hacker-mode +} + +do_compile () { + : +} + +do_stage () { + oe_runmake cross-compiling=yes install_root=${STAGING_DIR_HOST} \ + includedir='${layout_includedir}' prefix='${layout_prefix}' install-headers + +} + +do_install () { + : +} diff --git a/packages/eglibc/eglibc-initial_svn.bb b/packages/eglibc/eglibc-initial_svn.bb new file mode 100644 index 0000000000..787c762609 --- /dev/null +++ b/packages/eglibc/eglibc-initial_svn.bb @@ -0,0 +1,6 @@ +require eglibc_${PV}.bb +require eglibc-initial.inc + +do_configure_prepend () { + unset CFLAGS +} diff --git a/packages/glibc/eglibc-intermediate_svn.bb b/packages/eglibc/eglibc-intermediate.inc index 5ecbdb6ed8..c226d8658d 100644 --- a/packages/glibc/eglibc-intermediate_svn.bb +++ b/packages/eglibc/eglibc-intermediate.inc @@ -1,20 +1,12 @@ -require eglibc_${PV}.bb +SECTION = "libs" +PACKAGES = "" +PACKAGES_DYNAMIC = "" +PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc" +DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers" do_install () { : } -# gcc uses -Werror which break on a "you have no thumb interwork" _warning_ -do_configure_prepend() { - find ${S} -name "configure" | xargs touch - sed -i s:-Werror:: ${S}/configure -} - - - -PACKAGES = "" -PACKAGES_DYNAMIC = "" -PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc" -DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers" GLIBC_ADDONS = "nptl,ports" GLIBC_EXTRA_OECONF = "" diff --git a/packages/eglibc/eglibc-intermediate_svn.bb b/packages/eglibc/eglibc-intermediate_svn.bb new file mode 100644 index 0000000000..7150f56d26 --- /dev/null +++ b/packages/eglibc/eglibc-intermediate_svn.bb @@ -0,0 +1,8 @@ +require eglibc_${PV}.bb +require eglibc-intermediate.inc + +# gcc uses -Werror which break on a "you have no thumb interwork" _warning_ +do_configure_prepend() { + find ${S} -name "configure" | xargs touch + sed -i s:-Werror:: ${S}/configure +} diff --git a/packages/glibc/eglibc-package.bbclass b/packages/eglibc/eglibc-package.bbclass index 241d8d30a6..2de24db859 100644 --- a/packages/glibc/eglibc-package.bbclass +++ b/packages/eglibc/eglibc-package.bbclass @@ -27,7 +27,7 @@ ENABLE_BINARY_LOCALE_GENERATION ?= "0" BINARY_LOCALE_ARCHES ?= "arm.*" PACKAGES = "eglibc-dbg eglibc catchsegv sln nscd ldd localedef eglibc-utils eglibc-dev eglibc-doc eglibc-locale libsegfault eglibc-extra-nss eglibc-thread-db eglibc-pcprofile" -PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* eglibc-gconv-* eglibc-charmap-* eglibc-localedata-*" +PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* glibc-binary-localedata-* eglibc-gconv-* eglibc-charmap-* eglibc-localedata-* eglibc-binary-localedata-* locale-base-*" RPROVIDES_eglibc = "glibc" RPROVIDES_eglibc-utils = "glibc-utils" @@ -36,7 +36,8 @@ RPROVIDES_eglibc-doc = "glibc-doc" RPROVIDES_eglibc-locale = "glibc-locale" RPROVIDES_eglibc-extra-nss = "glibc-extra-nss" RPROVIDES_eglibc-thread-db = "glibc-thread-db" -RPROVIDES_eglibc-pcprofiles = "glibc-pcprofiles" +RPROVIDES_eglibc-pcprofile = "glibc-pcprofile" +RPROVIDES_eglibc-dbg = "glibc-dbg" libc_baselibs = "/lib/libc* /lib/libm* /lib/ld* /lib/libpthread* /lib/libresolv* /lib/librt* /lib/libutil* /lib/libnsl* /lib/libnss_files* /lib/libnss_compat* /lib/libnss_dns* /lib/libdl* /lib/libanl* /lib/libBrokenLocale*" @@ -49,7 +50,7 @@ FILES_eglibc-dev_append = " ${libdir}/*.o ${bindir}/rpcgen" FILES_nscd = "${sbindir}/nscd*" FILES_eglibc-utils = "${bindir}/* ${sbindir}/*" FILES_eglibc-gconv = "${libdir}/gconv/*" -FILES_${PN}-dbg += "${libexecdir}/getconf/.debug ${libdir}/gconv/.debug" +FILES_${PN}-dbg += "${libexecdir}/*/.debug ${libdir}/gconv/.debug" FILES_catchsegv = "${bindir}/catchsegv" RDEPENDS_catchsegv = "libsegfault" FILES_eglibc-pcprofile = "/lib/libpcprofile.so" diff --git a/packages/eglibc/eglibc-stage.inc b/packages/eglibc/eglibc-stage.inc new file mode 100644 index 0000000000..2b7b303c14 --- /dev/null +++ b/packages/eglibc/eglibc-stage.inc @@ -0,0 +1,18 @@ +do_stage() { + rm -f ${STAGING_DIR_HOST}${layout_base_libdir}/libc.so.6 + oe_runmake 'install_root=${STAGING_DIR_HOST}' \ + 'includedir=${layout_includedir}' 'libdir=${layout_libdir}' 'slibdir=${layout_base_libdir}' \ + '${STAGING_DIR_HOST}${layout_base_libdir}/libc.so.6' \ + install + + install -d ${STAGING_INCDIR}/gnu \ + ${STAGING_INCDIR}/bits \ + ${STAGING_INCDIR}/rpcsvc + install -m 0644 ${S}/include/gnu/stubs.h ${STAGING_INCDIR}/gnu/ + install -m 0644 ${B}/bits/stdio_lim.h ${STAGING_INCDIR}/bits/ + install -m 0644 misc/syscall-list.h ${STAGING_INCDIR}/bits/syscall.h + for r in ${rpcsvc}; do + h=`echo $r|sed -e's,\.x$,.h,'` + install -m 0644 ${S}/sunrpc/rpcsvc/$h ${STAGING_INCDIR}/rpcsvc/ + done +} diff --git a/packages/opie-dasher/.mtn2git_empty b/packages/eglibc/eglibc-svn/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/opie-dasher/.mtn2git_empty +++ b/packages/eglibc/eglibc-svn/.mtn2git_empty diff --git a/packages/glibc/eglibc-svn/eglibc-svn-arm-lowlevellock-include-tls.patch b/packages/eglibc/eglibc-svn/eglibc-svn-arm-lowlevellock-include-tls.patch index 99c3fef802..99c3fef802 100644 --- a/packages/glibc/eglibc-svn/eglibc-svn-arm-lowlevellock-include-tls.patch +++ b/packages/eglibc/eglibc-svn/eglibc-svn-arm-lowlevellock-include-tls.patch diff --git a/packages/eglibc/eglibc.inc b/packages/eglibc/eglibc.inc new file mode 100644 index 0000000000..e1559e46e4 --- /dev/null +++ b/packages/eglibc/eglibc.inc @@ -0,0 +1,22 @@ +DESCRIPTION = "Embedded GNU C Library" +HOMEPAGE = "http://www.eglibc.org/home" +SECTION = "libs" +PRIORITY = "required" +LICENSE = "LGPL" +# nptl needs unwind support in gcc, which can't be built without glibc. +DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers" +#this leads to circular deps, so lets not add it yet +#RDEPENDS_ldd += " bash" +# nptl needs libgcc but dlopens it, so our shlibs code doesn't detect this +RDEPENDS += "${@['','libgcc']['nptl' in '${GLIBC_ADDONS}']}" +PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}" +PROVIDES += "virtual/libintl virtual/libiconv" + +inherit autotools + +LEAD_SONAME = "libc.so" + +GLIBC_EXTRA_OECONF ?= "" +INHIBIT_DEFAULT_DEPS = "1" + +PACKAGES = "glibc catchsegv sln nscd ldd localedef glibc-utils glibc-dev glibc-doc glibc-locale libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile" diff --git a/packages/glibc/eglibc_svn.bb b/packages/eglibc/eglibc_svn.bb index ee5b3cfd23..e7a4a1ba75 100644 --- a/packages/glibc/eglibc_svn.bb +++ b/packages/eglibc/eglibc_svn.bb @@ -1,12 +1,10 @@ -require glibc.inc +require eglibc.inc -DEFAULT_PREFERENCE = "-1" +# DEFAULT_PREFERENCE = "-1" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/eglibc-svn" PV = "2.8+svnr${SRCREV}" PR = "r6" SRC_URI = "svn://svn.eglibc.org;module=trunk \ - file://eglibc-svn-arm-cargs6.patch;patch=1 \ - file://eglibc-svn-arm-check_pf.patch;patch=1 \ file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \ file://etc/ld.so.conf \ file://generate-supported.mk" @@ -15,6 +13,7 @@ B = "${WORKDIR}/build-${TARGET_SYS}" PACKAGES_DYNAMIC = "libc6*" RPROVIDES_${PN}-dev = "libc6-dev" +PROVIDES_${PN}-dbg = "glibc-dbg" # the -isystem in bitbake.conf screws up glibc do_stage BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}" @@ -93,6 +92,6 @@ do_compile () { ) } -require glibc-stage.inc +require eglibc-stage.inc require eglibc-package.bbclass diff --git a/packages/eglibc/files/.mtn2git_empty b/packages/eglibc/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/eglibc/files/.mtn2git_empty diff --git a/packages/eglibc/files/etc/.mtn2git_empty b/packages/eglibc/files/etc/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/eglibc/files/etc/.mtn2git_empty diff --git a/packages/eglibc/files/etc/ld.so.conf b/packages/eglibc/files/etc/ld.so.conf new file mode 100644 index 0000000000..dfa65edb85 --- /dev/null +++ b/packages/eglibc/files/etc/ld.so.conf @@ -0,0 +1,2 @@ +/usr/local/lib +/usr/X11R6/lib diff --git a/packages/eglibc/files/generate-supported.mk b/packages/eglibc/files/generate-supported.mk new file mode 100644 index 0000000000..d2a28c2dc6 --- /dev/null +++ b/packages/eglibc/files/generate-supported.mk @@ -0,0 +1,11 @@ +#!/usr/bin/make + +include $(IN) + +all: + rm -f $(OUT) + touch $(OUT) + for locale in $(SUPPORTED-LOCALES); do \ + [ $$locale = true ] && continue; \ + echo $$locale | sed 's,/, ,' >> $(OUT); \ + done diff --git a/packages/freesmartphone/python-oeventd/.mtn2git_empty b/packages/freesmartphone/python-oeventd/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/freesmartphone/python-oeventd/.mtn2git_empty diff --git a/packages/freesmartphone/python-oeventd/oeventd b/packages/freesmartphone/python-oeventd/oeventd new file mode 100644 index 0000000000..8ed467b079 --- /dev/null +++ b/packages/freesmartphone/python-oeventd/oeventd @@ -0,0 +1,40 @@ +#! /bin/sh +# +# odeviced This shell script starts and stops the open event daemon. +# +# chkconfig: 345 90 20 +# description: py-oeventd is the open evend daemon +# processname: python + +PATH=/bin:/usr/bin:/sbin:/usr/sbin +NAME=oeventd + +[ -f /etc/default/rcS ] && . /etc/default/rcS + +case "$1" in + start) + echo -n "Starting open event daemon: " + start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -x /usr/bin/oeventd + if [ $? = 0 ]; then + echo "(ok)" + else + echo "(failed)" + fi + ;; + stop) + echo -n "Stopping open event daemon: " + start-stop-daemon --stop --pidfile /var/run/${NAME}.pid --oknodo + rm -f /var/run/${NAME}.pid + echo "(done)" + ;; + restart|force-reload) + $0 stop + $0 start + ;; + *) + echo "Usage: /etc/init.d/oeventd {start|stop|restart|force-reload}" + exit 1 + ;; +esac + +exit 0 diff --git a/packages/freesmartphone/python-oeventd_git.bb b/packages/freesmartphone/python-oeventd_git.bb new file mode 100644 index 0000000000..2f779058fd --- /dev/null +++ b/packages/freesmartphone/python-oeventd_git.bb @@ -0,0 +1,34 @@ +DESCRIPTION = "The Open Event Daemon Prototype in Python" +HOMEPAGE = "http://www.freesmartphone.org/mediawiki/index.php/Implementations/OpenEventDaemon" +AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>" +SECTION = "console/network" +DEPENDS = "python-cython-native python-pyrex-native" +LICENSE = "GPLv2" +PV = "0.0.0+gitr${SRCREV}" +PR = "r0" + +inherit distutils update-rc.d + +INITSCRIPT_NAME = "oeventd" +INITSCRIPT_PARAMS = "defaults 20" + +SRC_URI = "\ + ${FREESMARTPHONE_GIT}/eventd.git;protocol=git;branch=master \ + file://oeventd \ +" +S = "${WORKDIR}/git" + +do_install_append() { + install -d ${D}${sysconfdir}/init.d/ + install -m 0755 ${WORKDIR}/oeventd ${D}${sysconfdir}/init.d/ + install -d ${D}${sysconfdir}/dbus-1/system.d/ + mv -f ${D}${datadir}/etc/dbus-1/system.d/oeventd.conf ${D}${sysconfdir}/dbus-1/system.d/ +} + +RDEPENDS_${PN} += "\ + python-dbus \ + python-pygobject \ + python-syslog \ +" + +FILES_${PN} += "${sysconfdir}" diff --git a/packages/gcc/gcc-4.2.4.inc b/packages/gcc/gcc-4.2.4.inc new file mode 100644 index 0000000000..87eb532b21 --- /dev/null +++ b/packages/gcc/gcc-4.2.4.inc @@ -0,0 +1,73 @@ +require gcc-common.inc + +DEPENDS = "mpfr gmp" + +SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ + file://100-uclibc-conf.patch;patch=1 \ + file://103-uclibc-conf-noupstream.patch;patch=1 \ + file://200-uclibc-locale.patch;patch=1 \ + file://203-uclibc-locale-no__x.patch;patch=1 \ + file://204-uclibc-locale-wchar_fix.patch;patch=1 \ + file://205-uclibc-locale-update.patch;patch=1 \ + file://300-libstdc++-pic.patch;patch=1 \ + file://301-missing-execinfo_h.patch;patch=1 \ + file://302-c99-snprintf.patch;patch=1 \ + file://303-c99-complex-ugly-hack.patch;patch=1 \ + file://304-index_macro.patch;patch=1 \ + file://305-libmudflap-susv3-legacy.patch;patch=1 \ + file://306-libstdc++-namespace.patch;patch=1 \ + file://307-locale_facets.patch;patch=1 \ + file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://740-sh-pr24836.patch;patch=1 \ + file://800-arm-bigendian.patch;patch=1 \ + file://801-arm-bigendian-eabi.patch;patch=1 \ + file://904-flatten-switch-stmt-00.patch;patch=1 \ + file://arm-nolibfloat.patch;patch=1 \ + file://arm-softfloat.patch;patch=1 \ + file://gcc41-configure.in.patch;patch=1 \ + file://arm-thumb.patch;patch=1 \ + file://arm-thumb-cache.patch;patch=1 \ + file://ldflags.patch;patch=1 \ + file://zecke-xgcc-cpp.patch;patch=1 \ + file://unbreak-armv4t.patch;patch=1 \ + file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ + file://cache-amnesia.patch;patch=1 \ + file://gfortran.patch;patch=1 \ + file://gcc-4.0.2-e300c2c3.patch;patch=1 \ + file://fortran-static-linking.patch;patch=1 \ + file://intermask-bigendian.patch;patch=1 \ +" + +SRC_URI_append_ep93xx = " \ + file://arm-crunch-saveregs.patch;patch=1 \ + file://arm-crunch-20000320.patch;patch=1 \ + file://arm-crunch-compare.patch;patch=1 \ + file://arm-crunch-compare-unordered.patch;patch=1 \ + file://arm-crunch-compare-geu.patch;patch=1 \ + file://arm-crunch-eabi-ieee754.patch;patch=1 \ + file://arm-crunch-eabi-ieee754-div.patch;patch=1 \ + file://arm-crunch-64bit-disable0.patch;patch=1 \ + file://arm-crunch-offset.patch;patch=1 \ + file://arm-crunch-fp_consts.patch;patch=1 \ + file://arm-crunch-neg2.patch;patch=1 \ + file://arm-crunch-predicates3.patch;patch=1 \ + file://arm-crunch-cfcvtds-disable.patch;patch=1 \ + file://arm-crunch-floatsi-disable.patch;patch=1 \ + file://arm-crunch-truncsi-disable.patch;patch=1 \ + file://arm-crunch-cfcvt64-disable.patch;patch=1 \ + file://arm-crunch-cirrus-bugfixes.patch;patch=1 \ + " + +PACKAGE_ARCH_ep93xx = "${MACHINE_ARCH}" + +SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " + +# Language Overrides +FORTRAN = "" +FORTRAN_linux-gnueabi = ",fortran" +JAVA = "" + +EXTRA_OECONF_BASE = "--enable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap" + +ARM_INSTRUCTION_SET = "arm" diff --git a/packages/gcc/gcc-4.2.4/.mtn2git_empty b/packages/gcc/gcc-4.2.4/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/.mtn2git_empty diff --git a/packages/gcc/gcc-4.2.4/100-uclibc-conf.patch b/packages/gcc/gcc-4.2.4/100-uclibc-conf.patch new file mode 100644 index 0000000000..4243ff7b91 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/100-uclibc-conf.patch @@ -0,0 +1,200 @@ +--- gcc/libgomp/configure ++++ gcc/libgomp/configure +@@ -3771,7 +3771,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/gcc/config/cris/linux.h ++++ gcc/gcc/config/cris/linux.h +@@ -74,7 +74,11 @@ + #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG + + #undef CRIS_SUBTARGET_VERSION +-#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu" ++#if UCLIBC_DEFAULT ++# define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc" ++#else ++# define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu" ++#endif + + #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" + +--- gcc/libstdc++-v3/configure ++++ gcc/libstdc++-v3/configure +@@ -4276,7 +4276,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/zlib/configure ++++ gcc/zlib/configure +@@ -3422,7 +3422,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libobjc/configure ++++ gcc/libobjc/configure +@@ -3309,7 +3309,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libgfortran/configure ++++ gcc/libgfortran/configure +@@ -3695,7 +3695,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libmudflap/configure ++++ gcc/libmudflap/configure +@@ -5378,7 +5378,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/boehm-gc/configure ++++ gcc/boehm-gc/configure +@@ -4316,7 +4316,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libffi/configure ++++ gcc/libffi/configure +@@ -3453,7 +3453,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libssp/configure ++++ gcc/libssp/configure +@@ -4409,7 +4409,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/contrib/regression/objs-gcc.sh ++++ gcc/contrib/regression/objs-gcc.sh +@@ -105,6 +105,10 @@ + then + make all-gdb all-dejagnu all-ld || exit 1 + make install-gdb install-dejagnu install-ld || exit 1 ++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ] ++ then ++ make all-gdb all-dejagnu all-ld || exit 1 ++ make install-gdb install-dejagnu install-ld || exit 1 + elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then + make bootstrap || exit 1 + make install || exit 1 +--- gcc/libjava/classpath/ltconfig ++++ gcc/libjava/classpath/ltconfig +@@ -603,7 +603,7 @@ + + # Transform linux* to *-*-linux-gnu*, to support old configure scripts. + case $host_os in +-linux-gnu*) ;; ++linux-gnu*|linux-uclibc*) ;; + linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` + esac + +@@ -1251,7 +1251,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + version_type=linux + need_lib_prefix=no + need_version=no +--- gcc/libjava/classpath/configure ++++ gcc/libjava/classpath/configure +@@ -4665,7 +4665,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libjava/configure ++++ gcc/libjava/configure +@@ -5212,7 +5212,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/libtool.m4 ++++ gcc/libtool.m4 +@@ -739,7 +739,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +--- gcc/ltconfig ++++ gcc/ltconfig +@@ -603,7 +603,7 @@ + + # Transform linux* to *-*-linux-gnu*, to support old configure scripts. + case $host_os in +-linux-gnu*) ;; ++linux-gnu*|linux-uclibc*) ;; + linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` + esac + +@@ -1251,7 +1251,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + version_type=linux + need_lib_prefix=no + need_version=no diff --git a/packages/gcc/gcc-4.2.4/103-uclibc-conf-noupstream.patch b/packages/gcc/gcc-4.2.4/103-uclibc-conf-noupstream.patch new file mode 100644 index 0000000000..09c9bbecfb --- /dev/null +++ b/packages/gcc/gcc-4.2.4/103-uclibc-conf-noupstream.patch @@ -0,0 +1,11 @@ +--- gcc/gcc/config.gcc.uclibc100-sh~ 2006-03-06 20:46:56 +0100 ++++ gcc/gcc/config.gcc 2006-03-10 15:02:41 +0100 +@@ -1905,7 +1905,7 @@ + ;; + sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \ + sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \ +- sh-*-linux* | sh[346lbe]*-*-linux* | \ ++ sh*-*-linux* | sh[346lbe]*-*-linux* | \ + sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \ + sh64-*-netbsd* | sh64l*-*-netbsd*) + tmake_file="${tmake_file} sh/t-sh sh/t-elf" diff --git a/packages/gcc/gcc-4.2.4/110-arm-eabi.patch b/packages/gcc/gcc-4.2.4/110-arm-eabi.patch new file mode 100644 index 0000000000..acebe5308f --- /dev/null +++ b/packages/gcc/gcc-4.2.4/110-arm-eabi.patch @@ -0,0 +1,27 @@ +--- gcc-2005q3-1.orig/gcc/config.gcc 2005-10-31 19:02:54.000000000 +0300 ++++ gcc-2005q3-1/gcc/config.gcc 2006-01-27 01:09:09.000000000 +0300 +@@ -674,7 +674,7 @@ + tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" + tmake_file="t-slibgcc-elf-ver t-linux arm/t-arm" + case ${target} in +- arm*-*-linux-gnueabi) ++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) + tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h" + tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi" + # The BPABI long long divmod functions return a 128-bit value in + +diff -urN gcc-2005q3-2/gcc/config/arm/linux-eabi.h gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h +--- gcc-2005q3-2/gcc/config/arm/linux-eabi.h 2005-12-07 23:14:16.000000000 +0300 ++++ gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h 2006-03-29 19:02:34.000000000 +0400 +@@ -53,7 +53,11 @@ + /* Use ld-linux.so.3 so that it will be possible to run "classic" + GNU/Linux binaries on an EABI system. */ + #undef LINUX_TARGET_INTERPRETER ++#ifdef USE_UCLIBC ++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0" ++#else + #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.3" ++#endif + + /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to + use the GNU/Linux version, not the generic BPABI version. */ diff --git a/packages/gcc/gcc-4.2.4/200-uclibc-locale.patch b/packages/gcc/gcc-4.2.4/200-uclibc-locale.patch new file mode 100644 index 0000000000..ea21388b75 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/200-uclibc-locale.patch @@ -0,0 +1,2790 @@ +--- gcc/libstdc++-v3/acinclude.m4 ++++ gcc/libstdc++-v3/acinclude.m4 +@@ -1369,7 +1369,7 @@ + AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [ + GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@], + [use MODEL for target locale package], +- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto]) ++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto]) + + # Deal with gettext issues. Default to not using it (=no) until we detect + # support for it later. Let the user turn it off via --e/d, but let that +@@ -1385,6 +1385,9 @@ + # Default to "generic". + if test $enable_clocale_flag = auto; then + case ${target_os} in ++ *-uclibc*) ++ enable_clocale_flag=uclibc ++ ;; + linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) + AC_EGREP_CPP([_GLIBCXX_ok], [ + #include <features.h> +@@ -1528,6 +1531,40 @@ + CTIME_CC=config/locale/generic/time_members.cc + CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h + ;; ++ uclibc) ++ AC_MSG_RESULT(uclibc) ++ ++ # Declare intention to use gettext, and add support for specific ++ # languages. ++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT ++ ALL_LINGUAS="de fr" ++ ++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc. ++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no) ++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then ++ USE_NLS=yes ++ fi ++ # Export the build objects. ++ for ling in $ALL_LINGUAS; do \ ++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \ ++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \ ++ done ++ AC_SUBST(glibcxx_MOFILES) ++ AC_SUBST(glibcxx_POFILES) ++ ++ CLOCALE_H=config/locale/uclibc/c_locale.h ++ CLOCALE_CC=config/locale/uclibc/c_locale.cc ++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc ++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc ++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc ++ CMESSAGES_H=config/locale/uclibc/messages_members.h ++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc ++ CMONEY_CC=config/locale/uclibc/monetary_members.cc ++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc ++ CTIME_H=config/locale/uclibc/time_members.h ++ CTIME_CC=config/locale/uclibc/time_members.cc ++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h ++ ;; + esac + + # This is where the testsuite looks for locale catalogs, using the +--- gcc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h ++++ gcc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h +@@ -0,0 +1,63 @@ ++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*- ++ ++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// Written by Jakub Jelinek <jakub@redhat.com> ++ ++#include <bits/c++config.h> ++#include <clocale> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning clean this up ++#endif ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ ++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l; ++extern "C" __typeof(strcoll_l) __strcoll_l; ++extern "C" __typeof(strftime_l) __strftime_l; ++extern "C" __typeof(strtod_l) __strtod_l; ++extern "C" __typeof(strtof_l) __strtof_l; ++extern "C" __typeof(strtold_l) __strtold_l; ++extern "C" __typeof(strxfrm_l) __strxfrm_l; ++extern "C" __typeof(newlocale) __newlocale; ++extern "C" __typeof(freelocale) __freelocale; ++extern "C" __typeof(duplocale) __duplocale; ++extern "C" __typeof(uselocale) __uselocale; ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++extern "C" __typeof(iswctype_l) __iswctype_l; ++extern "C" __typeof(towlower_l) __towlower_l; ++extern "C" __typeof(towupper_l) __towupper_l; ++extern "C" __typeof(wcscoll_l) __wcscoll_l; ++extern "C" __typeof(wcsftime_l) __wcsftime_l; ++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l; ++extern "C" __typeof(wctype_l) __wctype_l; ++#endif ++ ++#endif // GLIBC 2.3 and later +--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc +@@ -0,0 +1,160 @@ ++// Wrapper for underlying C-language localization -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.8 Standard locale categories. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <cerrno> // For errno ++#include <locale> ++#include <stdexcept> ++#include <langinfo.h> ++#include <bits/c++locale_internal.h> ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __strtol_l(S, E, B, L) strtol((S), (E), (B)) ++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B)) ++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B)) ++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B)) ++#define __strtof_l(S, E, L) strtof((S), (E)) ++#define __strtod_l(S, E, L) strtod((S), (E)) ++#define __strtold_l(S, E, L) strtold((S), (E)) ++#warning should dummy __newlocale check for C|POSIX ? ++#define __newlocale(a, b, c) NULL ++#define __freelocale(a) ((void)0) ++#define __duplocale(a) __c_locale() ++#endif ++ ++namespace std ++{ ++ template<> ++ void ++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, ++ const __c_locale& __cloc) ++ { ++ if (!(__err & ios_base::failbit)) ++ { ++ char* __sanity; ++ errno = 0; ++ float __f = __strtof_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __f; ++ else ++ __err |= ios_base::failbit; ++ } ++ } ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, ++ const __c_locale& __cloc) ++ { ++ if (!(__err & ios_base::failbit)) ++ { ++ char* __sanity; ++ errno = 0; ++ double __d = __strtod_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __d; ++ else ++ __err |= ios_base::failbit; ++ } ++ } ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err, ++ const __c_locale& __cloc) ++ { ++ if (!(__err & ios_base::failbit)) ++ { ++ char* __sanity; ++ errno = 0; ++ long double __ld = __strtold_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __ld; ++ else ++ __err |= ios_base::failbit; ++ } ++ } ++ ++ void ++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, ++ __c_locale __old) ++ { ++ __cloc = __newlocale(1 << LC_ALL, __s, __old); ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ if (!__cloc) ++ { ++ // This named locale is not supported by the underlying OS. ++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale " ++ "name not valid")); ++ } ++#endif ++ } ++ ++ void ++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc) ++ { ++ if (_S_get_c_locale() != __cloc) ++ __freelocale(__cloc); ++ } ++ ++ __c_locale ++ locale::facet::_S_clone_c_locale(__c_locale& __cloc) ++ { return __duplocale(__cloc); } ++} // namespace std ++ ++namespace __gnu_cxx ++{ ++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] = ++ { ++ "LC_CTYPE", ++ "LC_NUMERIC", ++ "LC_TIME", ++ "LC_COLLATE", ++ "LC_MONETARY", ++ "LC_MESSAGES", ++#if _GLIBCXX_NUM_CATEGORIES != 0 ++ "LC_PAPER", ++ "LC_NAME", ++ "LC_ADDRESS", ++ "LC_TELEPHONE", ++ "LC_MEASUREMENT", ++ "LC_IDENTIFICATION" ++#endif ++ }; ++} ++ ++namespace std ++{ ++ const char* const* const locale::_S_categories = __gnu_cxx::category_names; ++} // namespace std +--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.h ++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.h +@@ -0,0 +1,117 @@ ++// Wrapper for underlying C-language localization -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.8 Standard locale categories. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#ifndef _C_LOCALE_H ++#define _C_LOCALE_H 1 ++ ++#pragma GCC system_header ++ ++#include <cstring> // get std::strlen ++#include <cstdio> // get std::snprintf or std::sprintf ++#include <clocale> ++#include <langinfo.h> // For codecvt ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this ++#endif ++#ifdef __UCLIBC_HAS_LOCALE__ ++#include <iconv.h> // For codecvt using iconv, iconv_t ++#endif ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++#include <libintl.h> // For messages ++#endif ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning what is _GLIBCXX_C_LOCALE_GNU for ++#endif ++#define _GLIBCXX_C_LOCALE_GNU 1 ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix categories ++#endif ++// #define _GLIBCXX_NUM_CATEGORIES 6 ++#define _GLIBCXX_NUM_CATEGORIES 0 ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++namespace __gnu_cxx ++{ ++ extern "C" __typeof(uselocale) __uselocale; ++} ++#endif ++ ++namespace std ++{ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ typedef __locale_t __c_locale; ++#else ++ typedef int* __c_locale; ++#endif ++ ++ // Convert numeric value of type _Tv to string and return length of ++ // string. If snprintf is available use it, otherwise fall back to ++ // the unsafe sprintf which, in general, can be dangerous and should ++ // be avoided. ++ template<typename _Tv> ++ int ++ __convert_from_v(char* __out, ++ const int __size __attribute__ ((__unused__)), ++ const char* __fmt, ++#ifdef __UCLIBC_HAS_XCLOCALE__ ++ _Tv __v, const __c_locale& __cloc, int __prec) ++ { ++ __c_locale __old = __gnu_cxx::__uselocale(__cloc); ++#else ++ _Tv __v, const __c_locale&, int __prec) ++ { ++# ifdef __UCLIBC_HAS_LOCALE__ ++ char* __old = std::setlocale(LC_ALL, NULL); ++ char* __sav = new char[std::strlen(__old) + 1]; ++ std::strcpy(__sav, __old); ++ std::setlocale(LC_ALL, "C"); ++# endif ++#endif ++ ++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v); ++ ++#ifdef __UCLIBC_HAS_XCLOCALE__ ++ __gnu_cxx::__uselocale(__old); ++#elif defined __UCLIBC_HAS_LOCALE__ ++ std::setlocale(LC_ALL, __sav); ++ delete [] __sav; ++#endif ++ return __ret; ++ } ++} ++ ++#endif +--- gcc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc +@@ -0,0 +1,306 @@ ++// std::codecvt implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2002, 2003 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.1.5 - Template class codecvt ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++namespace std ++{ ++ // Specializations. ++#ifdef _GLIBCXX_USE_WCHAR_T ++ codecvt_base::result ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_out(state_type& __state, const intern_type* __from, ++ const intern_type* __from_end, const intern_type*& __from_next, ++ extern_type* __to, extern_type* __to_end, ++ extern_type*& __to_next) const ++ { ++ result __ret = ok; ++ state_type __tmp_state(__state); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ ++ // wcsnrtombs is *very* fast but stops if encounters NUL characters: ++ // in case we fall back to wcrtomb and then continue, in a loop. ++ // NB: wcsnrtombs is a GNU extension ++ for (__from_next = __from, __to_next = __to; ++ __from_next < __from_end && __to_next < __to_end ++ && __ret == ok;) ++ { ++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0', ++ __from_end - __from_next); ++ if (!__from_chunk_end) ++ __from_chunk_end = __from_end; ++ ++ __from = __from_next; ++ const size_t __conv = wcsnrtombs(__to_next, &__from_next, ++ __from_chunk_end - __from_next, ++ __to_end - __to_next, &__state); ++ if (__conv == static_cast<size_t>(-1)) ++ { ++ // In case of error, in order to stop at the exact place we ++ // have to start again from the beginning with a series of ++ // wcrtomb. ++ for (; __from < __from_next; ++__from) ++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state); ++ __state = __tmp_state; ++ __ret = error; ++ } ++ else if (__from_next && __from_next < __from_chunk_end) ++ { ++ __to_next += __conv; ++ __ret = partial; ++ } ++ else ++ { ++ __from_next = __from_chunk_end; ++ __to_next += __conv; ++ } ++ ++ if (__from_next < __from_end && __ret == ok) ++ { ++ extern_type __buf[MB_LEN_MAX]; ++ __tmp_state = __state; ++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state); ++ if (__conv > static_cast<size_t>(__to_end - __to_next)) ++ __ret = partial; ++ else ++ { ++ memcpy(__to_next, __buf, __conv); ++ __state = __tmp_state; ++ __to_next += __conv; ++ ++__from_next; ++ } ++ } ++ } ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ ++ return __ret; ++ } ++ ++ codecvt_base::result ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_in(state_type& __state, const extern_type* __from, ++ const extern_type* __from_end, const extern_type*& __from_next, ++ intern_type* __to, intern_type* __to_end, ++ intern_type*& __to_next) const ++ { ++ result __ret = ok; ++ state_type __tmp_state(__state); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ ++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters: ++ // in case we store a L'\0' and then continue, in a loop. ++ // NB: mbsnrtowcs is a GNU extension ++ for (__from_next = __from, __to_next = __to; ++ __from_next < __from_end && __to_next < __to_end ++ && __ret == ok;) ++ { ++ const extern_type* __from_chunk_end; ++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0', ++ __from_end ++ - __from_next)); ++ if (!__from_chunk_end) ++ __from_chunk_end = __from_end; ++ ++ __from = __from_next; ++ size_t __conv = mbsnrtowcs(__to_next, &__from_next, ++ __from_chunk_end - __from_next, ++ __to_end - __to_next, &__state); ++ if (__conv == static_cast<size_t>(-1)) ++ { ++ // In case of error, in order to stop at the exact place we ++ // have to start again from the beginning with a series of ++ // mbrtowc. ++ for (;; ++__to_next, __from += __conv) ++ { ++ __conv = mbrtowc(__to_next, __from, __from_end - __from, ++ &__tmp_state); ++ if (__conv == static_cast<size_t>(-1) ++ || __conv == static_cast<size_t>(-2)) ++ break; ++ } ++ __from_next = __from; ++ __state = __tmp_state; ++ __ret = error; ++ } ++ else if (__from_next && __from_next < __from_chunk_end) ++ { ++ // It is unclear what to return in this case (see DR 382). ++ __to_next += __conv; ++ __ret = partial; ++ } ++ else ++ { ++ __from_next = __from_chunk_end; ++ __to_next += __conv; ++ } ++ ++ if (__from_next < __from_end && __ret == ok) ++ { ++ if (__to_next < __to_end) ++ { ++ // XXX Probably wrong for stateful encodings ++ __tmp_state = __state; ++ ++__from_next; ++ *__to_next++ = L'\0'; ++ } ++ else ++ __ret = partial; ++ } ++ } ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ ++ return __ret; ++ } ++ ++ int ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_encoding() const throw() ++ { ++ // XXX This implementation assumes that the encoding is ++ // stateless and is either single-byte or variable-width. ++ int __ret = 0; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ if (MB_CUR_MAX == 1) ++ __ret = 1; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return __ret; ++ } ++ ++ int ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_max_length() const throw() ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ // XXX Probably wrong for stateful encodings. ++ int __ret = MB_CUR_MAX; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return __ret; ++ } ++ ++ int ++ codecvt<wchar_t, char, mbstate_t>:: ++ do_length(state_type& __state, const extern_type* __from, ++ const extern_type* __end, size_t __max) const ++ { ++ int __ret = 0; ++ state_type __tmp_state(__state); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_codecvt); ++#endif ++ ++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters: ++ // in case we advance past it and then continue, in a loop. ++ // NB: mbsnrtowcs is a GNU extension ++ ++ // A dummy internal buffer is needed in order for mbsnrtocws to consider ++ // its fourth parameter (it wouldn't with NULL as first parameter). ++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) ++ * __max)); ++ while (__from < __end && __max) ++ { ++ const extern_type* __from_chunk_end; ++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0', ++ __end ++ - __from)); ++ if (!__from_chunk_end) ++ __from_chunk_end = __end; ++ ++ const extern_type* __tmp_from = __from; ++ size_t __conv = mbsnrtowcs(__to, &__from, ++ __from_chunk_end - __from, ++ __max, &__state); ++ if (__conv == static_cast<size_t>(-1)) ++ { ++ // In case of error, in order to stop at the exact place we ++ // have to start again from the beginning with a series of ++ // mbrtowc. ++ for (__from = __tmp_from;; __from += __conv) ++ { ++ __conv = mbrtowc(NULL, __from, __end - __from, ++ &__tmp_state); ++ if (__conv == static_cast<size_t>(-1) ++ || __conv == static_cast<size_t>(-2)) ++ break; ++ } ++ __state = __tmp_state; ++ __ret += __from - __tmp_from; ++ break; ++ } ++ if (!__from) ++ __from = __from_chunk_end; ++ ++ __ret += __from - __tmp_from; ++ __max -= __conv; ++ ++ if (__from < __end && __max) ++ { ++ // XXX Probably wrong for stateful encodings ++ __tmp_state = __state; ++ ++__from; ++ ++__ret; ++ --__max; ++ } ++ } ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ ++ return __ret; ++ } ++#endif ++} +--- gcc/libstdc++-v3/config/locale/uclibc/collate_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/collate_members.cc +@@ -0,0 +1,80 @@ ++// std::collate implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2)) ++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N)) ++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2)) ++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N)) ++#endif ++ ++namespace std ++{ ++ // These are basically extensions to char_traits, and perhaps should ++ // be put there instead of here. ++ template<> ++ int ++ collate<char>::_M_compare(const char* __one, const char* __two) const ++ { ++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate); ++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0); ++ } ++ ++ template<> ++ size_t ++ collate<char>::_M_transform(char* __to, const char* __from, ++ size_t __n) const ++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ int ++ collate<wchar_t>::_M_compare(const wchar_t* __one, ++ const wchar_t* __two) const ++ { ++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate); ++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0); ++ } ++ ++ template<> ++ size_t ++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from, ++ size_t __n) const ++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); } ++#endif ++} +--- gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc +@@ -0,0 +1,300 @@ ++// std::ctype implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#define _LIBC ++#include <locale> ++#undef _LIBC ++#include <bits/c++locale_internal.h> ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __wctype_l(S, L) wctype((S)) ++#define __towupper_l(C, L) towupper((C)) ++#define __towlower_l(C, L) towlower((C)) ++#define __iswctype_l(C, M, L) iswctype((C), (M)) ++#endif ++ ++namespace std ++{ ++ // NB: The other ctype<char> specializations are in src/locale.cc and ++ // various /config/os/* files. ++ template<> ++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs) ++ : ctype<char>(0, false, __refs) ++ { ++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) ++ { ++ this->_S_destroy_c_locale(this->_M_c_locale_ctype); ++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s); ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper; ++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower; ++ this->_M_table = this->_M_c_locale_ctype->__ctype_b; ++#endif ++ } ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ ctype<wchar_t>::__wmask_type ++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const ++ { ++ __wmask_type __ret; ++ switch (__m) ++ { ++ case space: ++ __ret = __wctype_l("space", _M_c_locale_ctype); ++ break; ++ case print: ++ __ret = __wctype_l("print", _M_c_locale_ctype); ++ break; ++ case cntrl: ++ __ret = __wctype_l("cntrl", _M_c_locale_ctype); ++ break; ++ case upper: ++ __ret = __wctype_l("upper", _M_c_locale_ctype); ++ break; ++ case lower: ++ __ret = __wctype_l("lower", _M_c_locale_ctype); ++ break; ++ case alpha: ++ __ret = __wctype_l("alpha", _M_c_locale_ctype); ++ break; ++ case digit: ++ __ret = __wctype_l("digit", _M_c_locale_ctype); ++ break; ++ case punct: ++ __ret = __wctype_l("punct", _M_c_locale_ctype); ++ break; ++ case xdigit: ++ __ret = __wctype_l("xdigit", _M_c_locale_ctype); ++ break; ++ case alnum: ++ __ret = __wctype_l("alnum", _M_c_locale_ctype); ++ break; ++ case graph: ++ __ret = __wctype_l("graph", _M_c_locale_ctype); ++ break; ++ default: ++ __ret = __wmask_type(); ++ } ++ return __ret; ++ } ++ ++ wchar_t ++ ctype<wchar_t>::do_toupper(wchar_t __c) const ++ { return __towupper_l(__c, _M_c_locale_ctype); } ++ ++ const wchar_t* ++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi) ++ { ++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype); ++ ++__lo; ++ } ++ return __hi; ++ } ++ ++ wchar_t ++ ctype<wchar_t>::do_tolower(wchar_t __c) const ++ { return __towlower_l(__c, _M_c_locale_ctype); } ++ ++ const wchar_t* ++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi) ++ { ++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype); ++ ++__lo; ++ } ++ return __hi; ++ } ++ ++ bool ++ ctype<wchar_t>:: ++ do_is(mask __m, wchar_t __c) const ++ { ++ // Highest bitmask in ctype_base == 10, but extra in "C" ++ // library for blank. ++ bool __ret = false; ++ const size_t __bitmasksize = 11; ++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) ++ if (__m & _M_bit[__bitcur] ++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype)) ++ { ++ __ret = true; ++ break; ++ } ++ return __ret; ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const ++ { ++ for (; __lo < __hi; ++__vec, ++__lo) ++ { ++ // Highest bitmask in ctype_base == 10, but extra in "C" ++ // library for blank. ++ const size_t __bitmasksize = 11; ++ mask __m = 0; ++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) ++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype)) ++ __m |= _M_bit[__bitcur]; ++ *__vec = __m; ++ } ++ return __hi; ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi && !this->do_is(__m, *__lo)) ++ ++__lo; ++ return __lo; ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const ++ { ++ while (__lo < __hi && this->do_is(__m, *__lo) != 0) ++ ++__lo; ++ return __lo; ++ } ++ ++ wchar_t ++ ctype<wchar_t>:: ++ do_widen(char __c) const ++ { return _M_widen[static_cast<unsigned char>(__c)]; } ++ ++ const char* ++ ctype<wchar_t>:: ++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const ++ { ++ while (__lo < __hi) ++ { ++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)]; ++ ++__lo; ++ ++__dest; ++ } ++ return __hi; ++ } ++ ++ char ++ ctype<wchar_t>:: ++ do_narrow(wchar_t __wc, char __dfault) const ++ { ++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok) ++ return _M_narrow[__wc]; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_ctype); ++#endif ++ const int __c = wctob(__wc); ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return (__c == EOF ? __dfault : static_cast<char>(__c)); ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, ++ char* __dest) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_ctype); ++#endif ++ if (_M_narrow_ok) ++ while (__lo < __hi) ++ { ++ if (*__lo >= 0 && *__lo < 128) ++ *__dest = _M_narrow[*__lo]; ++ else ++ { ++ const int __c = wctob(*__lo); ++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c)); ++ } ++ ++__lo; ++ ++__dest; ++ } ++ else ++ while (__lo < __hi) ++ { ++ const int __c = wctob(*__lo); ++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c)); ++ ++__lo; ++ ++__dest; ++ } ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ return __hi; ++ } ++ ++ void ++ ctype<wchar_t>::_M_initialize_ctype() ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_ctype); ++#endif ++ wint_t __i; ++ for (__i = 0; __i < 128; ++__i) ++ { ++ const int __c = wctob(__i); ++ if (__c == EOF) ++ break; ++ else ++ _M_narrow[__i] = static_cast<char>(__c); ++ } ++ if (__i == 128) ++ _M_narrow_ok = true; ++ else ++ _M_narrow_ok = false; ++ for (size_t __j = 0; ++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j) ++ _M_widen[__j] = btowc(__j); ++ ++ for (size_t __k = 0; __k <= 11; ++__k) ++ { ++ _M_bit[__k] = static_cast<mask>(_ISbit(__k)); ++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]); ++ } ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#endif ++ } ++#endif // _GLIBCXX_USE_WCHAR_T ++} +--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.cc +@@ -0,0 +1,100 @@ ++// std::messages implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix gettext stuff ++#endif ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++extern "C" char *__dcgettext(const char *domainname, ++ const char *msgid, int category); ++#undef gettext ++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES) ++#else ++#undef gettext ++#define gettext(msgid) (msgid) ++#endif ++ ++namespace std ++{ ++ // Specializations. ++ template<> ++ string ++ messages<char>::do_get(catalog, int, int, const string& __dfault) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_messages); ++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str())); ++ __uselocale(__old); ++ return string(__msg); ++#elif defined __UCLIBC_HAS_LOCALE__ ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_messages); ++ const char* __msg = gettext(__dfault.c_str()); ++ setlocale(LC_ALL, __old); ++ free(__old); ++ return string(__msg); ++#else ++ const char* __msg = gettext(__dfault.c_str()); ++ return string(__msg); ++#endif ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ wstring ++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const ++ { ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(_M_c_locale_messages); ++ char* __msg = gettext(_M_convert_to_char(__dfault)); ++ __uselocale(__old); ++ return _M_convert_from_char(__msg); ++# elif defined __UCLIBC_HAS_LOCALE__ ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_messages); ++ char* __msg = gettext(_M_convert_to_char(__dfault)); ++ setlocale(LC_ALL, __old); ++ free(__old); ++ return _M_convert_from_char(__msg); ++# else ++ char* __msg = gettext(_M_convert_to_char(__dfault)); ++ return _M_convert_from_char(__msg); ++# endif ++ } ++#endif ++} +--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.h ++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.h +@@ -0,0 +1,118 @@ ++// std::messages implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.7.1.2 messages functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix prototypes for *textdomain funcs ++#endif ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++extern "C" char *__textdomain(const char *domainname); ++extern "C" char *__bindtextdomain(const char *domainname, ++ const char *dirname); ++#else ++#undef __textdomain ++#undef __bindtextdomain ++#define __textdomain(D) ((void)0) ++#define __bindtextdomain(D,P) ((void)0) ++#endif ++ ++ // Non-virtual member functions. ++ template<typename _CharT> ++ messages<_CharT>::messages(size_t __refs) ++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), ++ _M_name_messages(_S_get_c_name()) ++ { } ++ ++ template<typename _CharT> ++ messages<_CharT>::messages(__c_locale __cloc, const char* __s, ++ size_t __refs) ++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)), ++ _M_name_messages(__s) ++ { ++ char* __tmp = new char[std::strlen(__s) + 1]; ++ std::strcpy(__tmp, __s); ++ _M_name_messages = __tmp; ++ } ++ ++ template<typename _CharT> ++ typename messages<_CharT>::catalog ++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, ++ const char* __dir) const ++ { ++ __bindtextdomain(__s.c_str(), __dir); ++ return this->do_open(__s, __loc); ++ } ++ ++ // Virtual member functions. ++ template<typename _CharT> ++ messages<_CharT>::~messages() ++ { ++ if (_M_name_messages != _S_get_c_name()) ++ delete [] _M_name_messages; ++ _S_destroy_c_locale(_M_c_locale_messages); ++ } ++ ++ template<typename _CharT> ++ typename messages<_CharT>::catalog ++ messages<_CharT>::do_open(const basic_string<char>& __s, ++ const locale&) const ++ { ++ // No error checking is done, assume the catalog exists and can ++ // be used. ++ __textdomain(__s.c_str()); ++ return 0; ++ } ++ ++ template<typename _CharT> ++ void ++ messages<_CharT>::do_close(catalog) const ++ { } ++ ++ // messages_byname ++ template<typename _CharT> ++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) ++ : messages<_CharT>(__refs) ++ { ++ if (this->_M_name_messages != locale::facet::_S_get_c_name()) ++ delete [] this->_M_name_messages; ++ char* __tmp = new char[std::strlen(__s) + 1]; ++ std::strcpy(__tmp, __s); ++ this->_M_name_messages = __tmp; ++ ++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) ++ { ++ this->_S_destroy_c_locale(this->_M_c_locale_messages); ++ this->_S_create_c_locale(this->_M_c_locale_messages, __s); ++ } ++ } +--- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc +@@ -0,0 +1,692 @@ ++// std::moneypunct implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#define _LIBC ++#include <locale> ++#undef _LIBC ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning optimize this for uclibc ++#warning tailor for stub locale support ++#endif ++ ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __nl_langinfo_l(N, L) nl_langinfo((N)) ++#endif ++ ++namespace std ++{ ++ // Construct and return valid pattern consisting of some combination of: ++ // space none symbol sign value ++ money_base::pattern ++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn) ++ { ++ pattern __ret; ++ ++ // This insanely complicated routine attempts to construct a valid ++ // pattern for use with monyepunct. A couple of invariants: ++ ++ // if (__precedes) symbol -> value ++ // else value -> symbol ++ ++ // if (__space) space ++ // else none ++ ++ // none == never first ++ // space never first or last ++ ++ // Any elegant implementations of this are welcome. ++ switch (__posn) ++ { ++ case 0: ++ case 1: ++ // 1 The sign precedes the value and symbol. ++ __ret.field[0] = sign; ++ if (__space) ++ { ++ // Pattern starts with sign. ++ if (__precedes) ++ { ++ __ret.field[1] = symbol; ++ __ret.field[3] = value; ++ } ++ else ++ { ++ __ret.field[1] = value; ++ __ret.field[3] = symbol; ++ } ++ __ret.field[2] = space; ++ } ++ else ++ { ++ // Pattern starts with sign and ends with none. ++ if (__precedes) ++ { ++ __ret.field[1] = symbol; ++ __ret.field[2] = value; ++ } ++ else ++ { ++ __ret.field[1] = value; ++ __ret.field[2] = symbol; ++ } ++ __ret.field[3] = none; ++ } ++ break; ++ case 2: ++ // 2 The sign follows the value and symbol. ++ if (__space) ++ { ++ // Pattern either ends with sign. ++ if (__precedes) ++ { ++ __ret.field[0] = symbol; ++ __ret.field[2] = value; ++ } ++ else ++ { ++ __ret.field[0] = value; ++ __ret.field[2] = symbol; ++ } ++ __ret.field[1] = space; ++ __ret.field[3] = sign; ++ } ++ else ++ { ++ // Pattern ends with sign then none. ++ if (__precedes) ++ { ++ __ret.field[0] = symbol; ++ __ret.field[1] = value; ++ } ++ else ++ { ++ __ret.field[0] = value; ++ __ret.field[1] = symbol; ++ } ++ __ret.field[2] = sign; ++ __ret.field[3] = none; ++ } ++ break; ++ case 3: ++ // 3 The sign immediately precedes the symbol. ++ if (__precedes) ++ { ++ __ret.field[0] = sign; ++ __ret.field[1] = symbol; ++ if (__space) ++ { ++ __ret.field[2] = space; ++ __ret.field[3] = value; ++ } ++ else ++ { ++ __ret.field[2] = value; ++ __ret.field[3] = none; ++ } ++ } ++ else ++ { ++ __ret.field[0] = value; ++ if (__space) ++ { ++ __ret.field[1] = space; ++ __ret.field[2] = sign; ++ __ret.field[3] = symbol; ++ } ++ else ++ { ++ __ret.field[1] = sign; ++ __ret.field[2] = symbol; ++ __ret.field[3] = none; ++ } ++ } ++ break; ++ case 4: ++ // 4 The sign immediately follows the symbol. ++ if (__precedes) ++ { ++ __ret.field[0] = symbol; ++ __ret.field[1] = sign; ++ if (__space) ++ { ++ __ret.field[2] = space; ++ __ret.field[3] = value; ++ } ++ else ++ { ++ __ret.field[2] = value; ++ __ret.field[3] = none; ++ } ++ } ++ else ++ { ++ __ret.field[0] = value; ++ if (__space) ++ { ++ __ret.field[1] = space; ++ __ret.field[2] = symbol; ++ __ret.field[3] = sign; ++ } ++ else ++ { ++ __ret.field[1] = symbol; ++ __ret.field[2] = sign; ++ __ret.field[3] = none; ++ } ++ } ++ break; ++ default: ++ ; ++ } ++ return __ret; ++ } ++ ++ template<> ++ void ++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, ++ const char*) ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<char, true>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = '.'; ++ _M_data->_M_thousands_sep = ','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = ""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = ""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = ""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i]; ++ } ++ else ++ { ++ // Named locale. ++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, ++ __cloc)); ++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, ++ __cloc)); ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign); ++ ++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); ++ if (!__nposn) ++ _M_data->_M_negative_sign = "()"; ++ else ++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, ++ __cloc); ++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign); ++ ++ // _Intl == true ++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); ++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol); ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, ++ __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ } ++ } ++ ++ template<> ++ void ++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, ++ const char*) ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<char, false>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = '.'; ++ _M_data->_M_thousands_sep = ','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = ""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = ""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = ""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i]; ++ } ++ else ++ { ++ // Named locale. ++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, ++ __cloc)); ++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, ++ __cloc)); ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign); ++ ++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); ++ if (!__nposn) ++ _M_data->_M_negative_sign = "()"; ++ else ++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, ++ __cloc); ++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign); ++ ++ // _Intl == false ++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); ++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol); ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ } ++ } ++ ++ template<> ++ moneypunct<char, true>::~moneypunct() ++ { delete _M_data; } ++ ++ template<> ++ moneypunct<char, false>::~moneypunct() ++ { delete _M_data; } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ void ++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ const char*) ++#else ++ const char* __name) ++#endif ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<wchar_t, true>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = L'.'; ++ _M_data->_M_thousands_sep = L','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ // Use ctype::widen code without the facet... ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = ++ static_cast<wchar_t>(money_base::_S_atoms[__i]); ++ } ++ else ++ { ++ // Named locale. ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(__cloc); ++#else ++ // Switch to named locale so that mbsrtowcs will work. ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, __name); ++#endif ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this... should be monetary ++#endif ++#ifdef __UCLIBC__ ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ _M_data->_M_decimal_point = __cloc->decimal_point_wc; ++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; ++# else ++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc; ++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; ++# endif ++#else ++ union { char *__s; wchar_t __w; } __u; ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc); ++ _M_data->_M_decimal_point = __u.__w; ++ ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc); ++ _M_data->_M_thousands_sep = __u.__w; ++#endif ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ ++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); ++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); ++ ++ wchar_t* __wcs_ps = 0; ++ wchar_t* __wcs_ns = 0; ++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); ++ try ++ { ++ mbstate_t __state; ++ size_t __len = strlen(__cpossign); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ps = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state); ++ _M_data->_M_positive_sign = __wcs_ps; ++ } ++ else ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign); ++ ++ __len = strlen(__cnegsign); ++ if (!__nposn) ++ _M_data->_M_negative_sign = L"()"; ++ else if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ns = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state); ++ _M_data->_M_negative_sign = __wcs_ns; ++ } ++ else ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign); ++ ++ // _Intl == true. ++ __len = strlen(__ccurr); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ wchar_t* __wcs = new wchar_t[__len]; ++ mbsrtowcs(__wcs, &__ccurr, __len, &__state); ++ _M_data->_M_curr_symbol = __wcs; ++ } ++ else ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol); ++ } ++ catch (...) ++ { ++ delete _M_data; ++ _M_data = 0; ++ delete __wcs_ps; ++ delete __wcs_ns; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ __throw_exception_again; ++ } ++ ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, ++ __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ } ++ } ++ ++ template<> ++ void ++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc, ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ const char*) ++#else ++ const char* __name) ++#endif ++ { ++ if (!_M_data) ++ _M_data = new __moneypunct_cache<wchar_t, false>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_decimal_point = L'.'; ++ _M_data->_M_thousands_sep = L','; ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = 0; ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = 0; ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = 0; ++ _M_data->_M_frac_digits = 0; ++ _M_data->_M_pos_format = money_base::_S_default_pattern; ++ _M_data->_M_neg_format = money_base::_S_default_pattern; ++ ++ // Use ctype::widen code without the facet... ++ for (size_t __i = 0; __i < money_base::_S_end; ++__i) ++ _M_data->_M_atoms[__i] = ++ static_cast<wchar_t>(money_base::_S_atoms[__i]); ++ } ++ else ++ { ++ // Named locale. ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __c_locale __old = __uselocale(__cloc); ++#else ++ // Switch to named locale so that mbsrtowcs will work. ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, __name); ++#endif ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this... should be monetary ++#endif ++#ifdef __UCLIBC__ ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ _M_data->_M_decimal_point = __cloc->decimal_point_wc; ++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; ++# else ++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc; ++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; ++# endif ++#else ++ union { char *__s; wchar_t __w; } __u; ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc); ++ _M_data->_M_decimal_point = __u.__w; ++ ++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc); ++ _M_data->_M_thousands_sep = __u.__w; ++#endif ++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ ++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); ++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); ++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); ++ ++ wchar_t* __wcs_ps = 0; ++ wchar_t* __wcs_ns = 0; ++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); ++ try ++ { ++ mbstate_t __state; ++ size_t __len; ++ __len = strlen(__cpossign); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ps = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state); ++ _M_data->_M_positive_sign = __wcs_ps; ++ } ++ else ++ _M_data->_M_positive_sign = L""; ++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign); ++ ++ __len = strlen(__cnegsign); ++ if (!__nposn) ++ _M_data->_M_negative_sign = L"()"; ++ else if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ __wcs_ns = new wchar_t[__len]; ++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state); ++ _M_data->_M_negative_sign = __wcs_ns; ++ } ++ else ++ _M_data->_M_negative_sign = L""; ++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign); ++ ++ // _Intl == true. ++ __len = strlen(__ccurr); ++ if (__len) ++ { ++ ++__len; ++ memset(&__state, 0, sizeof(mbstate_t)); ++ wchar_t* __wcs = new wchar_t[__len]; ++ mbsrtowcs(__wcs, &__ccurr, __len, &__state); ++ _M_data->_M_curr_symbol = __wcs; ++ } ++ else ++ _M_data->_M_curr_symbol = L""; ++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol); ++ } ++ catch (...) ++ { ++ delete _M_data; ++ _M_data = 0; ++ delete __wcs_ps; ++ delete __wcs_ns; ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ __throw_exception_again; ++ } ++ ++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); ++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); ++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); ++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); ++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, ++ __pposn); ++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); ++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); ++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, ++ __nposn); ++ ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __uselocale(__old); ++#else ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ } ++ } ++ ++ template<> ++ moneypunct<wchar_t, true>::~moneypunct() ++ { ++ if (_M_data->_M_positive_sign_size) ++ delete [] _M_data->_M_positive_sign; ++ if (_M_data->_M_negative_sign_size ++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0) ++ delete [] _M_data->_M_negative_sign; ++ if (_M_data->_M_curr_symbol_size) ++ delete [] _M_data->_M_curr_symbol; ++ delete _M_data; ++ } ++ ++ template<> ++ moneypunct<wchar_t, false>::~moneypunct() ++ { ++ if (_M_data->_M_positive_sign_size) ++ delete [] _M_data->_M_positive_sign; ++ if (_M_data->_M_negative_sign_size ++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0) ++ delete [] _M_data->_M_negative_sign; ++ if (_M_data->_M_curr_symbol_size) ++ delete [] _M_data->_M_curr_symbol; ++ delete _M_data; ++ } ++#endif ++} +--- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc +@@ -0,0 +1,160 @@ ++// std::numpunct implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#define _LIBC ++#include <locale> ++#undef _LIBC ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning tailor for stub locale support ++#endif ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __nl_langinfo_l(N, L) nl_langinfo((N)) ++#endif ++ ++namespace std ++{ ++ template<> ++ void ++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __numpunct_cache<char>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_use_grouping = false; ++ ++ _M_data->_M_decimal_point = '.'; ++ _M_data->_M_thousands_sep = ','; ++ ++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i) ++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i]; ++ ++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j) ++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j]; ++ } ++ else ++ { ++ // Named locale. ++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, ++ __cloc)); ++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, ++ __cloc)); ++ ++ // Check for NULL, which implies no grouping. ++ if (_M_data->_M_thousands_sep == '\0') ++ _M_data->_M_grouping = ""; ++ else ++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ } ++ ++ // NB: There is no way to extact this info from posix locales. ++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc); ++ _M_data->_M_truename = "true"; ++ _M_data->_M_truename_size = 4; ++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); ++ _M_data->_M_falsename = "false"; ++ _M_data->_M_falsename_size = 5; ++ } ++ ++ template<> ++ numpunct<char>::~numpunct() ++ { delete _M_data; } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ void ++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __numpunct_cache<wchar_t>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_data->_M_grouping = ""; ++ _M_data->_M_grouping_size = 0; ++ _M_data->_M_use_grouping = false; ++ ++ _M_data->_M_decimal_point = L'.'; ++ _M_data->_M_thousands_sep = L','; ++ ++ // Use ctype::widen code without the facet... ++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i) ++ _M_data->_M_atoms_out[__i] = ++ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]); ++ ++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j) ++ _M_data->_M_atoms_in[__j] = ++ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]); ++ } ++ else ++ { ++ // Named locale. ++ // NB: In the GNU model wchar_t is always 32 bit wide. ++ union { char *__s; wchar_t __w; } __u; ++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc); ++ _M_data->_M_decimal_point = __u.__w; ++ ++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc); ++ _M_data->_M_thousands_sep = __u.__w; ++ ++ if (_M_data->_M_thousands_sep == L'\0') ++ _M_data->_M_grouping = ""; ++ else ++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc); ++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping); ++ } ++ ++ // NB: There is no way to extact this info from posix locales. ++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc); ++ _M_data->_M_truename = L"true"; ++ _M_data->_M_truename_size = 4; ++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); ++ _M_data->_M_falsename = L"false"; ++ _M_data->_M_falsename_size = 5; ++ } ++ ++ template<> ++ numpunct<wchar_t>::~numpunct() ++ { delete _M_data; } ++ #endif ++} +--- gcc/libstdc++-v3/config/locale/uclibc/time_members.cc ++++ gcc/libstdc++-v3/config/locale/uclibc/time_members.cc +@@ -0,0 +1,406 @@ ++// std::time_get, std::time_put implementation, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions ++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++ ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning tailor for stub locale support ++#endif ++#ifndef __UCLIBC_HAS_XLOCALE__ ++#define __nl_langinfo_l(N, L) nl_langinfo((N)) ++#endif ++ ++namespace std ++{ ++ template<> ++ void ++ __timepunct<char>:: ++ _M_put(char* __s, size_t __maxlen, const char* __format, ++ const tm* __tm) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm, ++ _M_c_locale_timepunct); ++#else ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_timepunct); ++ const size_t __len = strftime(__s, __maxlen, __format, __tm); ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ // Make sure __s is null terminated. ++ if (__len == 0) ++ __s[0] = '\0'; ++ } ++ ++ template<> ++ void ++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __timepunct_cache<char>; ++ ++ if (!__cloc) ++ { ++ // "C" locale ++ _M_c_locale_timepunct = _S_get_c_locale(); ++ ++ _M_data->_M_date_format = "%m/%d/%y"; ++ _M_data->_M_date_era_format = "%m/%d/%y"; ++ _M_data->_M_time_format = "%H:%M:%S"; ++ _M_data->_M_time_era_format = "%H:%M:%S"; ++ _M_data->_M_date_time_format = ""; ++ _M_data->_M_date_time_era_format = ""; ++ _M_data->_M_am = "AM"; ++ _M_data->_M_pm = "PM"; ++ _M_data->_M_am_pm_format = ""; ++ ++ // Day names, starting with "C"'s Sunday. ++ _M_data->_M_day1 = "Sunday"; ++ _M_data->_M_day2 = "Monday"; ++ _M_data->_M_day3 = "Tuesday"; ++ _M_data->_M_day4 = "Wednesday"; ++ _M_data->_M_day5 = "Thursday"; ++ _M_data->_M_day6 = "Friday"; ++ _M_data->_M_day7 = "Saturday"; ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ _M_data->_M_aday1 = "Sun"; ++ _M_data->_M_aday2 = "Mon"; ++ _M_data->_M_aday3 = "Tue"; ++ _M_data->_M_aday4 = "Wed"; ++ _M_data->_M_aday5 = "Thu"; ++ _M_data->_M_aday6 = "Fri"; ++ _M_data->_M_aday7 = "Sat"; ++ ++ // Month names, starting with "C"'s January. ++ _M_data->_M_month01 = "January"; ++ _M_data->_M_month02 = "February"; ++ _M_data->_M_month03 = "March"; ++ _M_data->_M_month04 = "April"; ++ _M_data->_M_month05 = "May"; ++ _M_data->_M_month06 = "June"; ++ _M_data->_M_month07 = "July"; ++ _M_data->_M_month08 = "August"; ++ _M_data->_M_month09 = "September"; ++ _M_data->_M_month10 = "October"; ++ _M_data->_M_month11 = "November"; ++ _M_data->_M_month12 = "December"; ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ _M_data->_M_amonth01 = "Jan"; ++ _M_data->_M_amonth02 = "Feb"; ++ _M_data->_M_amonth03 = "Mar"; ++ _M_data->_M_amonth04 = "Apr"; ++ _M_data->_M_amonth05 = "May"; ++ _M_data->_M_amonth06 = "Jun"; ++ _M_data->_M_amonth07 = "Jul"; ++ _M_data->_M_amonth08 = "Aug"; ++ _M_data->_M_amonth09 = "Sep"; ++ _M_data->_M_amonth10 = "Oct"; ++ _M_data->_M_amonth11 = "Nov"; ++ _M_data->_M_amonth12 = "Dec"; ++ } ++ else ++ { ++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc); ++ ++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc); ++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc); ++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc); ++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc); ++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc); ++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, ++ __cloc); ++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc); ++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc); ++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc); ++ ++ // Day names, starting with "C"'s Sunday. ++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc); ++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc); ++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc); ++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc); ++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc); ++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc); ++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc); ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc); ++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc); ++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc); ++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc); ++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc); ++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc); ++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc); ++ ++ // Month names, starting with "C"'s January. ++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc); ++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc); ++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc); ++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc); ++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc); ++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc); ++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc); ++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc); ++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc); ++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc); ++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc); ++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc); ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc); ++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc); ++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc); ++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc); ++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc); ++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc); ++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc); ++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc); ++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc); ++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc); ++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc); ++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc); ++ } ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ template<> ++ void ++ __timepunct<wchar_t>:: ++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, ++ const tm* __tm) const ++ { ++#ifdef __UCLIBC_HAS_XLOCALE__ ++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct); ++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm, ++ _M_c_locale_timepunct); ++#else ++ char* __old = strdup(setlocale(LC_ALL, NULL)); ++ setlocale(LC_ALL, _M_name_timepunct); ++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm); ++ setlocale(LC_ALL, __old); ++ free(__old); ++#endif ++ // Make sure __s is null terminated. ++ if (__len == 0) ++ __s[0] = L'\0'; ++ } ++ ++ template<> ++ void ++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc) ++ { ++ if (!_M_data) ++ _M_data = new __timepunct_cache<wchar_t>; ++ ++#warning wide time stuff ++// if (!__cloc) ++ { ++ // "C" locale ++ _M_c_locale_timepunct = _S_get_c_locale(); ++ ++ _M_data->_M_date_format = L"%m/%d/%y"; ++ _M_data->_M_date_era_format = L"%m/%d/%y"; ++ _M_data->_M_time_format = L"%H:%M:%S"; ++ _M_data->_M_time_era_format = L"%H:%M:%S"; ++ _M_data->_M_date_time_format = L""; ++ _M_data->_M_date_time_era_format = L""; ++ _M_data->_M_am = L"AM"; ++ _M_data->_M_pm = L"PM"; ++ _M_data->_M_am_pm_format = L""; ++ ++ // Day names, starting with "C"'s Sunday. ++ _M_data->_M_day1 = L"Sunday"; ++ _M_data->_M_day2 = L"Monday"; ++ _M_data->_M_day3 = L"Tuesday"; ++ _M_data->_M_day4 = L"Wednesday"; ++ _M_data->_M_day5 = L"Thursday"; ++ _M_data->_M_day6 = L"Friday"; ++ _M_data->_M_day7 = L"Saturday"; ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ _M_data->_M_aday1 = L"Sun"; ++ _M_data->_M_aday2 = L"Mon"; ++ _M_data->_M_aday3 = L"Tue"; ++ _M_data->_M_aday4 = L"Wed"; ++ _M_data->_M_aday5 = L"Thu"; ++ _M_data->_M_aday6 = L"Fri"; ++ _M_data->_M_aday7 = L"Sat"; ++ ++ // Month names, starting with "C"'s January. ++ _M_data->_M_month01 = L"January"; ++ _M_data->_M_month02 = L"February"; ++ _M_data->_M_month03 = L"March"; ++ _M_data->_M_month04 = L"April"; ++ _M_data->_M_month05 = L"May"; ++ _M_data->_M_month06 = L"June"; ++ _M_data->_M_month07 = L"July"; ++ _M_data->_M_month08 = L"August"; ++ _M_data->_M_month09 = L"September"; ++ _M_data->_M_month10 = L"October"; ++ _M_data->_M_month11 = L"November"; ++ _M_data->_M_month12 = L"December"; ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ _M_data->_M_amonth01 = L"Jan"; ++ _M_data->_M_amonth02 = L"Feb"; ++ _M_data->_M_amonth03 = L"Mar"; ++ _M_data->_M_amonth04 = L"Apr"; ++ _M_data->_M_amonth05 = L"May"; ++ _M_data->_M_amonth06 = L"Jun"; ++ _M_data->_M_amonth07 = L"Jul"; ++ _M_data->_M_amonth08 = L"Aug"; ++ _M_data->_M_amonth09 = L"Sep"; ++ _M_data->_M_amonth10 = L"Oct"; ++ _M_data->_M_amonth11 = L"Nov"; ++ _M_data->_M_amonth12 = L"Dec"; ++ } ++#if 0 ++ else ++ { ++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc); ++ ++ union { char *__s; wchar_t *__w; } __u; ++ ++ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc); ++ _M_data->_M_date_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc); ++ _M_data->_M_date_era_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc); ++ _M_data->_M_time_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc); ++ _M_data->_M_time_era_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc); ++ _M_data->_M_date_time_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc); ++ _M_data->_M_date_time_era_format = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc); ++ _M_data->_M_am = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc); ++ _M_data->_M_pm = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc); ++ _M_data->_M_am_pm_format = __u.__w; ++ ++ // Day names, starting with "C"'s Sunday. ++ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc); ++ _M_data->_M_day1 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc); ++ _M_data->_M_day2 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc); ++ _M_data->_M_day3 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc); ++ _M_data->_M_day4 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc); ++ _M_data->_M_day5 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc); ++ _M_data->_M_day6 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc); ++ _M_data->_M_day7 = __u.__w; ++ ++ // Abbreviated day names, starting with "C"'s Sun. ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc); ++ _M_data->_M_aday1 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc); ++ _M_data->_M_aday2 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc); ++ _M_data->_M_aday3 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc); ++ _M_data->_M_aday4 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc); ++ _M_data->_M_aday5 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc); ++ _M_data->_M_aday6 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc); ++ _M_data->_M_aday7 = __u.__w; ++ ++ // Month names, starting with "C"'s January. ++ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc); ++ _M_data->_M_month01 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc); ++ _M_data->_M_month02 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc); ++ _M_data->_M_month03 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc); ++ _M_data->_M_month04 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc); ++ _M_data->_M_month05 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc); ++ _M_data->_M_month06 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc); ++ _M_data->_M_month07 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc); ++ _M_data->_M_month08 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc); ++ _M_data->_M_month09 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc); ++ _M_data->_M_month10 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc); ++ _M_data->_M_month11 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc); ++ _M_data->_M_month12 = __u.__w; ++ ++ // Abbreviated month names, starting with "C"'s Jan. ++ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc); ++ _M_data->_M_amonth01 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc); ++ _M_data->_M_amonth02 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc); ++ _M_data->_M_amonth03 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc); ++ _M_data->_M_amonth04 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc); ++ _M_data->_M_amonth05 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc); ++ _M_data->_M_amonth06 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc); ++ _M_data->_M_amonth07 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc); ++ _M_data->_M_amonth08 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc); ++ _M_data->_M_amonth09 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc); ++ _M_data->_M_amonth10 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc); ++ _M_data->_M_amonth11 = __u.__w; ++ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc); ++ _M_data->_M_amonth12 = __u.__w; ++ } ++#endif // 0 ++ } ++#endif ++} +--- gcc/libstdc++-v3/config/locale/uclibc/time_members.h ++++ gcc/libstdc++-v3/config/locale/uclibc/time_members.h +@@ -0,0 +1,68 @@ ++// std::time_get, std::time_put implementation, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option) ++// any later version. ++ ++// This library 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 General Public License along ++// with this library; see the file COPYING. If not, write to the Free ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, ++// USA. ++ ++// As a special exception, you may use this file as part of a free software ++// library without restriction. Specifically, if other files instantiate ++// templates or use macros or inline functions from this file, or you compile ++// this file and link it with other files to produce an executable, this ++// file does not by itself cause the resulting executable to be covered by ++// the GNU General Public License. This exception does not however ++// invalidate any other reasons why the executable file might be covered by ++// the GNU General Public License. ++ ++// ++// ISO C++ 14882: 22.2.5.1.2 - time_get functions ++// ISO C++ 14882: 22.2.5.3.2 - time_put functions ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::__timepunct(size_t __refs) ++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), ++ _M_name_timepunct(_S_get_c_name()) ++ { _M_initialize_timepunct(); } ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) ++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), ++ _M_name_timepunct(_S_get_c_name()) ++ { _M_initialize_timepunct(); } ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, ++ size_t __refs) ++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), ++ _M_name_timepunct(__s) ++ { ++ char* __tmp = new char[std::strlen(__s) + 1]; ++ std::strcpy(__tmp, __s); ++ _M_name_timepunct = __tmp; ++ _M_initialize_timepunct(__cloc); ++ } ++ ++ template<typename _CharT> ++ __timepunct<_CharT>::~__timepunct() ++ { ++ if (_M_name_timepunct != _S_get_c_name()) ++ delete [] _M_name_timepunct; ++ delete _M_data; ++ _S_destroy_c_locale(_M_c_locale_timepunct); ++ } +--- gcc/libstdc++-v3/configure ++++ gcc/libstdc++-v3/configure +@@ -5764,7 +5764,7 @@ + enableval="$enable_clocale" + + case "$enableval" in +- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;; ++ generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;; + *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5 + echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;} + { (exit 1); exit 1; }; } ;; +@@ -5789,6 +5789,9 @@ + # Default to "generic". + if test $enable_clocale_flag = auto; then + case ${target_os} in ++ linux-uclibc*) ++ enable_clocale_flag=uclibc ++ ;; + linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -6019,6 +6022,76 @@ + CTIME_CC=config/locale/generic/time_members.cc + CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h + ;; ++ uclibc) ++ echo "$as_me:$LINENO: result: uclibc" >&5 ++echo "${ECHO_T}uclibc" >&6 ++ ++ # Declare intention to use gettext, and add support for specific ++ # languages. ++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT ++ ALL_LINGUAS="de fr" ++ ++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc. ++ # Extract the first word of "msgfmt", so it can be a program name with args. ++set dummy msgfmt; ac_word=$2 ++echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++if test "${ac_cv_prog_check_msgfmt+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if test -n "$check_msgfmt"; then ++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_prog_check_msgfmt="yes" ++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++done ++ ++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no" ++fi ++fi ++check_msgfmt=$ac_cv_prog_check_msgfmt ++if test -n "$check_msgfmt"; then ++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5 ++echo "${ECHO_T}$check_msgfmt" >&6 ++else ++ echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6 ++fi ++ ++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then ++ USE_NLS=yes ++ fi ++ # Export the build objects. ++ for ling in $ALL_LINGUAS; do \ ++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \ ++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \ ++ done ++ ++ ++ ++ CLOCALE_H=config/locale/uclibc/c_locale.h ++ CLOCALE_CC=config/locale/uclibc/c_locale.cc ++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc ++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc ++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc ++ CMESSAGES_H=config/locale/uclibc/messages_members.h ++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc ++ CMONEY_CC=config/locale/uclibc/monetary_members.cc ++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc ++ CTIME_H=config/locale/uclibc/time_members.h ++ CTIME_CC=config/locale/uclibc/time_members.cc ++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h ++ ;; + esac + + # This is where the testsuite looks for locale catalogs, using the +--- gcc/libstdc++-v3/include/c_compatibility/wchar.h ++++ gcc/libstdc++-v3/include/c_compatibility/wchar.h +@@ -101,7 +101,9 @@ + using std::wmemcpy; + using std::wmemmove; + using std::wmemset; ++#if _GLIBCXX_HAVE_WCSFTIME + using std::wcsftime; ++#endif + + #if _GLIBCXX_USE_C99 + using std::wcstold; +--- gcc/libstdc++-v3/include/c_std/std_cwchar.h ++++ gcc/libstdc++-v3/include/c_std/std_cwchar.h +@@ -182,7 +182,9 @@ + using ::wcscoll; + using ::wcscpy; + using ::wcscspn; ++#if _GLIBCXX_HAVE_WCSFTIME + using ::wcsftime; ++#endif + using ::wcslen; + using ::wcsncat; + using ::wcsncmp; diff --git a/packages/gcc/gcc-4.2.4/203-uclibc-locale-no__x.patch b/packages/gcc/gcc-4.2.4/203-uclibc-locale-no__x.patch new file mode 100644 index 0000000000..6ba47003b3 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/203-uclibc-locale-no__x.patch @@ -0,0 +1,213 @@ +--- gcc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2006-03-10 15:32:37 +0100 +@@ -60,4 +60,49 @@ + extern "C" __typeof(wctype_l) __wctype_l; + #endif + ++# define __nl_langinfo_l nl_langinfo_l ++# define __strcoll_l strcoll_l ++# define __strftime_l strftime_l ++# define __strtod_l strtod_l ++# define __strtof_l strtof_l ++# define __strtold_l strtold_l ++# define __strxfrm_l strxfrm_l ++# define __newlocale newlocale ++# define __freelocale freelocale ++# define __duplocale duplocale ++# define __uselocale uselocale ++ ++# ifdef _GLIBCXX_USE_WCHAR_T ++# define __iswctype_l iswctype_l ++# define __towlower_l towlower_l ++# define __towupper_l towupper_l ++# define __wcscoll_l wcscoll_l ++# define __wcsftime_l wcsftime_l ++# define __wcsxfrm_l wcsxfrm_l ++# define __wctype_l wctype_l ++# endif ++ ++#else ++# define __nl_langinfo_l(N, L) nl_langinfo((N)) ++# define __strcoll_l(S1, S2, L) strcoll((S1), (S2)) ++# define __strtod_l(S, E, L) strtod((S), (E)) ++# define __strtof_l(S, E, L) strtof((S), (E)) ++# define __strtold_l(S, E, L) strtold((S), (E)) ++# define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N)) ++# warning should dummy __newlocale check for C|POSIX ? ++# define __newlocale(a, b, c) NULL ++# define __freelocale(a) ((void)0) ++# define __duplocale(a) __c_locale() ++//# define __uselocale ? ++// ++# ifdef _GLIBCXX_USE_WCHAR_T ++# define __iswctype_l(C, M, L) iswctype((C), (M)) ++# define __towlower_l(C, L) towlower((C)) ++# define __towupper_l(C, L) towupper((C)) ++# define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2)) ++//# define __wcsftime_l(S, M, F, T, L) wcsftime((S), (M), (F), (T)) ++# define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N)) ++# define __wctype_l(S, L) wctype((S)) ++# endif ++ + #endif // GLIBC 2.3 and later +--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc 2006-03-10 15:32:37 +0100 +@@ -39,20 +39,6 @@ + #include <langinfo.h> + #include <bits/c++locale_internal.h> + +-#ifndef __UCLIBC_HAS_XLOCALE__ +-#define __strtol_l(S, E, B, L) strtol((S), (E), (B)) +-#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B)) +-#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B)) +-#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B)) +-#define __strtof_l(S, E, L) strtof((S), (E)) +-#define __strtod_l(S, E, L) strtod((S), (E)) +-#define __strtold_l(S, E, L) strtold((S), (E)) +-#warning should dummy __newlocale check for C|POSIX ? +-#define __newlocale(a, b, c) NULL +-#define __freelocale(a) ((void)0) +-#define __duplocale(a) __c_locale() +-#endif +- + namespace std + { + template<> +--- gcc/libstdc++-v3/config/locale/uclibc/collate_members.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/collate_members.cc 2006-03-10 15:32:37 +0100 +@@ -36,13 +36,6 @@ + #include <locale> + #include <bits/c++locale_internal.h> + +-#ifndef __UCLIBC_HAS_XLOCALE__ +-#define __strcoll_l(S1, S2, L) strcoll((S1), (S2)) +-#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N)) +-#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2)) +-#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N)) +-#endif +- + namespace std + { + // These are basically extensions to char_traits, and perhaps should +--- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2006-03-10 15:32:37 +0100 +@@ -43,10 +43,6 @@ + #warning tailor for stub locale support + #endif + +-#ifndef __UCLIBC_HAS_XLOCALE__ +-#define __nl_langinfo_l(N, L) nl_langinfo((N)) +-#endif +- + namespace std + { + // Construct and return valid pattern consisting of some combination of: +--- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2006-03-10 15:32:37 +0100 +@@ -41,9 +41,6 @@ + #ifdef __UCLIBC_MJN3_ONLY__ + #warning tailor for stub locale support + #endif +-#ifndef __UCLIBC_HAS_XLOCALE__ +-#define __nl_langinfo_l(N, L) nl_langinfo((N)) +-#endif + + namespace std + { +--- gcc/libstdc++-v3/config/locale/uclibc/time_members.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/time_members.cc 2006-03-10 15:32:37 +0100 +@@ -40,9 +40,6 @@ + #ifdef __UCLIBC_MJN3_ONLY__ + #warning tailor for stub locale support + #endif +-#ifndef __UCLIBC_HAS_XLOCALE__ +-#define __nl_langinfo_l(N, L) nl_langinfo((N)) +-#endif + + namespace std + { +--- gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2006-03-10 15:32:37 +0100 +@@ -38,13 +38,6 @@ + #undef _LIBC + #include <bits/c++locale_internal.h> + +-#ifndef __UCLIBC_HAS_XLOCALE__ +-#define __wctype_l(S, L) wctype((S)) +-#define __towupper_l(C, L) towupper((C)) +-#define __towlower_l(C, L) towlower((C)) +-#define __iswctype_l(C, M, L) iswctype((C), (M)) +-#endif +- + namespace std + { + // NB: The other ctype<char> specializations are in src/locale.cc and +--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.cc.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.cc 2006-03-10 15:32:37 +0100 +@@ -39,13 +39,10 @@ + #ifdef __UCLIBC_MJN3_ONLY__ + #warning fix gettext stuff + #endif +-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ +-extern "C" char *__dcgettext(const char *domainname, +- const char *msgid, int category); + #undef gettext +-#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES) ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++#define gettext(msgid) dcgettext(NULL, msgid, LC_MESSAGES) + #else +-#undef gettext + #define gettext(msgid) (msgid) + #endif + +--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.h.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-03-10 15:32:37 +0100 +@@ -36,15 +36,11 @@ + #ifdef __UCLIBC_MJN3_ONLY__ + #warning fix prototypes for *textdomain funcs + #endif +-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ +-extern "C" char *__textdomain(const char *domainname); +-extern "C" char *__bindtextdomain(const char *domainname, +- const char *dirname); +-#else +-#undef __textdomain +-#undef __bindtextdomain +-#define __textdomain(D) ((void)0) +-#define __bindtextdomain(D,P) ((void)0) ++#ifndef __UCLIBC_HAS_GETTEXT_AWARENESS__ ++#undef textdomain ++#undef bindtextdomain ++#define textdomain(D) ((void)0) ++#define bindtextdomain(D,P) ((void)0) + #endif + + // Non-virtual member functions. +@@ -70,7 +66,7 @@ + messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, + const char* __dir) const + { +- __bindtextdomain(__s.c_str(), __dir); ++ bindtextdomain(__s.c_str(), __dir); + return this->do_open(__s, __loc); + } + +@@ -90,7 +86,7 @@ + { + // No error checking is done, assume the catalog exists and can + // be used. +- __textdomain(__s.c_str()); ++ textdomain(__s.c_str()); + return 0; + } + +--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.h.uclibc200no__x~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.h 2006-03-10 15:32:37 +0100 +@@ -68,6 +68,7 @@ + { + extern "C" __typeof(uselocale) __uselocale; + } ++#define __uselocale uselocale + #endif + + namespace std diff --git a/packages/gcc/gcc-4.2.4/204-uclibc-locale-wchar_fix.patch b/packages/gcc/gcc-4.2.4/204-uclibc-locale-wchar_fix.patch new file mode 100644 index 0000000000..160ab35bb3 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/204-uclibc-locale-wchar_fix.patch @@ -0,0 +1,48 @@ +--- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc.uclibc200_wchar~ 2006-03-10 15:32:37 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2006-03-10 15:37:27 +0100 +@@ -401,7 +401,7 @@ + # ifdef __UCLIBC_HAS_XLOCALE__ + _M_data->_M_decimal_point = __cloc->decimal_point_wc; + _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; +-# else ++# elif defined __UCLIBC_HAS_LOCALE__ + _M_data->_M_decimal_point = __global_locale->decimal_point_wc; + _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; + # endif +@@ -556,7 +556,7 @@ + # ifdef __UCLIBC_HAS_XLOCALE__ + _M_data->_M_decimal_point = __cloc->decimal_point_wc; + _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; +-# else ++# elif defined __UCLIBC_HAS_LOCALE__ + _M_data->_M_decimal_point = __global_locale->decimal_point_wc; + _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; + # endif +--- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc.uclibc200_wchar~ 2006-03-10 15:32:37 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2006-03-10 15:37:27 +0100 +@@ -127,12 +127,25 @@ + { + // Named locale. + // NB: In the GNU model wchar_t is always 32 bit wide. ++#ifdef __UCLIBC_MJN3_ONLY__ ++#warning fix this... should be numeric ++#endif ++#ifdef __UCLIBC__ ++# ifdef __UCLIBC_HAS_XLOCALE__ ++ _M_data->_M_decimal_point = __cloc->decimal_point_wc; ++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc; ++# elif defined __UCLIBC_HAS_LOCALE__ ++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc; ++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc; ++# endif ++#else + union { char *__s; wchar_t __w; } __u; + __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc); + _M_data->_M_decimal_point = __u.__w; + + __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc); + _M_data->_M_thousands_sep = __u.__w; ++#endif + + if (_M_data->_M_thousands_sep == L'\0') + _M_data->_M_grouping = ""; diff --git a/packages/gcc/gcc-4.2.4/205-uclibc-locale-update.patch b/packages/gcc/gcc-4.2.4/205-uclibc-locale-update.patch new file mode 100644 index 0000000000..86b2844554 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/205-uclibc-locale-update.patch @@ -0,0 +1,347 @@ +--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc.uclibc200_update~ 2006-03-10 15:32:37 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc 2006-03-10 15:39:14 +0100 +@@ -46,16 +47,13 @@ + __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, + const __c_locale& __cloc) + { +- if (!(__err & ios_base::failbit)) +- { +- char* __sanity; +- errno = 0; +- float __f = __strtof_l(__s, &__sanity, __cloc); +- if (__sanity != __s && errno != ERANGE) +- __v = __f; +- else +- __err |= ios_base::failbit; +- } ++ char* __sanity; ++ errno = 0; ++ float __f = __strtof_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __f; ++ else ++ __err |= ios_base::failbit; + } + + template<> +@@ -63,16 +61,13 @@ + __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, + const __c_locale& __cloc) + { +- if (!(__err & ios_base::failbit)) +- { +- char* __sanity; +- errno = 0; +- double __d = __strtod_l(__s, &__sanity, __cloc); +- if (__sanity != __s && errno != ERANGE) +- __v = __d; +- else +- __err |= ios_base::failbit; +- } ++ char* __sanity; ++ errno = 0; ++ double __d = __strtod_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __d; ++ else ++ __err |= ios_base::failbit; + } + + template<> +@@ -80,16 +75,13 @@ + __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err, + const __c_locale& __cloc) + { +- if (!(__err & ios_base::failbit)) +- { +- char* __sanity; +- errno = 0; +- long double __ld = __strtold_l(__s, &__sanity, __cloc); +- if (__sanity != __s && errno != ERANGE) +- __v = __ld; +- else +- __err |= ios_base::failbit; +- } ++ char* __sanity; ++ errno = 0; ++ long double __ld = __strtold_l(__s, &__sanity, __cloc); ++ if (__sanity != __s && errno != ERANGE) ++ __v = __ld; ++ else ++ __err |= ios_base::failbit; + } + + void +@@ -110,7 +102,7 @@ + void + locale::facet::_S_destroy_c_locale(__c_locale& __cloc) + { +- if (_S_get_c_locale() != __cloc) ++ if (__cloc && _S_get_c_locale() != __cloc) + __freelocale(__cloc); + } + +--- gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc.uclibc200_update~ 2006-03-10 15:32:37 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2006-03-10 15:39:14 +0100 +@@ -33,9 +33,14 @@ + + // Written by Benjamin Kosnik <bkoz@redhat.com> + ++#include <features.h> ++#ifdef __UCLIBC_HAS_LOCALE__ + #define _LIBC + #include <locale> + #undef _LIBC ++#else ++#include <locale> ++#endif + #include <bits/c++locale_internal.h> + + namespace std +@@ -138,20 +143,34 @@ + ctype<wchar_t>:: + do_is(mask __m, wchar_t __c) const + { +- // Highest bitmask in ctype_base == 10, but extra in "C" +- // library for blank. ++ // The case of __m == ctype_base::space is particularly important, ++ // due to its use in many istream functions. Therefore we deal with ++ // it first, exploiting the knowledge that on GNU systems _M_bit[5] ++ // is the mask corresponding to ctype_base::space. NB: an encoding ++ // change would not affect correctness! + bool __ret = false; +- const size_t __bitmasksize = 11; +- for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) +- if (__m & _M_bit[__bitcur] +- && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype)) +- { +- __ret = true; +- break; +- } ++ if (__m == _M_bit[5]) ++ __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype); ++ else ++ { ++ // Highest bitmask in ctype_base == 10, but extra in "C" ++ // library for blank. ++ const size_t __bitmasksize = 11; ++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) ++ if (__m & _M_bit[__bitcur]) ++ { ++ if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype)) ++ { ++ __ret = true; ++ break; ++ } ++ else if (__m == _M_bit[__bitcur]) ++ break; ++ } ++ } + return __ret; + } +- ++ + const wchar_t* + ctype<wchar_t>:: + do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const +--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.h.uclibc200_update~ 2006-03-10 15:32:37 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-03-10 15:39:14 +0100 +@@ -47,18 +47,21 @@ + template<typename _CharT> + messages<_CharT>::messages(size_t __refs) + : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), +- _M_name_messages(_S_get_c_name()) ++ _M_name_messages(_S_get_c_name()) + { } + + template<typename _CharT> + messages<_CharT>::messages(__c_locale __cloc, const char* __s, + size_t __refs) +- : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)), +- _M_name_messages(__s) ++ : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL) + { +- char* __tmp = new char[std::strlen(__s) + 1]; +- std::strcpy(__tmp, __s); ++ const size_t __len = std::strlen(__s) + 1; ++ char* __tmp = new char[__len]; ++ std::memcpy(__tmp, __s, __len); + _M_name_messages = __tmp; ++ ++ // Last to avoid leaking memory if new throws. ++ _M_c_locale_messages = _S_clone_c_locale(__cloc); + } + + template<typename _CharT> +--- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc.uclibc200_update~ 2006-03-10 15:37:27 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2006-03-10 15:39:14 +0100 +@@ -33,9 +33,14 @@ + + // Written by Benjamin Kosnik <bkoz@redhat.com> + ++#include <features.h> ++#ifdef __UCLIBC_HAS_LOCALE__ + #define _LIBC + #include <locale> + #undef _LIBC ++#else ++#include <locale> ++#endif + #include <bits/c++locale_internal.h> + + #ifdef __UCLIBC_MJN3_ONLY__ +@@ -206,7 +211,7 @@ + } + break; + default: +- ; ++ __ret = pattern(); + } + return __ret; + } +--- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc.uclibc200_update~ 2006-03-10 15:37:27 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2006-03-10 15:39:14 +0100 +@@ -33,9 +33,14 @@ + + // Written by Benjamin Kosnik <bkoz@redhat.com> + ++#include <features.h> ++#ifdef __UCLIBC_HAS_LOCALE__ + #define _LIBC + #include <locale> + #undef _LIBC ++#else ++#include <locale> ++#endif + #include <bits/c++locale_internal.h> + + #ifdef __UCLIBC_MJN3_ONLY__ +--- gcc/libstdc++-v3/config/locale/uclibc/time_members.h.uclibc200_update~ 2006-03-10 15:06:17 +0100 ++++ gcc/libstdc++-v3/config/locale/uclibc/time_members.h 2006-03-10 15:39:14 +0100 +@@ -37,25 +37,33 @@ + template<typename _CharT> + __timepunct<_CharT>::__timepunct(size_t __refs) + : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), +- _M_name_timepunct(_S_get_c_name()) ++ _M_name_timepunct(_S_get_c_name()) + { _M_initialize_timepunct(); } + + template<typename _CharT> + __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) + : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), +- _M_name_timepunct(_S_get_c_name()) ++ _M_name_timepunct(_S_get_c_name()) + { _M_initialize_timepunct(); } + + template<typename _CharT> + __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, + size_t __refs) + : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), +- _M_name_timepunct(__s) ++ _M_name_timepunct(NULL) + { +- char* __tmp = new char[std::strlen(__s) + 1]; +- std::strcpy(__tmp, __s); ++ const size_t __len = std::strlen(__s) + 1; ++ char* __tmp = new char[__len]; ++ std::memcpy(__tmp, __s, __len); + _M_name_timepunct = __tmp; +- _M_initialize_timepunct(__cloc); ++ ++ try ++ { _M_initialize_timepunct(__cloc); } ++ catch(...) ++ { ++ delete [] _M_name_timepunct; ++ __throw_exception_again; ++ } + } + + template<typename _CharT> +--- gcc-4.2/libstdc++-v3/config/locale/uclibc/c_locale.h.old 2006-09-28 11:39:00.000000000 +0200 ++++ gcc-4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2006-09-28 12:10:41.000000000 +0200 +@@ -39,21 +39,23 @@ + #pragma GCC system_header + + #include <cstring> // get std::strlen +-#include <cstdio> // get std::snprintf or std::sprintf ++#include <cstdio> // get std::vsnprintf or std::vsprintf + #include <clocale> + #include <langinfo.h> // For codecvt + #ifdef __UCLIBC_MJN3_ONLY__ + #warning fix this + #endif +-#ifdef __UCLIBC_HAS_LOCALE__ ++#ifdef _GLIBCXX_USE_ICONV + #include <iconv.h> // For codecvt using iconv, iconv_t + #endif +-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__ +-#include <libintl.h> // For messages ++#ifdef HAVE_LIBINTL_H ++#include <libintl.h> // For messages + #endif ++#include <cstdarg> + + #ifdef __UCLIBC_MJN3_ONLY__ + #warning what is _GLIBCXX_C_LOCALE_GNU for ++// psm: used in os/gnu-linux/ctype_noninline.h + #endif + #define _GLIBCXX_C_LOCALE_GNU 1 + +@@ -62,7 +64,7 @@ + #endif + // #define _GLIBCXX_NUM_CATEGORIES 6 + #define _GLIBCXX_NUM_CATEGORIES 0 +- ++ + #ifdef __UCLIBC_HAS_XLOCALE__ + namespace __gnu_cxx + { +@@ -79,22 +81,24 @@ + typedef int* __c_locale; + #endif + +- // Convert numeric value of type _Tv to string and return length of +- // string. If snprintf is available use it, otherwise fall back to +- // the unsafe sprintf which, in general, can be dangerous and should ++ // Convert numeric value of type double to string and return length of ++ // string. If vsnprintf is available use it, otherwise fall back to ++ // the unsafe vsprintf which, in general, can be dangerous and should + // be avoided. +- template<typename _Tv> +- int +- __convert_from_v(char* __out, +- const int __size __attribute__ ((__unused__)), +- const char* __fmt, +-#ifdef __UCLIBC_HAS_XCLOCALE__ +- _Tv __v, const __c_locale& __cloc, int __prec) ++ inline int ++ __convert_from_v(const __c_locale& ++#ifndef __UCLIBC_HAS_XCLOCALE__ ++ __cloc __attribute__ ((__unused__)) ++#endif ++ , ++ char* __out, ++ const int __size, ++ const char* __fmt, ...) + { ++ va_list __args; ++#ifdef __UCLIBC_HAS_XCLOCALE__ + __c_locale __old = __gnu_cxx::__uselocale(__cloc); + #else +- _Tv __v, const __c_locale&, int __prec) +- { + # ifdef __UCLIBC_HAS_LOCALE__ + char* __old = std::setlocale(LC_ALL, NULL); + char* __sav = new char[std::strlen(__old) + 1]; +@@ -103,7 +107,9 @@ + # endif + #endif + +- const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v); ++ va_start(__args, __fmt); ++ const int __ret = std::vsnprintf(__out, __size, __fmt, __args); ++ va_end(__args); + + #ifdef __UCLIBC_HAS_XCLOCALE__ + __gnu_cxx::__uselocale(__old); diff --git a/packages/gcc/gcc-4.2.4/300-libstdc++-pic.patch b/packages/gcc/gcc-4.2.4/300-libstdc++-pic.patch new file mode 100644 index 0000000000..89d03a85e5 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/300-libstdc++-pic.patch @@ -0,0 +1,46 @@ +# DP: Build and install libstdc++_pic.a library. + +--- gcc-4.1.0/libstdc++-v3/src/Makefile.am 2004-11-15 17:33:05.000000000 -0600 ++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.am 2005-04-25 20:05:59.186930896 -0500 +@@ -214,6 +214,10 @@ + $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@ + + ++install-exec-local: ++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o ++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir) ++ + # Added bits to build debug library. + if GLIBCXX_BUILD_DEBUG + all-local: build_debug +--- gcc-4.1.0/libstdc++-v3/src/Makefile.in 2005-04-11 19:13:08.000000000 -0500 ++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.in 2005-04-25 20:12:33.284316275 -0500 +@@ -627,7 +627,7 @@ + + install-data-am: install-data-local + +-install-exec-am: install-toolexeclibLTLIBRARIES ++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local + + install-info: install-info-am + +@@ -660,6 +660,7 @@ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-local install-exec \ ++ install-exec-local \ + install-exec-am install-info install-info-am install-man \ + install-strip install-toolexeclibLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ +@@ -745,6 +746,11 @@ + install_debug: + (cd ${debugdir} && $(MAKE) \ + toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) ++ ++install-exec-local: ++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o ++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir) ++ + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: diff --git a/packages/gcc/gcc-4.2.4/301-missing-execinfo_h.patch b/packages/gcc/gcc-4.2.4/301-missing-execinfo_h.patch new file mode 100644 index 0000000000..0e2092f3fb --- /dev/null +++ b/packages/gcc/gcc-4.2.4/301-missing-execinfo_h.patch @@ -0,0 +1,11 @@ +--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500 ++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500 +@@ -500,7 +500,7 @@ + #ifdef __linux__ + # include <features.h> + # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \ +- && !defined(__ia64__) ++ && !defined(__ia64__) && !defined(__UCLIBC__) + # ifndef GC_HAVE_BUILTIN_BACKTRACE + # define GC_HAVE_BUILTIN_BACKTRACE + # endif diff --git a/packages/gcc/gcc-4.2.4/302-c99-snprintf.patch b/packages/gcc/gcc-4.2.4/302-c99-snprintf.patch new file mode 100644 index 0000000000..dfb22d681b --- /dev/null +++ b/packages/gcc/gcc-4.2.4/302-c99-snprintf.patch @@ -0,0 +1,11 @@ +--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig 2005-04-29 00:08:41.000000000 -0500 ++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h 2005-04-29 00:08:45.000000000 -0500 +@@ -142,7 +142,7 @@ + using ::vsprintf; + } + +-#if _GLIBCXX_USE_C99 ++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__) + + #undef snprintf + #undef vfscanf diff --git a/packages/gcc/gcc-4.2.4/303-c99-complex-ugly-hack.patch b/packages/gcc/gcc-4.2.4/303-c99-complex-ugly-hack.patch new file mode 100644 index 0000000000..2ccc80d9bb --- /dev/null +++ b/packages/gcc/gcc-4.2.4/303-c99-complex-ugly-hack.patch @@ -0,0 +1,12 @@ +--- gcc-4.0.0/libstdc++-v3/configure-old 2005-04-30 22:04:48.061603912 -0500 ++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 22:06:13.678588152 -0500 +@@ -7194,6 +7194,9 @@ + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <complex.h> ++#ifdef __UCLIBC__ ++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs ++#endif + int + main () + { diff --git a/packages/gcc/gcc-4.2.4/304-index_macro.patch b/packages/gcc/gcc-4.2.4/304-index_macro.patch new file mode 100644 index 0000000000..d8e476555d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/304-index_macro.patch @@ -0,0 +1,24 @@ +--- gcc-4.1.0/libstdc++-v3/include/ext/rope.mps 2006-03-24 01:49:51 +0100 ++++ gcc-4.1.0/libstdc++-v3/include/ext/rope 2006-03-24 01:49:37 +0100 +@@ -59,6 +59,9 @@ + #include <bits/allocator.h> + #include <ext/hash_fun.h> + ++/* cope w/ index defined as macro, SuSv3 proposal */ ++#undef index ++ + # ifdef __GC + # define __GC_CONST const + # else +--- gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h.mps 2006-03-24 01:50:04 +0100 ++++ gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h 2006-03-24 01:50:28 +0100 +@@ -53,6 +53,9 @@ + #include <ext/memory> // For uninitialized_copy_n + #include <ext/numeric> // For power + ++/* cope w/ index defined as macro, SuSv3 proposal */ ++#undef index ++ + _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) + + using std::size_t; diff --git a/packages/gcc/gcc-4.2.4/305-libmudflap-susv3-legacy.patch b/packages/gcc/gcc-4.2.4/305-libmudflap-susv3-legacy.patch new file mode 100644 index 0000000000..374b1f8659 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/305-libmudflap-susv3-legacy.patch @@ -0,0 +1,49 @@ +Index: gcc-4.2/libmudflap/mf-hooks2.c +=================================================================== +--- gcc-4.2/libmudflap/mf-hooks2.c (revision 119834) ++++ gcc-4.2/libmudflap/mf-hooks2.c (working copy) +@@ -427,7 +427,7 @@ + { + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region"); +- bzero (s, n); ++ memset (s, 0, n); + } + + +@@ -437,7 +437,7 @@ + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src"); + MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest"); +- bcopy (src, dest, n); ++ memmove (dest, src, n); + } + + +@@ -447,7 +447,7 @@ + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg"); + MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg"); +- return bcmp (s1, s2, n); ++ return n == 0 ? 0 : memcmp (s1, s2, n); + } + + +@@ -456,7 +456,7 @@ + size_t n = strlen (s); + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index region"); +- return index (s, c); ++ return strchr (s, c); + } + + +@@ -465,7 +465,7 @@ + size_t n = strlen (s); + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex region"); +- return rindex (s, c); ++ return strrchr (s, c); + } + + /* XXX: stpcpy, memccpy */ diff --git a/packages/gcc/gcc-4.2.4/306-libstdc++-namespace.patch b/packages/gcc/gcc-4.2.4/306-libstdc++-namespace.patch new file mode 100644 index 0000000000..69587ca63a --- /dev/null +++ b/packages/gcc/gcc-4.2.4/306-libstdc++-namespace.patch @@ -0,0 +1,36 @@ +diff -rup gcc-4.2.orig/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.2/libstdc++-v3/config/locale/uclibc/messages_members.h +--- gcc-4.2.orig/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-12-22 13:06:56.000000000 +0100 ++++ gcc-4.2/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-12-22 15:23:41.000000000 +0100 +@@ -32,7 +32,8 @@ + // + + // Written by Benjamin Kosnik <bkoz@redhat.com> +- ++namespace std ++{ + #ifdef __UCLIBC_MJN3_ONLY__ + #warning fix prototypes for *textdomain funcs + #endif +@@ -115,3 +116,4 @@ + this->_S_create_c_locale(this->_M_c_locale_messages, __s); + } + } ++} +diff -rup gcc-4.2.orig/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.2/libstdc++-v3/config/locale/uclibc/time_members.h +--- gcc-4.2.orig/libstdc++-v3/config/locale/uclibc/time_members.h 2006-12-22 13:06:56.000000000 +0100 ++++ gcc-4.2/libstdc++-v3/config/locale/uclibc/time_members.h 2006-12-22 15:20:31.000000000 +0100 +@@ -33,7 +33,8 @@ + // + + // Written by Benjamin Kosnik <bkoz@redhat.com> +- ++namespace std ++{ + template<typename _CharT> + __timepunct<_CharT>::__timepunct(size_t __refs) + : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), +@@ -74,3 +75,4 @@ + delete _M_data; + _S_destroy_c_locale(_M_c_locale_timepunct); + } ++} diff --git a/packages/gcc/gcc-4.2.4/307-locale_facets.patch b/packages/gcc/gcc-4.2.4/307-locale_facets.patch new file mode 100644 index 0000000000..412f8657dc --- /dev/null +++ b/packages/gcc/gcc-4.2.4/307-locale_facets.patch @@ -0,0 +1,26 @@ +This patch fixes a bug into ostream::operator<<(double) due to the wrong size +passed into the __convert_from_v method. The wrong size is then passed to +std::snprintf function, that, on uClibc, doens't handle sized 0 buffer. + +Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com> + +--- gcc-4.2.1/libstdc++-v3/include/bits/locale_facets.tcc 2006-10-17 18:43:47.000000000 +0200 ++++ gcc-4.2.1-st/libstdc++-v3/include/bits/locale_facets.tcc 2007-08-22 18:54:23.000000000 +0200 +@@ -1143,7 +1143,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE + const int __cs_size = __fixed ? __max_exp + __prec + 4 + : __max_digits * 2 + __prec; + char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); +- __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, __fbuf, ++ __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, __fbuf, + __prec, __v); + #endif + +@@ -1777,7 +1777,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE + // max_exponent10 + 1 for the integer part, + 2 for sign and '\0'. + const int __cs_size = numeric_limits<long double>::max_exponent10 + 3; + char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); +- int __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, "%.*Lf", ++ int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, "%.*Lf", + 0, __units); + #endif + string_type __digits(__len, char_type()); diff --git a/packages/gcc/gcc-4.2.4/402-libbackend_dep_gcov-iov.h.patch b/packages/gcc/gcc-4.2.4/402-libbackend_dep_gcov-iov.h.patch new file mode 100644 index 0000000000..0bf115c45d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/402-libbackend_dep_gcov-iov.h.patch @@ -0,0 +1,13 @@ +Index: gcc-4.2/gcc/Makefile.in +=================================================================== +--- gcc-4.2/gcc/Makefile.in (revision 121758) ++++ gcc-4.2/gcc/Makefile.in (working copy) +@@ -2658,7 +2658,7 @@ mips-tdump.o : mips-tdump.c $(CONFIG_H) + # FIXME: writing proper dependencies for this is a *LOT* of work. + libbackend.o : $(OBJS-common:.o=.c) $(out_file) \ + insn-config.h insn-flags.h insn-codes.h insn-constants.h \ +- insn-attr.h $(DATESTAMP) $(BASEVER) $(DEVPHASE) ++ insn-attr.h $(DATESTAMP) $(BASEVER) $(DEVPHASE) gcov-iov.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) \ + -DTARGET_NAME=\"$(target_noncanonical)\" \ + -DLOCALEDIR=\"$(localedir)\" \ diff --git a/packages/gcc/gcc-4.2.4/602-sdk-libstdc++-includes.patch b/packages/gcc/gcc-4.2.4/602-sdk-libstdc++-includes.patch new file mode 100644 index 0000000000..23fce7544d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/602-sdk-libstdc++-includes.patch @@ -0,0 +1,20 @@ +--- gcc-4.1.0/libstdc++-v3/fragment.am 2005-03-21 11:40:14.000000000 -0600 ++++ gcc-4.1.0-patched/libstdc++-v3/fragment.am 2005-04-25 20:14:39.856251785 -0500 +@@ -21,5 +21,5 @@ + $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once + + # -I/-D flags to pass when compiling. +-AM_CPPFLAGS = $(GLIBCXX_INCLUDES) ++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include + +--- gcc-4.1.0/libstdc++-v3/libmath/Makefile.am 2005-03-21 11:40:18.000000000 -0600 ++++ gcc-4.1.0-patched/libstdc++-v3/libmath/Makefile.am 2005-04-25 20:14:39.682280735 -0500 +@@ -35,7 +35,7 @@ + + libmath_la_SOURCES = stubs.c + +-AM_CPPFLAGS = $(CANADIAN_INCLUDES) ++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include + + # Only compiling "C" sources in this directory. + LIBTOOL = @LIBTOOL@ --tag CC diff --git a/packages/gcc/gcc-4.2.4/740-sh-pr24836.patch b/packages/gcc/gcc-4.2.4/740-sh-pr24836.patch new file mode 100644 index 0000000000..7992282cff --- /dev/null +++ b/packages/gcc/gcc-4.2.4/740-sh-pr24836.patch @@ -0,0 +1,25 @@ +http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348 +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836 + +--- gcc/gcc/configure.ac (revision 106699) ++++ gcc/gcc/configure.ac (working copy) +@@ -2446,7 +2446,7 @@ + tls_first_minor=14 + tls_as_opt="-m64 -Aesame --fatal-warnings" + ;; +- sh-*-* | sh[34]-*-*) ++ sh-*-* | sh[34]*-*-*) + conftest_s=' + .section ".tdata","awT",@progbits + foo: .long 25 +--- gcc/gcc/configure ++++ gcc/gcc/configure +@@ -14846,7 +14846,7 @@ + tls_first_minor=14 + tls_as_opt="-m64 -Aesame --fatal-warnings" + ;; +- sh-*-* | sh[34]-*-*) ++ sh-*-* | sh[34]*-*-*) + conftest_s=' + .section ".tdata","awT",@progbits + foo: .long 25 diff --git a/packages/gcc/gcc-4.2.4/800-arm-bigendian.patch b/packages/gcc/gcc-4.2.4/800-arm-bigendian.patch new file mode 100644 index 0000000000..07c6093379 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/800-arm-bigendian.patch @@ -0,0 +1,67 @@ +By Lennert Buytenhek <buytenh@wantstofly.org> +Adds support for arm*b-linux* big-endian ARM targets + +See http://gcc.gnu.org/PR16350 + +--- gcc-4.2.0/gcc/config/arm/linux-elf.h ++++ gcc-4.2.0/gcc/config/arm/linux-elf.h +@@ -28,19 +28,33 @@ + #undef TARGET_VERSION + #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr); + ++/* ++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-* ++ * (big endian) configurations. ++ */ ++#if TARGET_BIG_ENDIAN_DEFAULT ++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END ++#define TARGET_ENDIAN_OPTION "mbig-endian" ++#define TARGET_LINKER_EMULATION "armelfb_linux" ++#else ++#define TARGET_ENDIAN_DEFAULT 0 ++#define TARGET_ENDIAN_OPTION "mlittle-endian" ++#define TARGET_LINKER_EMULATION "armelf_linux" ++#endif ++ + #undef TARGET_DEFAULT_FLOAT_ABI + #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD + + #undef TARGET_DEFAULT +-#define TARGET_DEFAULT (0) ++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT) + + #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 + +-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p" ++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p" + + #undef MULTILIB_DEFAULTS + #define MULTILIB_DEFAULTS \ +- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" } ++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" } + + /* Now we define the strings used to build the spec file. */ + #undef LIB_SPEC +@@ -61,7 +75,7 @@ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \ + -X \ +- %{mbig-endian:-EB}" \ ++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ + SUBTARGET_EXTRA_LINK_SPEC + + #undef LINK_SPEC +--- gcc-4.2.0/gcc/config.gcc.orig 2006-09-22 14:53:41.000000000 +0200 ++++ gcc-4.2.0/gcc/config.gcc 2006-09-25 10:45:21.000000000 +0200 +@@ -696,6 +696,11 @@ + tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" + tmake_file="${tmake_file} t-linux arm/t-arm" + case ${target} in ++ arm*b-*) ++ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" ++ ;; ++ esac ++ case ${target} in + arm*-*-linux-*eabi) + tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h" + tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi" diff --git a/packages/gcc/gcc-4.2.4/801-arm-bigendian-eabi.patch b/packages/gcc/gcc-4.2.4/801-arm-bigendian-eabi.patch new file mode 100644 index 0000000000..54490fc24f --- /dev/null +++ b/packages/gcc/gcc-4.2.4/801-arm-bigendian-eabi.patch @@ -0,0 +1,14 @@ +Index: gcc-4.1.1/gcc/config/arm/linux-eabi.h +=================================================================== +--- gcc-4.1.1.orig/gcc/config/arm/linux-eabi.h 2007-02-20 14:51:33.416193250 +0100 ++++ gcc-4.1.1/gcc/config/arm/linux-eabi.h 2007-02-20 14:52:11.622581000 +0100 +@@ -48,7 +48,8 @@ + #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi + + #undef SUBTARGET_EXTRA_LINK_SPEC +-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi" ++#define SUBTARGET_EXTRA_LINK_SPEC \ ++ " %{mbig-endian:-m armelfb_linux_eabi} %{mlittle-endian:-m armelf_linux_eabi} " + + /* Use ld-linux.so.3 so that it will be possible to run "classic" + GNU/Linux binaries on an EABI system. */ diff --git a/packages/gcc/gcc-4.2.4/904-flatten-switch-stmt-00.patch b/packages/gcc/gcc-4.2.4/904-flatten-switch-stmt-00.patch new file mode 100644 index 0000000000..8fac37c4df --- /dev/null +++ b/packages/gcc/gcc-4.2.4/904-flatten-switch-stmt-00.patch @@ -0,0 +1,153 @@ +Hi, + +The attached patch makes sure that we create smaller object code for +simple switch statements. We just make sure to flatten the switch +statement into an if-else chain, basically. + +This fixes a size-regression as compared to gcc-3.4, as can be seen +below. + +2007-04-15 Bernhard Fischer <..> + + * stmt.c (expand_case): Do not create a complex binary tree when + optimizing for size but rather use the simple ordered list. + (emit_case_nodes): do not emit jumps to the default_label when + optimizing for size. + +Not regtested so far. +Comments? + +Attached is the test switch.c mentioned below. + +$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do +gcc-$i -DCHAIN -Os -o switch-CHAIN-$i.o -c switch.c ;done +$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do +gcc-$i -UCHAIN -Os -o switch-$i.o -c switch.c ;done + +$ size switch-*.o + text data bss dec hex filename + 169 0 0 169 a9 switch-2.95.o + 115 0 0 115 73 switch-3.3.o + 103 0 0 103 67 switch-3.4.o + 124 0 0 124 7c switch-4.0.o + 124 0 0 124 7c switch-4.1.o + 124 0 0 124 7c switch-4.2.orig-HEAD.o + 95 0 0 95 5f switch-4.3-HEAD.o + 124 0 0 124 7c switch-4.3.orig-HEAD.o + 166 0 0 166 a6 switch-CHAIN-2.95.o + 111 0 0 111 6f switch-CHAIN-3.3.o + 95 0 0 95 5f switch-CHAIN-3.4.o + 95 0 0 95 5f switch-CHAIN-4.0.o + 95 0 0 95 5f switch-CHAIN-4.1.o + 95 0 0 95 5f switch-CHAIN-4.2.orig-HEAD.o + 95 0 0 95 5f switch-CHAIN-4.3-HEAD.o + 95 0 0 95 5f switch-CHAIN-4.3.orig-HEAD.o + + +Content-Type: text/x-diff; charset=us-ascii +Content-Disposition: attachment; filename="gcc-4.3.gcc-flatten-switch-stmt.00.diff" + +Index: gcc-4.2.0/gcc/stmt.c +=================================================================== +--- gcc-4.2.0.orig/gcc/stmt.c (revision 123843) ++++ gcc-4.2.0/gcc/stmt.c (working copy) +@@ -2517,7 +2517,11 @@ expand_case (tree exp) + use_cost_table + = (TREE_CODE (orig_type) != ENUMERAL_TYPE + && estimate_case_costs (case_list)); +- balance_case_nodes (&case_list, NULL); ++ /* When optimizing for size, we want a straight list to avoid ++ jumps as much as possible. This basically creates an if-else ++ chain. */ ++ if (!optimize_size) ++ balance_case_nodes (&case_list, NULL); + emit_case_nodes (index, case_list, default_label, index_type); + emit_jump (default_label); + } +@@ -3075,6 +3079,7 @@ emit_case_nodes (rtx index, case_node_pt + { + if (!node_has_low_bound (node, index_type)) + { ++ if (!optimize_size) /* don't jl to the .default_label. */ + emit_cmp_and_jump_insns (index, + convert_modes + (mode, imode, + + +Content-Type: text/x-csrc; charset=us-ascii +Content-Disposition: attachment; filename="switch.c" + +int +commutative_tree_code (int code) +{ +#define CASE(val, ret) case val:/* __asm__("# val="#val ",ret="#ret);*/ return ret; +#ifndef CHAIN + switch (code) + { +# if 1 + CASE(1,3) + CASE(3,2) + CASE(5,8) + CASE(7,1) + CASE(33,4) + CASE(44,9) + CASE(55,10) + CASE(66,-1) + CASE(77,99) + CASE(666,0) +# else + case 1: + return 3; + case 3: + return 2; + case 5: + return 8; + case 7: + return 1; + case 33: + return 4; + case 44: + return 9; + case 55: + return 10; + case 66: + return -1; + case 77: + return 99; + case 666: + return 0; +# endif + default: + break; + } + return 4711; + +#else + if (code == 1) + return 3; + else if (code == 3) + return 2; + else if (code == 5) + return 8; + else if (code == 7) + return 1; + else if (code == 33) + return 4; + else if (code == 44) + return 9; + else if (code == 55) + return 10; + else if (code == 66) + return -1; + else if (code == 77) + return 99; + else if (code == 666) + return 0; + else + return 4711; +#endif +} + + +--AhhlLboLdkugWU4S-- + diff --git a/packages/gcc/gcc-4.2.4/README b/packages/gcc/gcc-4.2.4/README new file mode 100644 index 0000000000..b85840dc20 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/README @@ -0,0 +1,4 @@ +The numbered patches come from +http://www.uclibc.org/cgi-bin/viewcvs.cgi/trunk/buildroot/toolchain/gcc/4.1.1/ +Other patches are locally added to fix things (mostly inherited and reapplied +from gcc 3.4.4 where applicable) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-20000320.patch b/packages/gcc/gcc-4.2.4/arm-crunch-20000320.patch new file mode 100644 index 0000000000..3fb0da7670 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-20000320.patch @@ -0,0 +1,11 @@ +--- gcc-4.1.2/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c.original 2007-06-07 16:33:44.000000000 +1000 ++++ gcc-4.1.2/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c 2007-06-07 16:34:05.000000000 +1000 +@@ -49,7 +49,7 @@ + exit (0); + + c(0x3690000000000000ULL, 0x00000000U); +-#if (defined __arm__ || defined __thumb__) && ! (defined __ARMEB__ || defined __VFP_FP__) ++#if (defined __arm__ || defined __thumb__) && ! (defined __ARMEB__ || defined __VFP_FP__) && ! (defined __MAVERICK__) + /* The ARM always stores FP numbers in big-wordian format, + even when running in little-byteian mode. */ + c(0x0000000136900000ULL, 0x00000001U); diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-32bit-disable.patch b/packages/gcc/gcc-4.2.4/arm-crunch-32bit-disable.patch new file mode 100644 index 0000000000..88eaee322d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-32bit-disable.patch @@ -0,0 +1,85 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-integer 2007-06-15 09:01:37.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-15 09:04:45.000000000 +1000 +@@ -149,7 +149,7 @@ + (match_operand:SI 1 "cirrus_fp_register" "0") + (mult:SI (match_operand:SI 2 "cirrus_fp_register" "v") + (match_operand:SI 3 "cirrus_fp_register" "v"))))] +- "0 && TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "0 && TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmsc32%?\\t%V0, %V2, %V3" + [(set_attr "type" "mav_farith") + (set_attr "cirrus" "normal")] +@@ -305,7 +305,7 @@ + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (float:SF (match_operand:SI 1 "s_register_operand" "r"))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmv64lr%?\\t%Z2, %1\;cfcvt32s%?\\t%V0, %Y2" + [(set_attr "length" "8") + (set_attr "cirrus" "move")] +@@ -315,7 +315,7 @@ + [(set (match_operand:DF 0 "cirrus_fp_register" "=v") + (float:DF (match_operand:SI 1 "s_register_operand" "r"))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmv64lr%?\\t%Z2, %1\;cfcvt32d%?\\t%V0, %Y2" + [(set_attr "length" "8") + (set_attr "cirrus" "move")] +@@ -339,7 +339,7 @@ + [(set (match_operand:SI 0 "s_register_operand" "=r") + (fix:SI (fix:SF (match_operand:SF 1 "cirrus_fp_register" "v")))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cftruncs32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2" + [(set_attr "length" "8") + (set_attr "cirrus" "normal")] +@@ -349,7 +349,7 @@ + [(set (match_operand:SI 0 "s_register_operand" "=r") + (fix:SI (fix:DF (match_operand:DF 1 "cirrus_fp_register" "v")))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cftruncd32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2" + [(set_attr "length" "8") + (set_attr "cirrus" "normal")] +--- gcc-4.1.2/gcc/config/arm/arm.md-trunc 2007-06-15 10:56:13.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-15 11:01:22.000000000 +1000 +@@ -3130,7 +3130,7 @@ + (float:SF (match_operand:SI 1 "s_register_operand" "")))] + "TARGET_ARM && TARGET_HARD_FLOAT" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + emit_insn (gen_cirrus_floatsisf2 (operands[0], operands[1])); + DONE; +@@ -3142,7 +3142,7 @@ + (float:DF (match_operand:SI 1 "s_register_operand" "")))] + "TARGET_ARM && TARGET_HARD_FLOAT" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + emit_insn (gen_cirrus_floatsidf2 (operands[0], operands[1])); + DONE; +@@ -3154,7 +3154,7 @@ + (fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" ""))))] + "TARGET_ARM && TARGET_HARD_FLOAT" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + if (!cirrus_fp_register (operands[0], SImode)) + operands[0] = force_reg (SImode, operands[0]); +@@ -3170,7 +3170,7 @@ + (fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" ""))))] + "TARGET_ARM && TARGET_HARD_FLOAT" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + if (!cirrus_fp_register (operands[1], DFmode)) + operands[1] = force_reg (DFmode, operands[0]); diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-64bit-disable-4.2.0.patch b/packages/gcc/gcc-4.2.4/arm-crunch-64bit-disable-4.2.0.patch new file mode 100644 index 0000000000..60b17852bd --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-64bit-disable-4.2.0.patch @@ -0,0 +1,169 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-integer 2007-06-15 09:01:37.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-15 09:04:45.000000000 +1000 +@@ -34,7 +34,7 @@ + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (plus:DI (match_operand:DI 1 "cirrus_fp_register" "v") + (match_operand:DI 2 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfadd64%?\\t%V0, %V1, %V2" + [(set_attr "type" "mav_farith") + (set_attr "cirrus" "normal")] +@@ -74,7 +74,7 @@ + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (minus:DI (match_operand:DI 1 "cirrus_fp_register" "v") + (match_operand:DI 2 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfsub64%?\\t%V0, %V1, %V2" + [(set_attr "type" "mav_farith") + (set_attr "cirrus" "normal")] +@@ -124,7 +124,7 @@ + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (mult:DI (match_operand:DI 2 "cirrus_fp_register" "v") + (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmul64%?\\t%V0, %V1, %V2" + [(set_attr "type" "mav_dmult") + (set_attr "cirrus" "normal")] +@@ -206,7 +206,7 @@ + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (ashift:DI (match_operand:DI 1 "cirrus_fp_register" "v") + (match_operand:SI 2 "register_operand" "r")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfrshl64%?\\t%V1, %V0, %s2" + [(set_attr "cirrus" "normal")] + ) +@@ -215,7 +215,7 @@ + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (ashift:DI (match_operand:DI 1 "cirrus_fp_register" "v") + (match_operand:SI 2 "cirrus_shift_const" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfsh64%?\\t%V0, %V1, #%s2" + [(set_attr "cirrus" "normal")] + ) +@@ -224,7 +224,7 @@ + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (ashiftrt:DI (match_operand:DI 1 "cirrus_fp_register" "v") + (match_operand:SI 2 "cirrus_shift_const" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfsh64%?\\t%V0, %V1, #-%s2" + [(set_attr "cirrus" "normal")] + ) +@@ -232,7 +232,7 @@ + (define_insn "*cirrus_absdi2" + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (abs:DI (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfabs64%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")] + ) +@@ -238,11 +238,12 @@ + ) + + ;; This doesn't really clobber ``cc''. Fixme: aldyh. ++;; maybe buggy? + (define_insn "*cirrus_negdi2" + [(set (match_operand:DI 0 "cirrus_fp_register" "=v") + (neg:DI (match_operand:DI 1 "cirrus_fp_register" "v"))) + (clobber (reg:CC CC_REGNUM))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfneg64%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")] + ) +@@ -324,14 +324,14 @@ + (define_insn "floatdisf2" + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (float:SF (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfcvt64s%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")]) + + (define_insn "floatdidf2" + [(set (match_operand:DF 0 "cirrus_fp_register" "=v") + (float:DF (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfcvt64d%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")]) + +@@ -376,7 +376,7 @@ + (define_insn "*cirrus_arm_movdi" + [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r,r,o<>,v,r,v,m,v") + (match_operand:DI 1 "di_operand" "rIK,mi,r,r,v,mi,v,v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "* + { + switch (which_alternative) +--- gcc-4.1.2/gcc/config/arm/arm.md-64 2007-06-15 11:37:42.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-15 11:40:45.000000000 +1000 +@@ -357,7 +357,7 @@ + (clobber (reg:CC CC_REGNUM))])] + "TARGET_EITHER" + " +- if (TARGET_HARD_FLOAT && TARGET_MAVERICK) ++ if (TARGET_HARD_FLOAT && TARGET_MAVERICK && 0) + { + if (!cirrus_fp_register (operands[0], DImode)) + operands[0] = force_reg (DImode, operands[0]); +@@ -393,7 +393,7 @@ + (plus:DI (match_operand:DI 1 "s_register_operand" "%0, 0") + (match_operand:DI 2 "s_register_operand" "r, 0"))) + (clobber (reg:CC CC_REGNUM))] +- "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" ++ "TARGET_ARM" + "#" + "TARGET_ARM && reload_completed" + [(parallel [(set (reg:CC_C CC_REGNUM) +@@ -421,7 +421,7 @@ + (match_operand:SI 2 "s_register_operand" "r,r")) + (match_operand:DI 1 "s_register_operand" "r,0"))) + (clobber (reg:CC CC_REGNUM))] +- "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" ++ "TARGET_ARM" + "#" + "TARGET_ARM && reload_completed" + [(parallel [(set (reg:CC_C CC_REGNUM) +@@ -450,7 +450,7 @@ + (match_operand:SI 2 "s_register_operand" "r,r")) + (match_operand:DI 1 "s_register_operand" "r,0"))) + (clobber (reg:CC CC_REGNUM))] +- "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" ++ "TARGET_ARM" + "#" + "TARGET_ARM && reload_completed" + [(parallel [(set (reg:CC_C CC_REGNUM) +@@ -838,7 +838,7 @@ + if (TARGET_HARD_FLOAT && TARGET_MAVERICK + && TARGET_ARM + && cirrus_fp_register (operands[0], DImode) +- && cirrus_fp_register (operands[1], DImode)) ++ && cirrus_fp_register (operands[1], DImode) && 0) + { + emit_insn (gen_cirrus_subdi3 (operands[0], operands[1], operands[2])); + DONE; +@@ -2599,7 +2599,7 @@ + values to iwmmxt regs and back. */ + FAIL; + } +- else if (!TARGET_REALLY_IWMMXT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)) ++ else if (!TARGET_REALLY_IWMMXT) + FAIL; + " + ) +@@ -4215,7 +4215,6 @@ + [(set (match_operand:DI 0 "nonimmediate_operand" "=l,l,l,l,>,l, m,*r") + (match_operand:DI 1 "general_operand" "l, I,J,>,l,mi,l,*r"))] + "TARGET_THUMB +- && !(TARGET_HARD_FLOAT && TARGET_MAVERICK) + && ( register_operand (operands[0], DImode) + || register_operand (operands[1], DImode))" + "* diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-64bit-disable0.patch b/packages/gcc/gcc-4.2.4/arm-crunch-64bit-disable0.patch new file mode 100644 index 0000000000..95abf68a60 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-64bit-disable0.patch @@ -0,0 +1,47 @@ +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.md gcc-4.1.2/gcc/config/arm/arm.md +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.md 2006-09-28 03:10:22.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-05-15 09:53:21.000000000 +1000 +@@ -6865,10 +6877,12 @@ + ) + + ;; Cirrus DI compare instruction ++;; This is disabled and left go through ARM core registers, because currently ++;; Crunch coprocessor does only signed comparison. + (define_expand "cmpdi" + [(match_operand:DI 0 "cirrus_fp_register" "") + (match_operand:DI 1 "cirrus_fp_register" "")] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK & 0" + "{ + arm_compare_op0 = operands[0]; + arm_compare_op1 = operands[1]; +@@ -6879,7 +6893,7 @@ + [(set (reg:CC CC_REGNUM) + (compare:CC (match_operand:DI 0 "cirrus_fp_register" "v") + (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK & 0" + "cfcmp64%?\\tr15, %V0, %V1" + [(set_attr "type" "mav_farith") + (set_attr "cirrus" "compare")] +@@ -10105,6 +10119,7 @@ + [(unspec:SI [(match_operand:SI 0 "register_operand" "")] UNSPEC_PROLOGUE_USE)] + "" + "%@ %0 needed for prologue" ++ [(set_attr "length" "0")] + ) + + +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/cirrus.md gcc-4.1.2/gcc/config/arm/cirrus.md +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/cirrus.md 2005-06-25 11:22:41.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-05-15 09:55:29.000000000 +1000 +@@ -348,7 +348,8 @@ + (clobber (match_scratch:DF 2 "=v"))] + "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" + "cftruncd32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2" +- [(set_attr "length" "8")] ++ [(set_attr "length" "8") ++ (set_attr "cirrus" "normal")] + ) + + (define_insn "*cirrus_truncdfsf2" diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-and-or.patch b/packages/gcc/gcc-4.2.4/arm-crunch-and-or.patch new file mode 100644 index 0000000000..24357d316e --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-and-or.patch @@ -0,0 +1,67 @@ +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-13 17:16:38.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-13 17:35:19.000000000 +1000 +@@ -8455,7 +8455,7 @@ + (and:SI (match_operator:SI 1 "arm_comparison_operator" + [(match_operand 3 "cc_register" "") (const_int 0)]) + (match_operand:SI 2 "s_register_operand" "r")))] +- "TARGET_ARM" ++ "TARGET_ARM && !TARGET_MAVERICK" + "mov%D1\\t%0, #0\;and%d1\\t%0, %2, #1" + [(set_attr "conds" "use") + (set_attr "length" "8")] +@@ -8466,7 +8466,7 @@ + (ior:SI (match_operator:SI 2 "arm_comparison_operator" + [(match_operand 3 "cc_register" "") (const_int 0)]) + (match_operand:SI 1 "s_register_operand" "0,?r")))] +- "TARGET_ARM" ++ "TARGET_ARM && !TARGET_MAVERICK" + "@ + orr%d2\\t%0, %1, #1 + mov%D2\\t%0, %1\;orr%d2\\t%0, %1, #1" +@@ -8734,7 +8734,8 @@ + (clobber (reg:CC CC_REGNUM))] + "TARGET_ARM + && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_OR_Y) +- != CCmode)" ++ != CCmode) ++ && !TARGET_MAVERICK" + "#" + "TARGET_ARM && reload_completed" + [(set (match_dup 7) +@@ -8765,7 +8766,7 @@ + (set (match_operand:SI 7 "s_register_operand" "=r") + (ior:SI (match_op_dup 3 [(match_dup 1) (match_dup 2)]) + (match_op_dup 6 [(match_dup 4) (match_dup 5)])))] +- "TARGET_ARM" ++ "TARGET_ARM && !TARGET_MAVERICK" + "#" + "TARGET_ARM && reload_completed" + [(set (match_dup 0) +@@ -8790,7 +8791,8 @@ + (clobber (reg:CC CC_REGNUM))] + "TARGET_ARM + && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_AND_Y) +- != CCmode)" ++ != CCmode) ++ && !TARGET_MAVERICK" + "#" + "TARGET_ARM && reload_completed + && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_AND_Y) +@@ -8823,7 +8825,7 @@ + (set (match_operand:SI 7 "s_register_operand" "=r") + (and:SI (match_op_dup 3 [(match_dup 1) (match_dup 2)]) + (match_op_dup 6 [(match_dup 4) (match_dup 5)])))] +- "TARGET_ARM" ++ "TARGET_ARM && !TARGET_MAVERICK" + "#" + "TARGET_ARM && reload_completed" + [(set (match_dup 0) +@@ -8850,7 +8852,7 @@ + [(match_operand:SI 4 "s_register_operand" "r,r,r") + (match_operand:SI 5 "arm_add_operand" "rIL,rIL,rIL")]))) + (clobber (reg:CC CC_REGNUM))] +- "TARGET_ARM ++ "TARGET_ARM && !TARGET_MAVERICK + && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_AND_Y) + == CCmode)" + "#" diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-cfcvt64-disable.patch b/packages/gcc/gcc-4.2.4/arm-crunch-cfcvt64-disable.patch new file mode 100644 index 0000000000..f9280b18b5 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-cfcvt64-disable.patch @@ -0,0 +1,19 @@ +--- gcc-4.2.0/gcc/config/arm/cirrus.md-original 2007-06-25 15:32:01.000000000 +1000 ++++ gcc-4.2.0/gcc/config/arm/cirrus.md 2007-06-25 15:32:14.000000000 +1000 +@@ -325,14 +325,14 @@ + (define_insn "floatdisf2" + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (float:SF (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfcvt64s%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")]) + + (define_insn "floatdidf2" + [(set (match_operand:DF 0 "cirrus_fp_register" "=v") + (float:DF (match_operand:DI 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfcvt64d%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")]) + diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-cfcvtds-disable.patch b/packages/gcc/gcc-4.2.4/arm-crunch-cfcvtds-disable.patch new file mode 100644 index 0000000000..ec09ea16a1 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-cfcvtds-disable.patch @@ -0,0 +1,32 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-cfcvt 2007-06-15 10:06:24.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-15 10:07:21.000000000 +1000 +@@ -355,11 +355,12 @@ + (set_attr "cirrus" "normal")] + ) + ++; appears to be buggy - causes 20000320-1.c to fail in execute/ieee + (define_insn "*cirrus_truncdfsf2" + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (float_truncate:SF + (match_operand:DF 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfcvtds%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")] + ) +--- gcc-4.1.2/gcc/config/arm/arm.md-truncdfsf2 2007-06-15 10:25:43.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-15 10:27:01.000000000 +1000 +@@ -3181,11 +3181,12 @@ + + ;; Truncation insns + ++;; Maverick Crunch truncdfsf2 is buggy - see cirrus.md + (define_expand "truncdfsf2" + [(set (match_operand:SF 0 "s_register_operand" "") + (float_truncate:SF + (match_operand:DF 1 "s_register_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + "" + ) + diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-cirrus-bugfixes.patch b/packages/gcc/gcc-4.2.4/arm-crunch-cirrus-bugfixes.patch new file mode 100644 index 0000000000..cb0af8546d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-cirrus-bugfixes.patch @@ -0,0 +1,573 @@ +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.c gcc-4.1.2/gcc/config/arm/arm.c +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.c 2007-05-09 16:32:29.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-05-15 09:39:41.000000000 +1000 +@@ -4,6 +4,7 @@ + Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) + and Martin Simmons (@harleqn.co.uk). + More major hacks by Richard Earnshaw (rearnsha@arm.com). ++ Cirrus Crunch bugfixes by Vladimir Ivanov (vladit@nucleusys.com) + + This file is part of GCC. + +@@ -131,9 +132,17 @@ + static bool arm_xscale_rtx_costs (rtx, int, int, int *); + static bool arm_9e_rtx_costs (rtx, int, int, int *); + static int arm_address_cost (rtx); +-static bool arm_memory_load_p (rtx); ++// static bool arm_memory_load_p (rtx); + static bool arm_cirrus_insn_p (rtx); +-static void cirrus_reorg (rtx); ++// static void cirrus_reorg (rtx); ++static bool arm_mem_access_p (rtx); ++static bool cirrus_dest_regn_p (rtx, int); ++static rtx cirrus_prev_next_mach_insn (rtx, int *, int); ++static rtx cirrus_prev_mach_insn (rtx, int *); ++static rtx cirrus_next_mach_insn (rtx, int *); ++static void cirrus_reorg_branch (rtx); ++static void cirrus_reorg_bug1 (rtx); ++static void cirrus_reorg_bug10_12 (rtx); + static void arm_init_builtins (void); + static rtx arm_expand_builtin (tree, rtx, rtx, enum machine_mode, int); + static void arm_init_iwmmxt_builtins (void); +@@ -5399,41 +5412,6 @@ + || TREE_CODE (valtype) == COMPLEX_TYPE)); + } + +-/* Returns TRUE if INSN is an "LDR REG, ADDR" instruction. +- Use by the Cirrus Maverick code which has to workaround +- a hardware bug triggered by such instructions. */ +-static bool +-arm_memory_load_p (rtx insn) +-{ +- rtx body, lhs, rhs;; +- +- if (insn == NULL_RTX || GET_CODE (insn) != INSN) +- return false; +- +- body = PATTERN (insn); +- +- if (GET_CODE (body) != SET) +- return false; +- +- lhs = XEXP (body, 0); +- rhs = XEXP (body, 1); +- +- lhs = REG_OR_SUBREG_RTX (lhs); +- +- /* If the destination is not a general purpose +- register we do not have to worry. */ +- if (GET_CODE (lhs) != REG +- || REGNO_REG_CLASS (REGNO (lhs)) != GENERAL_REGS) +- return false; +- +- /* As well as loads from memory we also have to react +- to loads of invalid constants which will be turned +- into loads from the minipool. */ +- return (GET_CODE (rhs) == MEM +- || GET_CODE (rhs) == SYMBOL_REF +- || note_invalid_constants (insn, -1, false)); +-} +- + /* Return TRUE if INSN is a Cirrus instruction. */ + static bool + arm_cirrus_insn_p (rtx insn) +@@ -5452,124 +5433,218 @@ + return attr != CIRRUS_NOT; + } + +-/* Cirrus reorg for invalid instruction combinations. */ +-static void +-cirrus_reorg (rtx first) ++/* Return TRUE if ISN does memory access. */ ++static bool ++arm_mem_access_p (rtx insn) + { +- enum attr_cirrus attr; +- rtx body = PATTERN (first); +- rtx t; +- int nops; ++ enum attr_type attr; + +- /* Any branch must be followed by 2 non Cirrus instructions. */ +- if (GET_CODE (first) == JUMP_INSN && GET_CODE (body) != RETURN) +- { +- nops = 0; +- t = next_nonnote_insn (first); ++ /* get_attr aborts on USE and CLOBBER. */ ++ if (!insn ++ || GET_CODE (insn) != INSN ++ || GET_CODE (PATTERN (insn)) == USE ++ || GET_CODE (PATTERN (insn)) == CLOBBER) ++ return 0; + +- if (arm_cirrus_insn_p (t)) +- ++ nops; ++ attr = get_attr_type (insn); + +- if (arm_cirrus_insn_p (next_nonnote_insn (t))) +- ++ nops; ++ return attr == TYPE_LOAD_BYTE ++ || attr == TYPE_LOAD1 || attr == TYPE_LOAD2 || attr == TYPE_LOAD3 || attr == TYPE_LOAD4 ++ || attr == TYPE_F_CVT ++ || attr == TYPE_F_MEM_R || attr == TYPE_R_MEM_F || attr == TYPE_F_2_R || attr == TYPE_R_2_F ++ || attr == TYPE_F_LOAD || attr == TYPE_F_LOADS || attr == TYPE_F_LOADD ++ || attr == TYPE_F_STORE || attr == TYPE_F_STORES || attr == TYPE_F_STORED ++ || attr == TYPE_STORE1 || attr == TYPE_STORE2 || attr == TYPE_STORE3 || attr == TYPE_STORE4; ++ ++} + +- while (nops --) +- emit_insn_after (gen_nop (), first); ++/* Return TRUE if destination is certain Cirrus register. */ ++static bool ++cirrus_dest_regn_p (rtx body, int regn) ++{ ++ rtx lhs; ++ int reg; ++ lhs = XEXP (body, 0); ++ if (GET_CODE (lhs) != REG) ++ return 0; + +- return; +- } ++ reg = REGNO (lhs); ++ if (REGNO_REG_CLASS (reg) != CIRRUS_REGS) ++ return 0; + +- /* (float (blah)) is in parallel with a clobber. */ +- if (GET_CODE (body) == PARALLEL && XVECLEN (body, 0) > 0) +- body = XVECEXP (body, 0, 0); ++ return reg == regn; ++} ++ ++/* Get previous/next machine instruction during Cirrus workaround scans. ++ Assume worst case (for the purpose of Cirrus workarounds) ++ for JUMP / CALL instructions. */ ++static rtx ++cirrus_prev_next_mach_insn (rtx insn, int *len, int next) ++{ ++ rtx t; ++ int l = 0; + +- if (GET_CODE (body) == SET) ++ /* It seems that we can count only on INSN length. */ ++ for ( ; ; ) + { +- rtx lhs = XEXP (body, 0), rhs = XEXP (body, 1); ++ if (next) ++ insn = NEXT_INSN (insn); ++ else ++ insn = PREV_INSN (insn); ++ if (!insn) ++ break; + +- /* cfldrd, cfldr64, cfstrd, cfstr64 must +- be followed by a non Cirrus insn. */ +- if (get_attr_cirrus (first) == CIRRUS_DOUBLE) +- { +- if (arm_cirrus_insn_p (next_nonnote_insn (first))) +- emit_insn_after (gen_nop (), first); ++ if (GET_CODE (insn) == INSN) ++ { ++ l = get_attr_length (insn) / 4; ++ if (l) ++ break; ++ } ++ else if (GET_CODE (insn) == JUMP_INSN) ++ { ++ l = 1; ++ t = is_jump_table (insn); ++ if (t) ++ l += get_jump_table_size (t) / 4; ++ break; ++ } ++ else if (GET_CODE (insn) == CALL_INSN) ++ { ++ l = 1; ++ break; ++ } ++ } + +- return; +- } +- else if (arm_memory_load_p (first)) +- { +- unsigned int arm_regno; ++ if (len) ++ *len = l; + +- /* Any ldr/cfmvdlr, ldr/cfmvdhr, ldr/cfmvsr, ldr/cfmv64lr, +- ldr/cfmv64hr combination where the Rd field is the same +- in both instructions must be split with a non Cirrus +- insn. Example: +- +- ldr r0, blah +- nop +- cfmvsr mvf0, r0. */ +- +- /* Get Arm register number for ldr insn. */ +- if (GET_CODE (lhs) == REG) +- arm_regno = REGNO (lhs); +- else +- { +- gcc_assert (GET_CODE (rhs) == REG); +- arm_regno = REGNO (rhs); +- } ++ return insn; ++} + +- /* Next insn. */ +- first = next_nonnote_insn (first); ++static rtx ++cirrus_prev_mach_insn (rtx insn, int *len) ++{ ++ return cirrus_prev_next_mach_insn (insn, len, 0); ++} + +- if (! arm_cirrus_insn_p (first)) +- return; ++static rtx ++cirrus_next_mach_insn (rtx insn, int *len) ++{ ++ return cirrus_prev_next_mach_insn (insn, len, 1); ++} + +- body = PATTERN (first); ++/* Cirrus reorg for branch slots. */ ++static void ++cirrus_reorg_branch (rtx insn) ++{ ++ rtx t; ++ int nops, l; + +- /* (float (blah)) is in parallel with a clobber. */ +- if (GET_CODE (body) == PARALLEL && XVECLEN (body, 0)) +- body = XVECEXP (body, 0, 0); +- +- if (GET_CODE (body) == FLOAT) +- body = XEXP (body, 0); +- +- if (get_attr_cirrus (first) == CIRRUS_MOVE +- && GET_CODE (XEXP (body, 1)) == REG +- && arm_regno == REGNO (XEXP (body, 1))) +- emit_insn_after (gen_nop (), first); ++ /* TODO: handle jump-tables. */ ++ t = is_jump_table (insn); ++ if (t) ++ return; ++ ++ /* Any branch must be followed by 2 non Cirrus instructions. */ ++ t = insn; ++ for (nops = 2; nops > 0; ) ++ { ++ if (!cirrus_next_mach_insn (t, 0)) ++ { ++ insn = t; ++ break; ++ } ++ t = cirrus_next_mach_insn (t, &l); ++ if (arm_cirrus_insn_p (t)) ++ break; ++ nops -= l; + +- return; +- } + } + +- /* get_attr cannot accept USE or CLOBBER. */ +- if (!first +- || GET_CODE (first) != INSN +- || GET_CODE (PATTERN (first)) == USE +- || GET_CODE (PATTERN (first)) == CLOBBER) +- return; ++ while (nops-- > 0) ++ emit_insn_after (gen_nop (), insn); /* WARNING: this appears to cause "bad immediate value for offset" errors in the assembler */ ++} + +- attr = get_attr_cirrus (first); ++/* Cirrus reorg for bug #1 (cirrus + cfcmpxx). */ ++static void ++cirrus_reorg_bug1 (rtx insn) ++{ ++ rtx body = PATTERN (insn), body2; ++ rtx t; ++ int i, nops, l; ++ enum attr_cirrus attr; + +- /* Any coprocessor compare instruction (cfcmps, cfcmpd, ...) +- must be followed by a non-coprocessor instruction. */ +- if (attr == CIRRUS_COMPARE) ++ /* Check if destination or clobber is Cirrus register. */ ++ if (GET_CODE (body) == PARALLEL) + { +- nops = 0; +- +- t = next_nonnote_insn (first); ++ for (i = 0; i < XVECLEN (body, 0); i++) ++ { ++ body2 = XVECEXP (body, 0, i); ++ if (GET_CODE (body2) == SET) ++ { ++ if (cirrus_dest_regn_p (body2, LAST_CIRRUS_FP_REGNUM)) ++ { ++ nops = 5; ++ goto fix; ++ } ++ } ++ else if (GET_CODE (body2) == CLOBBER) ++ { ++ if (cirrus_dest_regn_p (body2, LAST_CIRRUS_FP_REGNUM)) ++ { ++ nops = 4; ++ goto fix; ++ } ++ } ++ } ++ } ++ else if (GET_CODE (body) == SET) ++ { ++ if (cirrus_dest_regn_p (body, LAST_CIRRUS_FP_REGNUM)) ++ { ++ nops = 5; ++ goto fix; ++ } ++ } ++ return; + +- if (arm_cirrus_insn_p (t)) +- ++ nops; ++fix: ++ t = insn; ++ for ( ; nops > 0; ) ++ { ++ t = cirrus_next_mach_insn (t, &l); ++ if (!t) ++ break; ++ if (GET_CODE (t) == JUMP_INSN ++ || GET_CODE (t) == CALL_INSN) ++ { ++ nops -= l; ++ break; ++ } ++ else if (arm_cirrus_insn_p (t)) ++ { ++ attr = get_attr_cirrus (t); ++ if (attr == CIRRUS_COMPARE) ++ break; ++ } ++ nops -= l; ++ } + +- if (arm_cirrus_insn_p (next_nonnote_insn (t))) +- ++ nops; ++ while (nops-- > 0) ++ emit_insn_after (gen_nop (), insn); /* WARNING: this appears to cause "bad immediate value for offset" errors in the assembler */ ++} + +- while (nops --) +- emit_insn_after (gen_nop (), first); ++/* Cirrus reorg for bugs #10 and #12 (data aborts). */ ++static void ++cirrus_reorg_bug10_12 (rtx insn) ++{ ++ rtx t; + +- return; +- } ++ t = cirrus_next_mach_insn (insn, 0); ++ if (arm_cirrus_insn_p (t)) ++ if (TARGET_CIRRUS_D0 || ++ get_attr_cirrus (t) == CIRRUS_DOUBLE) ++ emit_insn_after (gen_nop (), insn); /* WARNING: this appears to cause "bad immediate value for offset" errors in the assembler */ + } + + /* Return TRUE if X references a SYMBOL_REF. */ +@@ -7727,7 +7796,7 @@ + { + Mnode * mp; + Mnode * nmp; +- int align64 = 0; ++ int align64 = 0, stuffnop = 0; + + if (ARM_DOUBLEWORD_ALIGN) + for (mp = minipool_vector_head; mp != NULL; mp = mp->next) +@@ -7742,8 +7811,27 @@ + ";; Emitting minipool after insn %u; address %ld; align %d (bytes)\n", + INSN_UID (scan), (unsigned long) minipool_barrier->address, align64 ? 8 : 4); + ++ /* Check if branch before minipool is already stuffed with nops. */ ++ if (TARGET_CIRRUS_D0 || TARGET_CIRRUS_D1) ++ { ++ rtx t; ++ ++ t = prev_active_insn (scan); ++ if (GET_CODE (t) != INSN ++ || PATTERN (t) != const0_rtx) ++ stuffnop = 1; ++ } + scan = emit_label_after (gen_label_rtx (), scan); + scan = emit_insn_after (align64 ? gen_align_8 () : gen_align_4 (), scan); ++ /* Last instruction was branch, so put two non-Cirrus opcodes. */ ++ if (stuffnop) ++ { ++#if TARGET_CIRRUS /* This is doubling up on nops, so I don't think this is a good idea */ ++ emit_insn_before (gen_nop (), scan); /* WARNING: this appears to cause "bad immediate value for offset" errors in the assembler */ ++ emit_insn_before (gen_nop (), scan); /* WARNING: this appears to cause "bad immediate value for offset" errors in the assembler */ ++#endif ++ } ++ + scan = emit_label_after (minipool_vector_label, scan); + + for (mp = minipool_vector_head; mp != NULL; mp = nmp) +@@ -8151,15 +8239,38 @@ + gcc_assert (GET_CODE (insn) == NOTE); + minipool_pad = 0; + ++#if TARGET_CIRRUS /* I think this is a double-up */ ++ /* Scan all the insn and fix Cirrus issues. */ ++ if (TARGET_CIRRUS_D0 || TARGET_CIRRUS_D1) ++ { ++ rtx t, s; ++ ++ for (t = cirrus_next_mach_insn (insn, 0); t; t = cirrus_next_mach_insn (t, 0)) ++ if (arm_mem_access_p (t)) ++ cirrus_reorg_bug10_12 (t); ++ ++ if (TARGET_CIRRUS_D0) ++ for (t = cirrus_next_mach_insn (insn, 0); t; t = cirrus_next_mach_insn (t, 0)) ++ if (arm_cirrus_insn_p (t)) ++ cirrus_reorg_bug1 (t); ++ ++ /* Find last insn. */ ++ for (t = insn; ; t = s) ++ { ++ s = cirrus_next_mach_insn (t, 0); ++ if (!s) ++ break; ++ } ++ /* Scan backward and fix branches. - WARNING: appears to cause "bad immediate value for offset" problems! */ ++ for ( ; t; t = cirrus_prev_mach_insn (t, 0)) ++ if (GET_CODE (t) == JUMP_INSN ++ || GET_CODE (t) == CALL_INSN) ++ cirrus_reorg_branch (t); ++ } ++#endif + /* Scan all the insns and record the operands that will need fixing. */ + for (insn = next_nonnote_insn (insn); insn; insn = next_nonnote_insn (insn)) + { +- if (TARGET_CIRRUS_FIX_INVALID_INSNS +- && (arm_cirrus_insn_p (insn) +- || GET_CODE (insn) == JUMP_INSN +- || arm_memory_load_p (insn))) +- cirrus_reorg (insn); +- + if (GET_CODE (insn) == BARRIER) + push_minipool_barrier (insn, address); + else if (INSN_P (insn)) +@@ -11755,16 +11910,10 @@ + || get_attr_conds (this_insn) != CONDS_NOCOND) + fail = TRUE; + +- /* A conditional cirrus instruction must be followed by +- a non Cirrus instruction. However, since we +- conditionalize instructions in this function and by +- the time we get here we can't add instructions +- (nops), because shorten_branches() has already been +- called, we will disable conditionalizing Cirrus +- instructions to be safe. */ +- if (GET_CODE (scanbody) != USE +- && GET_CODE (scanbody) != CLOBBER +- && get_attr_cirrus (this_insn) != CIRRUS_NOT) ++ /* To avoid erratic behaviour, we avoid conditional Cirrus ++ instructions when doing workarounds. */ ++ if (arm_cirrus_insn_p(this_insn) ++ && (TARGET_CIRRUS_D0 || TARGET_CIRRUS_D1)) + fail = TRUE; + break; + +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.h gcc-4.1.2/gcc/config/arm/arm.h +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.h 2005-11-05 01:02:51.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.h 2007-05-15 10:15:05.000000000 +1000 +@@ -5,6 +5,7 @@ + and Martin Simmons (@harleqn.co.uk). + More major hacks by Richard Earnshaw (rearnsha@arm.com) + Minor hacks by Nick Clifton (nickc@cygnus.com) ++ Cirrus Crunch fixes by Vladimir Ivanov (vladitx@nucleusys.com) + + This file is part of GCC. + +@@ -140,7 +141,9 @@ + %{msoft-float:%{mhard-float: \ + %e-msoft-float and -mhard_float may not be used together}} \ + %{mbig-endian:%{mlittle-endian: \ +- %e-mbig-endian and -mlittle-endian may not be used together}}" ++ %e-mbig-endian and -mlittle-endian may not be used together}} \ ++%{mfix-crunch-d0:%{mfix-crunch-d1: \ ++ %e-mfix-crunch-d0 and -mfix-crunch-d1 may not be used together}}" + + #ifndef CC1_SPEC + #define CC1_SPEC "" +@@ -179,6 +182,9 @@ + #define TARGET_HARD_FLOAT_ABI (arm_float_abi == ARM_FLOAT_ABI_HARD) + #define TARGET_FPA (arm_fp_model == ARM_FP_MODEL_FPA) + #define TARGET_MAVERICK (arm_fp_model == ARM_FP_MODEL_MAVERICK) ++#define TARGET_CIRRUS (arm_arch_cirrus) ++#define TARGET_CIRRUS_D0 0 /* (target_flags & ARM_FLAG_CIRRUS_D0) */ ++#define TARGET_CIRRUS_D1 1 /* (target_flags & ARM_FLAG_CIRRUS_D1) */ + #define TARGET_VFP (arm_fp_model == ARM_FP_MODEL_VFP) + #define TARGET_IWMMXT (arm_arch_iwmmxt) + #define TARGET_REALLY_IWMMXT (TARGET_IWMMXT && TARGET_ARM) +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.opt gcc-4.1.2/gcc/config/arm/arm.opt +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.opt 2005-11-05 01:02:51.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.opt 2007-05-15 10:09:31.000000000 +1000 +@@ -68,6 +68,14 @@ + Target Report Mask(CIRRUS_FIX_INVALID_INSNS) + Cirrus: Place NOPs to avoid invalid instruction combinations + ++fix-crunch-d0 ++Target Report Mask(ARM_FLAG_CIRRUS_D0) ++Cirrus: workarounds for Crunch coprocessor revision D0 ++ ++fix-crunch-d1 ++Target Report Mask(ARM_FLAG_CIRRUS_D1) ++Cirrus: workarounds for Crunch coprocessor revision D1 ++ + mcpu= + Target RejectNegative Joined + Specify the name of the target CPU +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/doc/invoke.texi gcc-4.1.2/gcc/doc/invoke.texi +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/doc/invoke.texi 2006-09-26 07:21:58.000000000 +1000 ++++ gcc-4.1.2/gcc/doc/invoke.texi 2007-05-15 10:07:04.000000000 +1000 +@@ -408,7 +408,7 @@ + -msingle-pic-base -mno-single-pic-base @gol + -mpic-register=@var{reg} @gol + -mnop-fun-dllimport @gol +--mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol ++-mfix-crunch-d0 -mfix-crunch-d1 @gol + -mpoke-function-name @gol + -mthumb -marm @gol + -mtpcs-frame -mtpcs-leaf-frame @gol +@@ -7435,17 +7435,12 @@ + Specify the register to be used for PIC addressing. The default is R10 + unless stack-checking is enabled, when R9 is used. + +-@item -mcirrus-fix-invalid-insns +-@opindex mcirrus-fix-invalid-insns +-@opindex mno-cirrus-fix-invalid-insns +-Insert NOPs into the instruction stream to in order to work around +-problems with invalid Maverick instruction combinations. This option +-is only valid if the @option{-mcpu=ep9312} option has been used to +-enable generation of instructions for the Cirrus Maverick floating +-point co-processor. This option is not enabled by default, since the +-problem is only present in older Maverick implementations. The default +-can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns} +-switch. ++@item -mfix-crunch-d0 ++@itemx -mfix-crunch-d1 ++@opindex mfix-crunch-d0 ++@opindex mfix-crunch-d1 ++Enable workarounds for the Cirrus MaverickCrunch coprocessor revisions ++D0 and D1 respectively. + + @item -mpoke-function-name + @opindex mpoke-function-name diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-compare-geu.patch b/packages/gcc/gcc-4.2.4/arm-crunch-compare-geu.patch new file mode 100644 index 0000000000..3d27cc1d9d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-compare-geu.patch @@ -0,0 +1,48 @@ +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-08 06:39:41.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-08 06:41:00.000000000 +1000 +@@ -7125,6 +7125,22 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match GEU for MAVERICK. ++(define_insn "*arm_bgeu" ++ [(set (pc) ++ (if_then_else (geu (match_operand 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ if (get_attr_cirrus (prev_active_insn(insn)) == CIRRUS_COMPARE) ++ return \"beq\\t%l0\;bvs\\t%l0\"; else return \"bge\\t%l0\;nop\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ + ; Special pattern to match UNLT for MAVERICK - UGLY since we need to test for Z=0 && V=0. + (define_insn "*arm_bunlt" + [(set (pc) +@@ -7240,6 +7256,22 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match reversed GEU for MAVERICK. ++(define_insn "*arm_bgeu_reversed" ++ [(set (pc) ++ (if_then_else (geu (match_operand 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t.+12\;bvs\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) ++ + ; Special pattern to match reversed UNLT for MAVERICK. + (define_insn "*arm_bunlt_reversed" + [(set (pc) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch b/packages/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch new file mode 100644 index 0000000000..c4fcdb3746 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch @@ -0,0 +1,98 @@ +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-07 14:45:22.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-07 15:13:58.000000000 +1000 +@@ -7001,16 +7001,16 @@ + (if_then_else (unordered (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNORDERED, arm_compare_op0, + arm_compare_op1);" + ) + + (define_expand "bordered" + [(set (pc) + (if_then_else (ordered (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (ORDERED, arm_compare_op0, + arm_compare_op1);" +@@ -7141,6 +7141,38 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match UNORDERED for MAVERICK - UGLY since we need to test for Z=0 && N=0. ++(define_insn "*arm_bunordered" ++ [(set (pc) ++ (if_then_else (unordered (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t.+12\;bmi\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) ++ ++; Special pattern to match ORDERED for MAVERICK. ++(define_insn "*arm_bordered" ++ [(set (pc) ++ (if_then_else (ordered (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t%l0\;bmi\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ + (define_insn "*arm_cond_branch" + [(set (pc) + (if_then_else (match_operator 1 "arm_comparison_operator" +@@ -7224,6 +7256,37 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match reversed UNORDERED for MAVERICK. ++(define_insn "*arm_bunordered_reversed" ++ [(set (pc) ++ (if_then_else (unordered (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t%l0\;bmi\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++; Special pattern to match reversed ORDERED for MAVERICK - UGLY since we need to test for Z=0 && N=0. ++(define_insn "*arm_bordered_reversed" ++ [(set (pc) ++ (if_then_else (ordered (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t.+12\;bmi\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) + + (define_insn "*arm_cond_branch_reversed" + [(set (pc) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch-z-eq b/packages/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch-z-eq new file mode 100644 index 0000000000..715fb95086 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-compare-unordered.patch-z-eq @@ -0,0 +1,98 @@ +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-07 14:45:22.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-07 15:13:58.000000000 +1000 +@@ -7001,16 +7001,16 @@ + (if_then_else (unordered (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNORDERED, arm_compare_op0, + arm_compare_op1);" + ) + + (define_expand "bordered" + [(set (pc) + (if_then_else (ordered (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (ORDERED, arm_compare_op0, + arm_compare_op1);" +@@ -7141,6 +7141,38 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match UNORDERED for MAVERICK - UGLY since we need to test for C=0 && N=0 ++(define_insn "*arm_bunordered" ++ [(set (pc) ++ (if_then_else (unordered (match_operand 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"bcs\\t.+12\;bmi\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) ++ ++; Special pattern to match ORDERED for MAVERICK. ++(define_insn "*arm_bordered" ++ [(set (pc) ++ (if_then_else (ordered (match_operand 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"bcs\\t%l0\;bmi\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ + (define_insn "*arm_cond_branch" + [(set (pc) + (if_then_else (match_operator 1 "arm_comparison_operator" +@@ -7224,6 +7256,37 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match reversed UNORDERED for MAVERICK. ++(define_insn "*arm_bunordered_reversed" ++ [(set (pc) ++ (if_then_else (unordered (match_operand 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"bcs\\t%l0\;bmi\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++; Special pattern to match reversed ORDERED for MAVERICK - UGLY since we need to test for C=0 && N=0 ++(define_insn "*arm_bordered_reversed" ++ [(set (pc) ++ (if_then_else (ordered (match_operand 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"bcs\\t.+12\;bmi\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) + + (define_insn "*arm_cond_branch_reversed" + [(set (pc) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-compare.patch b/packages/gcc/gcc-4.2.4/arm-crunch-compare.patch new file mode 100644 index 0000000000..ccbb4854c3 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-compare.patch @@ -0,0 +1,400 @@ +diff -urN gcc-4.1.2/gcc/config/arm/arm.c ../../../../old-tmp/work/arm-oabi-angstrom-linux/gcc-cross-4.1.2-backup/gcc-4.1.2/gcc/config/arm/arm.c +--- gcc-4.1.2/gcc/config/arm/arm.c 2007-05-31 12:39:48.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-05-29 17:19:38.000000000 +1000 +@@ -11427,26 +11427,53 @@ + /* These encodings assume that AC=1 in the FPA system control + byte. This allows us to handle all cases except UNEQ and + LTGT. */ +- switch (comp_code) +- { +- case GE: return ARM_GE; +- case GT: return ARM_GT; +- case LE: return ARM_LS; +- case LT: return ARM_MI; +- case NE: return ARM_NE; +- case EQ: return ARM_EQ; +- case ORDERED: return ARM_VC; +- case UNORDERED: return ARM_VS; +- case UNLT: return ARM_LT; +- case UNLE: return ARM_LE; +- case UNGT: return ARM_HI; +- case UNGE: return ARM_PL; +- /* UNEQ and LTGT do not have a representation. */ +- case UNEQ: /* Fall through. */ +- case LTGT: /* Fall through. */ +- default: gcc_unreachable (); +- } +- ++ if (!TARGET_MAVERICK) ++ { ++ switch (comp_code) ++ { ++ case GE: return ARM_GE; ++ case GT: return ARM_GT; ++ case LE: return ARM_LS; ++ case LT: return ARM_MI; ++ case NE: return ARM_NE; ++ case EQ: return ARM_EQ; ++ case ORDERED: return ARM_VC; ++ case UNORDERED: return ARM_VS; ++ case UNLT: return ARM_LT; ++ case UNLE: return ARM_LE; ++ case UNGT: return ARM_HI; ++ case UNGE: return ARM_PL; ++ /* UNEQ and LTGT do not have a representation. */ ++ case UNEQ: /* Fall through. */ ++ case LTGT: /* Fall through. */ ++ default: gcc_unreachable (); ++ } ++ } ++ else ++ { ++ /* CIRRUS */ ++ switch (comp_code) ++ { ++#if 1 ++ case GT: return ARM_VS; ++ case LE: return ARM_LE; ++ case LT: return ARM_LT; ++ case NE: return ARM_NE; ++ case EQ: return ARM_EQ; ++ case UNLE: return ARM_VC; ++ case UNGT: return ARM_GT; ++ case UNGE: return ARM_GE; ++ case UNEQ: return ARM_PL; ++ case LTGT: return ARM_MI; ++ /* These do not have a representation. */ ++ case GE: /* Fall through. -UNGE wrong atm */ ++ case UNLT: /* Fall through. -LT wrong atm */ ++ case ORDERED: /* Fall through. -AL wrong atm */ ++ case UNORDERED: /* Fall through. -AL wrong atm */ ++#endif ++ default: gcc_unreachable (); ++ } ++ } + case CC_SWPmode: + switch (comp_code) + { +diff -urN gcc-4.1.2/gcc/config/arm/arm.md ../../../../old-tmp/work/arm-oabi-angstrom-linux/gcc-cross-4.1.2-backup/gcc-4.1.2/gcc/config/arm/arm.md +--- gcc-4.1.2/gcc/config/arm/arm.md 2007-05-31 12:39:48.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-05-29 15:17:18.000000000 +1000 +@@ -6952,10 +6952,11 @@ + "operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);" + ) + ++;broken on cirrus + (define_expand "bge" + [(set (pc) + (if_then_else (ge (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM" ++ "TARGET_ARM" ;; && !(TARGET_HARD_FLOAT && TARGET_MAVERICK) + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" +@@ -6988,6 +6989,7 @@ + "operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);" + ) + ++; broken on cirrus? + (define_expand "bgeu" + [(set (pc) + (if_then_else (geu (match_dup 1) (const_int 0)) +@@ -7031,14 +7033,15 @@ + (if_then_else (ungt (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGT, arm_compare_op0, arm_compare_op1);" + ) + +-(define_expand "bunlt" ++; broken for cirrus ++(define_expand "bunlt" + [(set (pc) + (if_then_else (unlt (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0, arm_compare_op1);" +@@ -7049,7 +7052,7 @@ + (if_then_else (unge (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGE, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7058,7 +7061,7 @@ + (if_then_else (unle (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLE, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7069,7 +7072,7 @@ + (if_then_else (uneq (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ;; || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNEQ, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7078,7 +7081,7 @@ + (if_then_else (ltgt (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ;; || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (LTGT, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7086,7 +7089,7 @@ + ;; Patterns to match conditional branch insns. + ;; + +-; Special pattern to match UNEQ. ++; Special pattern to match UNEQ for FPA and VFP. + (define_insn "*arm_buneq" + [(set (pc) + (if_then_else (uneq (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7102,7 +7105,7 @@ + (set_attr "length" "8")] + ) + +-; Special pattern to match LTGT. ++; Special pattern to match LTGT for FPA and VFP. + (define_insn "*arm_bltgt" + [(set (pc) + (if_then_else (ltgt (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7118,6 +7121,38 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match GE for MAVERICK. ++(define_insn "*arm_bge" ++ [(set (pc) ++ (if_then_else (ge (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t%l0\;bvs\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++; Special pattern to match UNLT for MAVERICK - UGLY since we need to test for Z=0 && V=0. ++(define_insn "*arm_bunlt" ++ [(set (pc) ++ (if_then_else (unlt (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t.+12\;bvs\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) ++ + (define_insn "*arm_cond_branch" + [(set (pc) + (if_then_else (match_operator 1 "arm_comparison_operator" +@@ -7137,7 +7172,7 @@ + (set_attr "type" "branch")] + ) + +-; Special pattern to match reversed UNEQ. ++; Special pattern to match reversed UNEQ for FPA and VFP. + (define_insn "*arm_buneq_reversed" + [(set (pc) + (if_then_else (uneq (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7153,7 +7188,7 @@ + (set_attr "length" "8")] + ) + +-; Special pattern to match reversed LTGT. ++; Special pattern to match reversed LTGT for FPA and VFP. + (define_insn "*arm_bltgt_reversed" + [(set (pc) + (if_then_else (ltgt (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7169,6 +7204,39 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match reversed GE for MAVERICK - UGLY since we need to tst for Z=0 && N=0. ++(define_insn "*arm_bge_reversed" ++ [(set (pc) ++ (if_then_else (ge (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t.+12\;bvs\\t.+8\;b\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "12")] ++) ++ ++; Special pattern to match reversed UNLT for MAVERICK. ++(define_insn "*arm_bunlt_reversed" ++ [(set (pc) ++ (if_then_else (unlt (match_operand:CCFP 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t%l0\;bvs\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++ + (define_insn "*arm_cond_branch_reversed" + [(set (pc) + (if_then_else (match_operator 1 "arm_comparison_operator" +@@ -7220,8 +7288,9 @@ + "operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);" + ) + ++;; broken for cirrus - definitely + (define_expand "sge" + [(set (match_operand:SI 0 "s_register_operand" "") + (ge:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM" ++ "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" +@@ -7227,6 +7296,14 @@ + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" + ) + ++;;; DO NOT add patterns for SGE these can not be represented with MAVERICK ++; (define_expand "sge" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (ge:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && (TARGET_MAVERICK)" ++; "gcc_unreachable ();" ++; ) ++ + (define_expand "slt" + [(set (match_operand:SI 0 "s_register_operand" "") + (lt:SI (match_dup 1) (const_int 0)))] +@@ -7248,6 +7325,7 @@ + "operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);" + ) + ++;; broken for cirrus - maybe + (define_expand "sgeu" + [(set (match_operand:SI 0 "s_register_operand" "") + (geu:SI (match_dup 1) (const_int 0)))] +@@ -7255,6 +7333,14 @@ + "operands[1] = arm_gen_compare_reg (GEU, arm_compare_op0, arm_compare_op1);" + ) + ++;;; DO NOT add patterns for SGEU these may not be represented with MAVERICK? ++; (define_expand "sgeu" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (ge:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && (TARGET_MAVERICK)" ++; "gcc_unreachable ();" ++; ) ++ + (define_expand "sltu" + [(set (match_operand:SI 0 "s_register_operand" "") + (ltu:SI (match_dup 1) (const_int 0)))] +@@ -7281,7 +7367,7 @@ + (define_expand "sungt" + [(set (match_operand:SI 0 "s_register_operand" "") + (ungt:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGT, arm_compare_op0, + arm_compare_op1);" + ) +@@ -7289,23 +7375,32 @@ + (define_expand "sunge" + [(set (match_operand:SI 0 "s_register_operand" "") + (unge:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGE, arm_compare_op0, + arm_compare_op1);" + ) + ++; broken for cirrus + (define_expand "sunlt" + [(set (match_operand:SI 0 "s_register_operand" "") + (unlt:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + "operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0, + arm_compare_op1);" + ) + ++;;; DO NOT add patterns for SUNLT these can't be represented with MAVERICK ++; (define_expand "sunlt" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (unlt:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && (TARGET_MAVERICK)" ++; "gcc_unreachable ();" ++; ) ++ + (define_expand "sunle" + [(set (match_operand:SI 0 "s_register_operand" "") + (unle:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLE, arm_compare_op0, + arm_compare_op1);" + ) +@@ -7371,7 +7466,7 @@ + enum rtx_code code = GET_CODE (operands[1]); + rtx ccreg; + +- if (code == UNEQ || code == LTGT) ++ if ((code == UNEQ || code == LTGT) || (TARGET_MAVERICK && (code == GE || code == UNLT || code == ORDERED || code == UNORDERED))) + FAIL; + + ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1); +@@ -7390,7 +7485,8 @@ + enum rtx_code code = GET_CODE (operands[1]); + rtx ccreg; + +- if (code == UNEQ || code == LTGT) ++ if ((code == UNEQ || code == LTGT) || (TARGET_MAVERICK && (code == GE || code == UNLT || code == ORDERED || code == UNORDERED))) ++ + FAIL; + + /* When compiling for SOFT_FLOAT, ensure both arms are in registers. +@@ -7409,13 +7505,13 @@ + (if_then_else:DF (match_operand 1 "arm_comparison_operator" "") + (match_operand:DF 2 "s_register_operand" "") + (match_operand:DF 3 "arm_float_add_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + " + { + enum rtx_code code = GET_CODE (operands[1]); + rtx ccreg; + +- if (code == UNEQ || code == LTGT) ++ if ((code == UNEQ || code == LTGT) || (TARGET_MAVERICK && (code==GE || code == UNLT || code == ORDERED || code == UNORDERED))) + FAIL; + + ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1); diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-compare.patch-z-eq b/packages/gcc/gcc-4.2.4/arm-crunch-compare.patch-z-eq new file mode 100644 index 0000000000..bc40411be4 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-compare.patch-z-eq @@ -0,0 +1,400 @@ +diff -urN gcc-4.1.2/gcc/config/arm/arm.c ../../../../old-tmp/work/arm-oabi-angstrom-linux/gcc-cross-4.1.2-backup/gcc-4.1.2/gcc/config/arm/arm.c +--- gcc-4.1.2/gcc/config/arm/arm.c 2007-05-31 12:39:48.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-05-29 17:19:38.000000000 +1000 +@@ -11427,26 +11427,53 @@ + /* These encodings assume that AC=1 in the FPA system control + byte. This allows us to handle all cases except UNEQ and + LTGT. */ +- switch (comp_code) +- { +- case GE: return ARM_GE; +- case GT: return ARM_GT; +- case LE: return ARM_LS; +- case LT: return ARM_MI; +- case NE: return ARM_NE; +- case EQ: return ARM_EQ; +- case ORDERED: return ARM_VC; +- case UNORDERED: return ARM_VS; +- case UNLT: return ARM_LT; +- case UNLE: return ARM_LE; +- case UNGT: return ARM_HI; +- case UNGE: return ARM_PL; +- /* UNEQ and LTGT do not have a representation. */ +- case UNEQ: /* Fall through. */ +- case LTGT: /* Fall through. */ +- default: gcc_unreachable (); +- } +- ++ if (!TARGET_MAVERICK) ++ { ++ switch (comp_code) ++ { ++ case GE: return ARM_GE; ++ case GT: return ARM_GT; ++ case LE: return ARM_LS; ++ case LT: return ARM_MI; ++ case NE: return ARM_NE; ++ case EQ: return ARM_EQ; ++ case ORDERED: return ARM_VC; ++ case UNORDERED: return ARM_VS; ++ case UNLT: return ARM_LT; ++ case UNLE: return ARM_LE; ++ case UNGT: return ARM_HI; ++ case UNGE: return ARM_PL; ++ /* UNEQ and LTGT do not have a representation. */ ++ case UNEQ: /* Fall through. */ ++ case LTGT: /* Fall through. */ ++ default: gcc_unreachable (); ++ } ++ } ++ else ++ { ++ /* CIRRUS */ ++ switch (comp_code) ++ { ++#if 1 ++ case GT: return ARM_VS; ++ case LE: return ARM_LE; ++ case LT: return ARM_LT; ++ case NE: return ARM_NE; ++ case EQ: return ARM_EQ; ++ case UNLE: return ARM_VC; ++ case UNGT: return ARM_GT; ++ case UNGE: return ARM_GE; ++ case UNEQ: return ARM_PL; ++ case LTGT: return ARM_MI; ++ /* These do not have a representation. */ ++ case GE: /* Fall through. -UNGE wrong atm */ ++ case UNLT: /* Fall through. -LT wrong atm */ ++ case ORDERED: /* Fall through. -AL wrong atm */ ++ case UNORDERED: /* Fall through. -AL wrong atm */ ++#endif ++ default: gcc_unreachable (); ++ } ++ } + case CC_SWPmode: + switch (comp_code) + { +diff -urN gcc-4.1.2/gcc/config/arm/arm.md ../../../../old-tmp/work/arm-oabi-angstrom-linux/gcc-cross-4.1.2-backup/gcc-4.1.2/gcc/config/arm/arm.md +--- gcc-4.1.2/gcc/config/arm/arm.md 2007-05-31 12:39:48.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-05-29 15:17:18.000000000 +1000 +@@ -6952,10 +6952,11 @@ + "operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);" + ) + ++;broken on cirrus + (define_expand "bge" + [(set (pc) + (if_then_else (ge (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM" ++ "TARGET_ARM" + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" +@@ -6988,6 +6989,7 @@ + "operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);" + ) + ++; broken on cirrus? + (define_expand "bgeu" + [(set (pc) + (if_then_else (geu (match_dup 1) (const_int 0)) +@@ -7031,14 +7033,15 @@ + (if_then_else (ungt (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGT, arm_compare_op0, arm_compare_op1);" + ) + +-(define_expand "bunlt" ++; broken for cirrus ++(define_expand "bunlt" + [(set (pc) + (if_then_else (unlt (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0, arm_compare_op1);" +@@ -7049,7 +7052,7 @@ + (if_then_else (unge (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGE, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7058,7 +7061,7 @@ + (if_then_else (unle (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLE, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7069,7 +7072,7 @@ + (if_then_else (uneq (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ;; || TARGET_MAVERICK + "operands[1] = arm_gen_compare_reg (UNEQ, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7078,7 +7081,7 @@ + (if_then_else (ltgt (match_dup 1) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ;; || TARGET_MAVERICK + "operands[1] = arm_gen_compare_reg (LTGT, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7086,7 +7089,7 @@ + ;; Patterns to match conditional branch insns. + ;; + +-; Special pattern to match UNEQ. ++; Special pattern to match UNEQ for FPA and VFP. + (define_insn "*arm_buneq" + [(set (pc) + (if_then_else (uneq (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7102,7 +7105,7 @@ + (set_attr "length" "8")] + ) + +-; Special pattern to match LTGT. ++; Special pattern to match LTGT for FPA and VFP. + (define_insn "*arm_bltgt" + [(set (pc) + (if_then_else (ltgt (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7118,6 +7121,38 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match GE for MAVERICK. ++(define_insn "*arm_bge" ++ [(set (pc) ++ (if_then_else (ge (match_operand 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t%l0\;bvs\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++; Special pattern to match UNLT for MAVERICK. ++(define_insn "*arm_bunlt" ++ [(set (pc) ++ (if_then_else (unlt (match_operand 1 "cc_register" "") (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "TARGET_ARM && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"bne\\t%l0\;bvc\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ + (define_insn "*arm_cond_branch" + [(set (pc) + (if_then_else (match_operator 1 "arm_comparison_operator" +@@ -7137,7 +7172,7 @@ + (set_attr "type" "branch")] + ) + +-; Special pattern to match reversed UNEQ. ++; Special pattern to match reversed UNEQ for FPA and VFP. + (define_insn "*arm_buneq_reversed" + [(set (pc) + (if_then_else (uneq (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7153,7 +7188,7 @@ + (set_attr "length" "8")] + ) + +-; Special pattern to match reversed LTGT. ++; Special pattern to match reversed LTGT for FPA and VFP. + (define_insn "*arm_bltgt_reversed" + [(set (pc) + (if_then_else (ltgt (match_operand 1 "cc_register" "") (const_int 0)) +@@ -7169,6 +7204,39 @@ + (set_attr "length" "8")] + ) + ++; Special pattern to match reversed GE for MAVERICK. ++(define_insn "*arm_bge_reversed" ++ [(set (pc) ++ (if_then_else (ge (match_operand 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"bne\\t%l0\;bvc\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++; Special pattern to match reversed UNLT for MAVERICK. ++(define_insn "*arm_bunlt_reversed" ++ [(set (pc) ++ (if_then_else (unlt (match_operand 1 "cc_register" "") (const_int 0)) ++ (pc) ++ (label_ref (match_operand 0 "" ""))))] ++ "TARGET_ARM && (TARGET_MAVERICK)" ++ "* ++ gcc_assert (!arm_ccfsm_state); ++ ++ return \"beq\\t%l0\;bvs\\t%l0\"; ++ " ++ [(set_attr "conds" "jump_clob") ++ (set_attr "length" "8")] ++) ++ ++ + (define_insn "*arm_cond_branch_reversed" + [(set (pc) + (if_then_else (match_operator 1 "arm_comparison_operator" +@@ -7220,8 +7288,9 @@ + "operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);" + ) + ++;; broken for cirrus - definitely + (define_expand "sge" + [(set (match_operand:SI 0 "s_register_operand" "") + (ge:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM" ++ "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" +@@ -7227,6 +7296,14 @@ + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" + ) + ++;;; DO NOT add patterns for SGE these can not be represented with MAVERICK ++; (define_expand "sge" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (ge:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && (TARGET_MAVERICK)" ++; "gcc_unreachable ();" ++; ) ++ + (define_expand "slt" + [(set (match_operand:SI 0 "s_register_operand" "") + (lt:SI (match_dup 1) (const_int 0)))] +@@ -7248,6 +7325,7 @@ + "operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);" + ) + ++;; broken for cirrus - maybe + (define_expand "sgeu" + [(set (match_operand:SI 0 "s_register_operand" "") + (geu:SI (match_dup 1) (const_int 0)))] +@@ -7255,6 +7333,14 @@ + "operands[1] = arm_gen_compare_reg (GEU, arm_compare_op0, arm_compare_op1);" + ) + ++;;; DO NOT add patterns for SGEU these may not be represented with MAVERICK? ++; (define_expand "sgeu" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (ge:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && (TARGET_MAVERICK)" ++; "gcc_unreachable ();" ++; ) ++ + (define_expand "sltu" + [(set (match_operand:SI 0 "s_register_operand" "") + (ltu:SI (match_dup 1) (const_int 0)))] +@@ -7281,7 +7367,7 @@ + (define_expand "sungt" + [(set (match_operand:SI 0 "s_register_operand" "") + (ungt:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGT, arm_compare_op0, + arm_compare_op1);" + ) +@@ -7289,23 +7375,32 @@ + (define_expand "sunge" + [(set (match_operand:SI 0 "s_register_operand" "") + (unge:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNGE, arm_compare_op0, + arm_compare_op1);" + ) + ++; broken for cirrus + (define_expand "sunlt" + [(set (match_operand:SI 0 "s_register_operand" "") + (unlt:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + "operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0, + arm_compare_op1);" + ) + ++;;; DO NOT add patterns for SUNLT these can't be represented with MAVERICK ++; (define_expand "sunlt" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (unlt:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && (TARGET_MAVERICK)" ++; "gcc_unreachable ();" ++; ) ++ + (define_expand "sunle" + [(set (match_operand:SI 0 "s_register_operand" "") + (unle:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLE, arm_compare_op0, + arm_compare_op1);" + ) +@@ -7371,7 +7466,7 @@ + enum rtx_code code = GET_CODE (operands[1]); + rtx ccreg; + +- if (code == UNEQ || code == LTGT) ++ if (code == UNEQ || code == LTGT || code == GE || code == UNLT || code == ORDERED || code == UNORDERED) + FAIL; + + ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1); +@@ -7390,7 +7485,8 @@ + enum rtx_code code = GET_CODE (operands[1]); + rtx ccreg; + +- if (code == UNEQ || code == LTGT) ++ if (code == UNEQ || code == LTGT || code == GE || code == UNLT || code == ORDERED || code == UNORDERED) ++ + FAIL; + + /* When compiling for SOFT_FLOAT, ensure both arms are in registers. +@@ -7409,13 +7505,13 @@ + (if_then_else:DF (match_operand 1 "arm_comparison_operator" "") + (match_operand:DF 2 "s_register_operand" "") + (match_operand:DF 3 "arm_float_add_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + " + { + enum rtx_code code = GET_CODE (operands[1]); + rtx ccreg; + +- if (code == UNEQ || code == LTGT) ++ if (code == UNEQ || code == LTGT || code == GE || code == UNLT || code == ORDERED || code == UNORDERED) + FAIL; + + ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1); diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-dominance.patch b/packages/gcc/gcc-4.2.4/arm-crunch-dominance.patch new file mode 100644 index 0000000000..517ca8d80e --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-dominance.patch @@ -0,0 +1,12 @@ +--- gcc-4.1.2/gcc/config/arm/arm.c-original 2007-06-13 11:50:10.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-06-13 11:50:56.000000000 +1000 +@@ -6556,6 +6556,9 @@ + enum rtx_code cond1, cond2; + int swapped = 0; + ++ if (TARGET_MAVERICK) // Simple hack for MAVERICK ++ return CCmode; ++ + /* Currently we will probably get the wrong result if the individual + comparisons are not simple. This also ensures that it is safe to + reverse a comparison if necessary. */ diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754-div.patch b/packages/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754-div.patch new file mode 100644 index 0000000000..940f4a65ae --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754-div.patch @@ -0,0 +1,139 @@ +--- gcc-4.1.2/gcc/config/arm/ieee754-df-original.S 2007-06-25 10:22:06.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/ieee754-df.S 2007-06-25 10:27:17.000000000 +1000 +@@ -717,6 +717,10 @@ + cmn r4, #(53 + 1) + movle xl, #0 + bicle xh, xh, #0x7fffffff ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" le + + @ Find out proper shift value. +@@ -738,6 +742,10 @@ + adc xh, r2, xh, lsr r4 + orrs lr, lr, r3, lsl #1 + biceq xl, xl, r3, lsr #31 ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" + + @ shift result right of 21 to 31 bits, or left 11 to 1 bits after +@@ -752,6 +760,10 @@ + adc xh, xh, #0 + orrs lr, lr, r3, lsl #1 + biceq xl, xl, r3, lsr #31 ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" + + @ Shift value right of 32 to 64 bits, or 0 to 32 bits after a switch +@@ -766,6 +778,10 @@ + add xl, xl, r3, lsr #31 + orrs lr, lr, r3, lsl #1 + biceq xl, xl, r3, lsr #31 ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" + + @ One or both arguments are denormalized. +@@ -808,6 +824,10 @@ + eor xh, xh, yh + bic xh, xh, #0x7fffffff + mov xl, #0 ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" + + 1: @ One or both args are INF or NAN. +@@ -837,12 +857,20 @@ + orr xh, xh, #0x7f000000 + orr xh, xh, #0x00f00000 + mov xl, #0 ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" + + @ Return a quiet NAN. + LSYM(Lml_n): + orr xh, xh, #0x7f000000 + orr xh, xh, #0x00f80000 ++#ifdef __MAVERICK__ ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM "r4, r5, r6" + + FUNC_END aeabi_dmul +--- gcc-4.1.2/gcc/config/arm/ieee754-sf-original.S 2007-06-25 10:18:52.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/ieee754-sf.S 2007-06-25 10:40:25.000000000 +1000 +@@ -518,6 +518,9 @@ + @ Check if denormalized result is possible, otherwise return signed 0. + cmn r2, #(24 + 1) + bicle r0, r0, #0x7fffffff ++#ifdef __MAVERICK__ ++ cfmvsr mvf0, r0 ++#endif + RETc(le) + + @ Shift value right, round, etc. +@@ -530,6 +533,9 @@ + adc r0, r0, #0 + orrs r3, r3, ip, lsl #1 + biceq r0, r0, ip, lsr #31 ++#ifdef __MAVERICK__ ++ cfmvsr mvf0, r0 ++#endif + RET + + @ One or both arguments are denormalized. +@@ -567,6 +573,9 @@ + LSYM(Lml_z): + eor r0, r0, r1 + bic r0, r0, #0x7fffffff ++#ifdef __MAVERICK__ ++ cfmvsr mvf0, r0 ++#endif + RET + + 1: @ One or both args are INF or NAN. +@@ -595,12 +604,18 @@ + and r0, r0, #0x80000000 + orr r0, r0, #0x7f000000 + orr r0, r0, #0x00800000 ++#ifdef __MAVERICK__ ++ cfmvsr mvf0, r0 ++#endif + RET + + @ Return a quiet NAN. + LSYM(Lml_n): + orr r0, r0, #0x7f000000 + orr r0, r0, #0x00c00000 ++#ifdef __MAVERICK__ ++ cfmvsr mvf0, r0 ++#endif + RET + + FUNC_END aeabi_fmul +@@ -677,6 +692,9 @@ + adds r2, r2, #127 + rsbgts r3, r2, #255 + orrgt r0, r0, r2, lsl #23 ++#ifdef __MAVERICK__ ++ cfmvsr mvf0, r0 ++#endif + RETc(gt) + + orr r0, r0, #0x00800000 diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754.patch b/packages/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754.patch new file mode 100644 index 0000000000..e4929fa20e --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-eabi-ieee754.patch @@ -0,0 +1,100 @@ +--- ../gcc-cross-4.1.2-r4-unpatched/gcc-4.1.2/gcc/config/arm/ieee754-df.S 2007-06-07 13:06:52.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/ieee754-df.S 2007-06-07 13:15:49.000000000 +1000 +@@ -42,8 +42,9 @@ + + + @ For FPA, float words are always big-endian. ++@ For MAVERICK, float words are always little-endian. + @ For VFP, floats words follow the memory system mode. +-#if defined(__VFP_FP__) && !defined(__ARMEB__) ++#if ((defined(__VFP_FP__) && !defined(__ARMEB__)) || defined(__MAVERICK__)) + #define xl r0 + #define xh r1 + #define yl r2 +@@ -451,8 +452,13 @@ + + orrs r2, r0, r1 + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) ++#if defined (__FPA_FP__) + mvfeqd f0, #0.0 + #endif ++#if defined (__MAVERICK__) ++ cfstrd mvd0, #0.0 ++#endif ++#endif + RETc(eq) + + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) +@@ -473,8 +479,13 @@ + + orrs r2, r0, r1 + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) ++#if defined (__FPA_FP__) + mvfeqd f0, #0.0 + #endif ++#if defined (__MAVERICK__) ++ cfstrd mvd0, #0.0 ++#endif ++#endif + RETc(eq) + + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) +@@ -526,8 +537,14 @@ + @ Legacy code expects the result to be returned in f0. Copy it + @ there as well. + LSYM(f0_ret): ++#if defined (__FPA_FP__) + stmfd sp!, {r0, r1} + ldfd f0, [sp], #8 ++#endif ++#if defined (__MAVERICK__) ++ cfmvdlr mvd0, xl ++ cfmvdhr mvd0, xh ++#endif + RETLDM + + #endif +--- ../gcc-cross-4.1.2-r4-unpatched/gcc-4.1.2/gcc/config/arm/ieee754-sf.S 2007-06-07 13:06:52.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/ieee754-sf.S 2007-06-07 13:21:43.000000000 +1000 +@@ -302,8 +302,13 @@ + + orrs r2, r0, r1 + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) ++#if defined (__FPA_FP__) + mvfeqs f0, #0.0 + #endif ++#if defined (__MAVERICK__) ++ cfmvsr mvf0, #0.0 ++#endif ++#endif + RETc(eq) + + mov r3, #0 +@@ -314,8 +319,13 @@ + + orrs r2, r0, r1 + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) ++#if defined (__FPA_FP__) + mvfeqs f0, #0.0 + #endif ++#if defined (__MAVERICK__) ++ cfmvsr mvf0, #0.0 ++#endif ++#endif + RETc(eq) + + ands r3, ah, #0x80000000 @ sign bit in r3 +@@ -387,8 +397,13 @@ + #if !defined (__VFP_FP__) && !defined(__SOFTFP__) + + LSYM(f0_ret): ++#if defined (__FPA_FP__) + str r0, [sp, #-4]! + ldfs f0, [sp], #4 ++#endif ++#if defined (__MAVERICK__) ++ cfmvsr mvf0, r0 ++#endif + RETLDM + + #endif diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-eabi.patch b/packages/gcc/gcc-4.2.4/arm-crunch-eabi.patch new file mode 100644 index 0000000000..f8992ed499 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-eabi.patch @@ -0,0 +1,64 @@ +--- /home/hwilliams/original/gcc-4.1.2/gcc/config/arm/t-linux-eabi 2005-10-10 11:04:31.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/t-linux-eabi 2007-05-15 13:53:05.000000000 +1000 +@@ -1,11 +1,21 @@ + # These functions are included in shared libraries. + TARGET_LIBGCC2_CFLAGS = -fPIC ++TARGET_LIBGCC2_CFLAGS += -mcpu=ep9312 -mfpu=maverick ++LIBGCC2_DEBUG_CFLAGS = -g0 + + # We do not build a Thumb multilib for Linux because the definition of + # CLEAR_INSN_CACHE in linux-gas.h does not work in Thumb mode. + MULTILIB_OPTIONS = + MULTILIB_DIRNAMES = + ++LIB1ASMSRC = arm/lib1funcs.asm ++LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ ++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ ++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ ++ _fixsfsi _fixunssfsi ++ ++CRTSTUFF_T_CFLAGS += -mcpu=ep9312 -mfpu=maverick ++ + # Use a version of div0 which raises SIGFPE. + LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx + +diff -ruN arm/elf.h gcc-3.4.3/gcc/config/arm/elf.h +--- ../gcc-4.1.2-orig/gcc/config/arm/elf.h 2004-02-24 16:25:22.000000000 +0200 ++++ gcc-4.1.2/gcc/config/arm/elf.h 2005-02-10 00:31:28.000000000 +0200 +@@ -46,7 +46,7 @@ + + #ifndef SUBTARGET_ASM_FLOAT_SPEC + #define SUBTARGET_ASM_FLOAT_SPEC "\ +-%{mapcs-float:-mfloat}" ++%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa} %{mcpu=ep9312:-mfpu=maverick}" + #endif + + #ifndef ASM_SPEC +diff -ruN t-linux gcc-4.1.2/gcc/config/arm/t-linux +--- t-linux 2007-05-09 16:32:28.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/t-linux 2007-05-25 11:02:17.000000000 +1000 +@@ -1,19 +1,22 @@ + # Just for these, we omit the frame pointer since it makes such a big + # difference. It is then pointless adding debugging. + TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC ++TARGET_LIBGCC2_CFLAGS += -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -D__MAVERICK__ + LIBGCC2_DEBUG_CFLAGS = -g0 + + LIB1ASMSRC = arm/lib1funcs.asm + LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ +- _call_via_rX \ +- _fixsfsi _fixunssfsi _floatdidf _floatdisf ++ _fixsfsi _fixunssfsi + + # MULTILIB_OPTIONS = mhard-float/msoft-float + # MULTILIB_DIRNAMES = hard-float soft-float + + # EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o + ++# EXTRA_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o ++CRTSTUFF_T_CFLAGS += -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -D__MAVERICK__ ++ + # LIBGCC = stmp-multilib + # INSTALL_LIBGCC = install-multilib diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-floatsi-disable-single.patch b/packages/gcc/gcc-4.2.4/arm-crunch-floatsi-disable-single.patch new file mode 100644 index 0000000000..cdd52244a6 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-floatsi-disable-single.patch @@ -0,0 +1,38 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-cfcvt 2007-06-25 12:12:39.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-25 12:16:13.000000000 +1000 +@@ -301,13 +301,14 @@ + ) + + ;; Convert Cirrus-SI to Cirrus-SF ++; appears to be buggy + (define_insn "cirrus_floatsisf2" + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (float:SF (match_operand:SI 1 "s_register_operand" "r"))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmv64lr%?\\t%Z2, %1\;cfcvt32s%?\\t%V0, %Y2" + [(set_attr "length" "8") + (set_attr "cirrus" "move")] + ) + +--- gcc-4.1.2/gcc/config/arm/arm.md-cfcvt 2007-06-25 12:16:53.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-25 12:18:20.000000000 +1000 +@@ -3125,14 +3125,15 @@ + + ;; Fixed <--> Floating conversion insns + ++;; Maverick Crunch floatsisf2 is buggy - see cirrus.md + (define_expand "floatsisf2" + [(set (match_operand:SF 0 "s_register_operand" "") + (float:SF (match_operand:SI 1 "s_register_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + emit_insn (gen_cirrus_floatsisf2 (operands[0], operands[1])); + DONE; + } + ") diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-floatsi-disable.patch b/packages/gcc/gcc-4.2.4/arm-crunch-floatsi-disable.patch new file mode 100644 index 0000000000..aa54ec3e04 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-floatsi-disable.patch @@ -0,0 +1,61 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-cfcvt 2007-06-25 12:12:39.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-25 12:16:13.000000000 +1000 +@@ -301,21 +301,23 @@ + ) + + ;; Convert Cirrus-SI to Cirrus-SF ++; appears to be buggy + (define_insn "cirrus_floatsisf2" + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (float:SF (match_operand:SI 1 "s_register_operand" "r"))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmv64lr%?\\t%Z2, %1\;cfcvt32s%?\\t%V0, %Y2" + [(set_attr "length" "8") + (set_attr "cirrus" "move")] + ) + ++;appears to be buggy + (define_insn "cirrus_floatsidf2" + [(set (match_operand:DF 0 "cirrus_fp_register" "=v") + (float:DF (match_operand:SI 1 "s_register_operand" "r"))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfmv64lr%?\\t%Z2, %1\;cfcvt32d%?\\t%V0, %Y2" + [(set_attr "length" "8") + (set_attr "cirrus" "move")] +--- gcc-4.1.2/gcc/config/arm/arm.md-cfcvt 2007-06-25 12:16:53.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-25 12:18:20.000000000 +1000 +@@ -3125,24 +3125,26 @@ + + ;; Fixed <--> Floating conversion insns + ++;; Maverick Crunch floatsisf2 is buggy - see cirrus.md + (define_expand "floatsisf2" + [(set (match_operand:SF 0 "s_register_operand" "") + (float:SF (match_operand:SI 1 "s_register_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + emit_insn (gen_cirrus_floatsisf2 (operands[0], operands[1])); + DONE; + } + ") + ++;; Maverick Crunch floatsidf2 is buggy - see cirrus.md + (define_expand "floatsidf2" + [(set (match_operand:DF 0 "s_register_operand" "") + (float:DF (match_operand:SI 1 "s_register_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + " +- if (TARGET_MAVERICK) ++ if (TARGET_MAVERICK && 0) + { + emit_insn (gen_cirrus_floatsidf2 (operands[0], operands[1])); + DONE; diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-floatunsidf.patch b/packages/gcc/gcc-4.2.4/arm-crunch-floatunsidf.patch new file mode 100644 index 0000000000..2fe2254db9 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-floatunsidf.patch @@ -0,0 +1,37 @@ +--- gcc-4.1.2/gcc/config/arm/ieee754-df-original.S 2007-06-25 14:05:35.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/ieee754-df.S 2007-06-25 14:08:03.000000000 +1000 +@@ -382,6 +382,8 @@ + FUNC_END aeabi_dadd + FUNC_END adddf3 + ++#ifndef __MAVERICK__ /* THIS IS A BAD HACK */ ++ + ARM_FUNC_START floatunsidf + ARM_FUNC_ALIAS aeabi_ui2d floatunsidf + +@@ -401,8 +403,14 @@ + FUNC_END aeabi_ui2d + FUNC_END floatunsidf + ++#endif ++ + ARM_FUNC_START floatsidf + ARM_FUNC_ALIAS aeabi_i2d floatsidf ++#ifdef __MAVERICK__ /* THIS IS A BAD HACK */ ++ARM_FUNC_ALIAS floatunsidf floatsidf ++ARM_FUNC_ALIAS aeabi_ui2d floatsidf ++#endif + + teq r0, #0 + moveq r1, #0 +@@ -418,6 +426,10 @@ + mov xh, #0 + b LSYM(Lad_l) + ++#ifdef __MAVERICK__ /* THIS IS A BAD HACK */ ++ FUNC_END aeabi_ui2d floatsidf ++ FUNC_END floatunsidf floatsidf ++#endif + FUNC_END aeabi_i2d + FUNC_END floatsidf + diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-fp_consts.patch b/packages/gcc/gcc-4.2.4/arm-crunch-fp_consts.patch new file mode 100644 index 0000000000..5f289bbebe --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-fp_consts.patch @@ -0,0 +1,13 @@ +--- gcc-4.1.2/gcc/config/arm/arm.c-original 2007-06-12 16:17:14.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-06-12 16:17:28.000000000 +1000 +@@ -5218,7 +5218,9 @@ + int i; + REAL_VALUE_TYPE r; + ++ if (TARGET_MAVERICK) ++ fp_consts_inited = 0; +- if (TARGET_VFP) ++ else if (TARGET_VFP) + fp_consts_inited = 1; + else + fp_consts_inited = 8; diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-neg.patch b/packages/gcc/gcc-4.2.4/arm-crunch-neg.patch new file mode 100644 index 0000000000..f14ae0190e --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-neg.patch @@ -0,0 +1,30 @@ +WARNING: adding this patch causes copysign1.c and mzero3.c to fail... +diff -urN gcc-4.1.2/gcc/config/arm/arm.md-original gcc-4.1.2/gcc/config/arm/arm.md +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-12 12:48:14.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-12 12:49:53.000000000 +1000 +@@ -2985,14 +2985,14 @@ + (define_expand "negsf2" + [(set (match_operand:SF 0 "s_register_operand" "") + (neg:SF (match_operand:SF 1 "s_register_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "" + ) + + (define_expand "negdf2" + [(set (match_operand:DF 0 "s_register_operand" "") + (neg:DF (match_operand:DF 1 "s_register_operand" "")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "") + + ;; abssi2 doesn't really clobber the condition codes if a different register +@@ -4097,7 +4097,7 @@ + [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, r, r, m") + (match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,r"))] + "TARGET_ARM +- && !(TARGET_HARD_FLOAT && (TARGET_MAVERICK || TARGET_VFP)) ++ && !(TARGET_HARD_FLOAT && (TARGET_MAVERICK || TARGET_VFP || TARGET_MAVERICK)) + && !TARGET_IWMMXT" + "* + switch (which_alternative) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-neg2.patch b/packages/gcc/gcc-4.2.4/arm-crunch-neg2.patch new file mode 100644 index 0000000000..4fd91f3215 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-neg2.patch @@ -0,0 +1,25 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-original 2007-06-12 17:01:24.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-12 17:03:26.000000000 +1000 +@@ -255,18 +256,20 @@ + [(set_attr "cirrus" "normal")] + ) + ++;; appears to be buggy: neg 0 != -0 + (define_insn "*cirrus_negsf2" + [(set (match_operand:SF 0 "cirrus_fp_register" "=v") + (neg:SF (match_operand:SF 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfnegs%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")] + ) + ++;; appears to be buggy: neg 0 != -0 + (define_insn "*cirrus_negdf2" + [(set (match_operand:DF 0 "cirrus_fp_register" "=v") + (neg:DF (match_operand:DF 1 "cirrus_fp_register" "v")))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cfnegd%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")] + ) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-offset.patch b/packages/gcc/gcc-4.2.4/arm-crunch-offset.patch new file mode 100644 index 0000000000..3a40f0d224 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-offset.patch @@ -0,0 +1,20 @@ +--- gcc-4.1.2/gcc/config/arm/arm.c-original 2007-06-12 14:46:20.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-06-12 14:48:06.000000000 +1000 +@@ -3460,7 +3460,7 @@ + + use_ldrd = (TARGET_LDRD + && (mode == DImode +- || (mode == DFmode && (TARGET_SOFT_FLOAT || TARGET_VFP)))); ++ || (mode == DFmode && (TARGET_SOFT_FLOAT || TARGET_MAVERICK || TARGET_VFP)))); + + if (code == POST_INC || code == PRE_DEC + || ((code == PRE_INC || code == POST_DEC) +@@ -3960,7 +3960,7 @@ + /* VFP addressing modes actually allow greater offsets, but for + now we just stick with the lowest common denominator. */ + if (mode == DImode +- || ((TARGET_SOFT_FLOAT || TARGET_VFP) && mode == DFmode)) ++ || ((TARGET_SOFT_FLOAT || TARGET_MAVERICK || TARGET_VFP) && mode == DFmode)) + { + low_n = n & 0x0f; + n &= ~0x0f; diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-predicates.patch b/packages/gcc/gcc-4.2.4/arm-crunch-predicates.patch new file mode 100644 index 0000000000..4841ff8178 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-predicates.patch @@ -0,0 +1,20 @@ +diff -urN gcc-4.1.2/gcc/config/arm/predicates.md ../../../../old-tmp/work/arm-oabi-angstrom-linux/gcc-cross-4.1.2-backup/gcc-4.1.2/gcc/config/arm/predicates.md +--- gcc-4.1.2/gcc/config/arm/predicates.md 2005-09-11 17:38:02.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/predicates.md 2007-05-30 12:15:54.000000000 +1000 +@@ -171,8 +171,14 @@ + (match_code "eq,ne")) + + ;; True for comparisons other than LTGT or UNEQ. ++(define_special_predicate "arm_comparison_operator" ++; (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,unordered,ordered,unlt,unle,unge,ungt")) ;; original - no LTGT or UNEQ ++; (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltgt,ltu,unordered,ordered,uneq,unlt,unle,unge,ungt")) ;; everything? ++;; True for comparisons other than GE, GEU, UNLT, unordered or ordered. - Cirrus Version - must include ge? +-(define_special_predicate "arm_comparison_operator" ++;(define_special_predicate "arm_comparison_operator" +- (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,unordered,ordered,unlt,unle,unge,ungt")) ++(match_code "eq,ne,le,lt,ge,geu,gt,gtu,leu,ltgt,ltu,uneq,unle,unge,ungt")) ;; bad codes removed? ++;(match_code "eq,ne,le,lt,gt,gtu,leu,ltgt,ltu,uneq,unle,unge,ungt")) ;; bad codes removed + ge / geu removed ++ + + (define_special_predicate "minmax_operator" + (and (match_code "smin,smax,umin,umax") diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-predicates2.patch b/packages/gcc/gcc-4.2.4/arm-crunch-predicates2.patch new file mode 100644 index 0000000000..3e01158fe1 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-predicates2.patch @@ -0,0 +1,10 @@ +--- gcc-4.1.2/gcc/config/arm/predicates.md-original 2007-06-13 12:25:35.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/predicates.md 2007-06-13 12:25:42.000000000 +1000 +@@ -206,7 +206,6 @@ + || mode == CC_DEQmode + || mode == CC_DLEmode + || mode == CC_DLTmode +- || mode == CC_DGEmode + || mode == CC_DGTmode + || mode == CC_DLEUmode + || mode == CC_DLTUmode diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-predicates3.patch b/packages/gcc/gcc-4.2.4/arm-crunch-predicates3.patch new file mode 100644 index 0000000000..99e1e6c88c --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-predicates3.patch @@ -0,0 +1,116 @@ +diff -urN ../gcc-cross-4.1.2-r4/gcc-4.1.2/gcc/config/arm/arm.md gcc-4.1.2/gcc/config/arm/arm.md +--- ../gcc-cross-4.1.2-r4/gcc-4.1.2/gcc/config/arm/arm.md 2007-06-14 11:50:53.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-14 11:43:17.000000000 +1000 +@@ -7488,6 +7488,22 @@ + arm_compare_op1);" + ) + ++;(define_expand "suneq" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (uneq:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++; "operands[1] = arm_gen_compare_reg (UNEQ, arm_compare_op0, ++; arm_compare_op1);" ++;) ++ ++;(define_expand "sltgt" ++; [(set (match_operand:SI 0 "s_register_operand" "") ++; (ltgt:SI (match_dup 1) (const_int 0)))] ++; "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_MAVERICK)" ++; "operands[1] = arm_gen_compare_reg (LTGT, arm_compare_op0, ++; arm_compare_op1);" ++;) ++ + ;;; DO NOT add patterns for SUNEQ or SLTGT, these can't be represented with + ;;; simple ARM instructions. + ; +@@ -10284,13 +10284,73 @@ + "TARGET_ARM && arm_arch5e" + "pld\\t%a0") + ++;; Special predication pattern for Maverick Crunch floating-point ++ ++(define_cond_exec ++ [(match_operator 0 "maverick_comparison_operator" ++ [(match_operand:CCFP 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ ++;; Special predication pattern for Maverick Crunch - !CCFP ++ ++(define_cond_exec ++ [(match_operator 0 "arm_comparison_operator" ++ [(match_operand:CC_NOOV 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ ++(define_cond_exec ++ [(match_operator 0 "arm_comparison_operator" ++ [(match_operand:CC_Z 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ ++(define_cond_exec ++ [(match_operator 0 "arm_comparison_operator" ++ [(match_operand:CC_SWP 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ ++(define_cond_exec ++ [(match_operator 0 "arm_comparison_operator" ++ [(match_operand:CC_C 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ ++(define_cond_exec ++ [(match_operator 0 "arm_comparison_operator" ++ [(match_operand:CC_N 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ ++(define_cond_exec ++ [(match_operator 0 "arm_comparison_operator" ++ [(match_operand:CC 1 "cc_register" "") ++ (const_int 0)])] ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "" ++) ++ + ;; General predication pattern + + (define_cond_exec + [(match_operator 0 "arm_comparison_operator" + [(match_operand 1 "cc_register" "") + (const_int 0)])] +- "TARGET_ARM" ++ "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" + "" + ) + +diff -urN ../gcc-cross-4.1.2-r4/gcc-4.1.2/gcc/config/arm/predicates.md gcc-4.1.2/gcc/config/arm/predicates.md +--- ../gcc-cross-4.1.2-r4/gcc-4.1.2/gcc/config/arm/predicates.md 2005-09-11 17:38:02.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/predicates.md 2007-06-14 11:46:13.000000000 +1000 +@@ -172,7 +172,11 @@ + + ;; True for comparisons other than LTGT or UNEQ. + (define_special_predicate "arm_comparison_operator" + (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,unordered,ordered,unlt,unle,unge,ungt")) ++ ++;; True for comparisons other than GE, GEU, UNLT, UNORDERED or ORDERED - TODO add LTGT and UNEQ - needs extra support elsewhere ++(define_special_predicate "maverick_comparison_operator" ++(match_code "eq,ne,le,lt,gt,gtu,leu,ltu,unle,unge,ungt")) + + (define_special_predicate "minmax_operator" + (and (match_code "smin,smax,umin,umax") diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-saveregs.patch b/packages/gcc/gcc-4.2.4/arm-crunch-saveregs.patch new file mode 100644 index 0000000000..531ae86610 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-saveregs.patch @@ -0,0 +1,153 @@ +diff -ruN /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.c gcc-4.1.2/gcc/config/arm/arm.c +--- /home/hwilliams/openembedded/build/tmp/work/ep9312-angstrom-linux-gnueabi/gcc-cross-4.1.2-r0/gcc-4.1.2/gcc/config/arm/arm.c 2007-05-09 16:32:29.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.c 2007-05-15 09:39:41.000000000 +1000 +@@ -426,7 +435,7 @@ + #define FL_STRONG (1 << 8) /* StrongARM */ + #define FL_ARCH5E (1 << 9) /* DSP extensions to v5 */ + #define FL_XSCALE (1 << 10) /* XScale */ +-#define FL_CIRRUS (1 << 11) /* Cirrus/DSP. */ ++#define FL_CIRRUS (1 << 11) /* Cirrus Crunch coprocessor. */ + #define FL_ARCH6 (1 << 12) /* Architecture rel 6. Adds + media instructions. */ + #define FL_VFPV2 (1 << 13) /* Vector Floating Point V2. */ +@@ -490,7 +499,7 @@ + /* Nonzero if this chip is a StrongARM. */ + int arm_tune_strongarm = 0; + +-/* Nonzero if this chip is a Cirrus variant. */ ++/* Nonzero if this chip supports Cirrus Crunch coprocessor. */ + int arm_arch_cirrus = 0; + + /* Nonzero if this chip supports Intel Wireless MMX technology. */ +@@ -1184,7 +1193,8 @@ + else + */ + if (arm_arch_cirrus) +- arm_fpu_arch = FPUTYPE_MAVERICK; ++ /* Cirrus crunch coprocessor still requires soft-float division. */ ++ arm_fpu_arch = FPUTYPE_MAVERICK; + else + arm_fpu_arch = FPUTYPE_FPA_EMU2; + #endif +@@ -1567,6 +1577,9 @@ + if (regs_ever_live[regno] && !call_used_regs[regno]) + return 0; + ++ if (TARGET_MAVERICK) ++ return 0; ++ + if (TARGET_REALLY_IWMMXT) + for (regno = FIRST_IWMMXT_REGNUM; regno <= LAST_IWMMXT_REGNUM; regno++) + if (regs_ever_live[regno] && ! call_used_regs [regno]) +@@ -9775,7 +9886,19 @@ + /* This variable is for the Virtual Frame Pointer, not VFP regs. */ + int vfp_offset = offsets->frame; + +- if (arm_fpu_arch == FPUTYPE_FPA_EMU2) ++ if (arm_fpu_arch == FPUTYPE_MAVERICK) ++ { ++ for (reg = LAST_CIRRUS_FP_REGNUM; reg >= FIRST_CIRRUS_FP_REGNUM; reg--) ++ if (regs_ever_live[reg] && !call_used_regs[reg]) ++ { ++ floats_offset += 8; /* more problems - futaris? */ ++ /* if (TARGET_CIRRUS_D0 || TARGET_CIRRUS_D1) */ ++ asm_fprintf (f, "\tnop\n"); ++ asm_fprintf (f, "\tcfldrd\tmvd%d, [%r, #-%d]\n", ++ reg - FIRST_CIRRUS_FP_REGNUM, FP_REGNUM, floats_offset - vfp_offset); ++ } ++ } ++ else if (arm_fpu_arch == FPUTYPE_FPA_EMU2) + { + for (reg = LAST_FPA_REGNUM; reg >= FIRST_FPA_REGNUM; reg--) + if (regs_ever_live[reg] && !call_used_regs[reg]) +@@ -9924,7 +10047,18 @@ + output_add_immediate (operands); + } + +- if (arm_fpu_arch == FPUTYPE_FPA_EMU2) ++ if (arm_fpu_arch == FPUTYPE_MAVERICK) ++ { /* order changed - futaris */ ++ for (reg = FIRST_CIRRUS_FP_REGNUM; reg <= LAST_CIRRUS_FP_REGNUM; reg++) ++ if (regs_ever_live[reg] && !call_used_regs[reg]) ++ { ++ /* if (TARGET_CIRRUS_D0 || TARGET_CIRRUS_D1) */ ++ asm_fprintf (f, "\tnop\n"); ++ asm_fprintf (f, "\tcfldrd\tmvd%u, [%r], #8\n", ++ reg - FIRST_CIRRUS_FP_REGNUM, SP_REGNUM); ++ } /* reg problems - futaris */ ++ } ++ else if (arm_fpu_arch == FPUTYPE_FPA_EMU2) + { + for (reg = FIRST_FPA_REGNUM; reg <= LAST_FPA_REGNUM; reg++) + if (regs_ever_live[reg] && !call_used_regs[reg]) +@@ -10429,9 +10563,19 @@ + if (! IS_VOLATILE (func_type)) + { ++ /* Space for saved MAVERICK registers. */ ++ if (arm_fpu_arch == FPUTYPE_MAVERICK) ++ { ++ for (regno = FIRST_CIRRUS_FP_REGNUM; regno <= LAST_CIRRUS_FP_REGNUM; regno++) ++ if (regs_ever_live[regno] && !call_used_regs[regno]) ++ saved += 8; // 8 in 3.4.3 patch - futaris; ++ } ++ else + /* Space for saved FPA registers. */ ++ { + for (regno = FIRST_FPA_REGNUM; regno <= LAST_FPA_REGNUM; regno++) + if (regs_ever_live[regno] && ! call_used_regs[regno]) + saved += 12; ++ } + + /* Space for saved VFP registers. */ + if (TARGET_HARD_FLOAT && TARGET_VFP) +@@ -10739,7 +10882,19 @@ + + /* Save any floating point call-saved registers used by this + function. */ +- if (arm_fpu_arch == FPUTYPE_FPA_EMU2) ++ if (arm_fpu_arch == FPUTYPE_MAVERICK) ++ { ++ for (reg = LAST_CIRRUS_FP_REGNUM; reg >= FIRST_CIRRUS_FP_REGNUM; reg--) ++ if (regs_ever_live[reg] && !call_used_regs[reg]) ++ { ++ insn = gen_rtx_PRE_DEC (DFmode, stack_pointer_rtx); /* think these causes problems */ ++ insn = gen_rtx_MEM (DFmode, insn); ++ insn = emit_insn (gen_rtx_SET (VOIDmode, insn, ++ gen_rtx_REG (DFmode, reg))); ++ RTX_FRAME_RELATED_P (insn) = 1; saved_regs += 8; /* added by futaris */ ++ } ++ } ++ else if (arm_fpu_arch == FPUTYPE_FPA_EMU2) + { + for (reg = LAST_FPA_REGNUM; reg >= FIRST_FPA_REGNUM; reg--) + if (regs_ever_live[reg] && !call_used_regs[reg]) +@@ -15179,6 +15331,9 @@ + if (IS_FPA_REGNUM (regno)) + return (TARGET_AAPCS_BASED ? 96 : 16) + regno - FIRST_FPA_REGNUM; + ++ if (IS_CIRRUS_REGNUM (regno)) ++ return 28 + regno - FIRST_CIRRUS_FP_REGNUM; ++ + if (IS_VFP_REGNUM (regno)) + return 64 + regno - FIRST_VFP_REGNUM; + +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-28 15:42:36.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-28 15:42:48.000000000 +1000 +@@ -9800,7 +9800,7 @@ + return arm_output_epilogue (next_nonnote_insn (insn)); + " + ;; Length is absolute worst case +- [(set_attr "length" "44") ++ [(set_attr "length" "108") + (set_attr "type" "block") + ;; We don't clobber the conditions, but the potential length of this + ;; operation is sufficient to make conditionalizing the sequence +@@ -9818,7 +9818,7 @@ + return thumb_unexpanded_epilogue (); + " + ; Length is absolute worst case +- [(set_attr "length" "44") ++ [(set_attr "length" "108") + (set_attr "type" "block") + ;; We don't clobber the conditions, but the potential length of this + ;; operation is sufficient to make conditionalizing the sequence diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-scc.patch b/packages/gcc/gcc-4.2.4/arm-crunch-scc.patch new file mode 100644 index 0000000000..d1330f2543 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-scc.patch @@ -0,0 +1,38 @@ +--- gcc-4.1.2/gcc/config/arm/arm.md-original 2007-06-13 12:38:06.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-13 12:40:07.000000000 +1000 +@@ -7375,7 +7375,7 @@ + (define_expand "sge" + [(set (match_operand:SI 0 "s_register_operand" "") + (ge:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)" ++ "TARGET_ARM" + "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);" + ) + +@@ -7434,7 +7434,7 @@ + (define_expand "sunordered" + [(set (match_operand:SI 0 "s_register_operand" "") + (unordered:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNORDERED, arm_compare_op0, + arm_compare_op1);" + ) +@@ -7442,7 +7442,7 @@ + (define_expand "sordered" + [(set (match_operand:SI 0 "s_register_operand" "") + (ordered:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (ORDERED, arm_compare_op0, + arm_compare_op1);" + ) +@@ -7467,7 +7467,7 @@ + (define_expand "sunlt" + [(set (match_operand:SI 0 "s_register_operand" "") + (unlt:SI (match_dup 1) (const_int 0)))] +- "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP || TARGET_MAVERICK)" + "operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0, + arm_compare_op1);" + ) diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-truncsi-disable-new.patch b/packages/gcc/gcc-4.2.4/arm-crunch-truncsi-disable-new.patch new file mode 100644 index 0000000000..6dea43fa7c --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-truncsi-disable-new.patch @@ -0,0 +1,33 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-cfcvt 2007-06-25 12:46:22.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-25 12:46:41.000000000 +1000 +@@ -337,13 +337,14 @@ + "cfcvt64d%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")]) + ++; appears to be buggy + (define_insn "cirrus_truncsfsi2" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (fix:SI (fix:SF (match_operand:SF 1 "cirrus_fp_register" "v")))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cftruncs32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2" + [(set_attr "length" "8") + (set_attr "cirrus" "normal")] + ) + +--- gcc-4.1.2/gcc/config/arm/arm.md-cfcvt 2007-06-25 12:46:56.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-25 12:48:08.000000000 +1000 +@@ -3151,10 +3151,11 @@ + } + ") + ++; appears to be buggy for MAVERICK + (define_expand "fix_truncsfsi2" + [(set (match_operand:SI 0 "s_register_operand" "") + (fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" ""))))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + " + if (TARGET_MAVERICK) + { diff --git a/packages/gcc/gcc-4.2.4/arm-crunch-truncsi-disable.patch b/packages/gcc/gcc-4.2.4/arm-crunch-truncsi-disable.patch new file mode 100644 index 0000000000..a5d791a0a4 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-crunch-truncsi-disable.patch @@ -0,0 +1,56 @@ +--- gcc-4.1.2/gcc/config/arm/cirrus.md-cfcvt 2007-06-25 12:46:22.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/cirrus.md 2007-06-25 12:46:41.000000000 +1000 +@@ -337,21 +337,23 @@ + "cfcvt64d%?\\t%V0, %V1" + [(set_attr "cirrus" "normal")]) + ++; appears to be buggy + (define_insn "cirrus_truncsfsi2" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (fix:SI (fix:SF (match_operand:SF 1 "cirrus_fp_register" "v")))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cftruncs32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2" + [(set_attr "length" "8") + (set_attr "cirrus" "normal")] + ) + ++; appears to be buggy + (define_insn "cirrus_truncdfsi2" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (fix:SI (fix:DF (match_operand:DF 1 "cirrus_fp_register" "v")))) + (clobber (match_scratch:DF 2 "=v"))] +- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK" ++ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK && 0" + "cftruncd32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2" + [(set_attr "length" "8") + (set_attr "cirrus" "normal")] +--- gcc-4.1.2/gcc/config/arm/arm.md-cfcvt 2007-06-25 12:46:56.000000000 +1000 ++++ gcc-4.1.2/gcc/config/arm/arm.md 2007-06-25 12:48:08.000000000 +1000 +@@ -3151,10 +3151,11 @@ + } + ") + ++; appears to be buggy for MAVERICK + (define_expand "fix_truncsfsi2" + [(set (match_operand:SI 0 "s_register_operand" "") + (fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" ""))))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + " + if (TARGET_MAVERICK) + { +@@ -3167,10 +3168,11 @@ + } + ") + ++; appears to be buggy for MAVERICK + (define_expand "fix_truncdfsi2" + [(set (match_operand:SI 0 "s_register_operand" "") + (fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" ""))))] +- "TARGET_ARM && TARGET_HARD_FLOAT" ++ "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)" + " + if (TARGET_MAVERICK) + { diff --git a/packages/gcc/gcc-4.2.4/arm-nolibfloat.patch b/packages/gcc/gcc-4.2.4/arm-nolibfloat.patch new file mode 100644 index 0000000000..c4897c0330 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-nolibfloat.patch @@ -0,0 +1,24 @@ +# Dimitry Andric <dimitry@andric.com>, 2004-05-01 +# +# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed +# anymore. (The required functions are now in libgcc.) +# +# Fixes errors like +# arm-softfloat-linux-gnu/3.4.0/../../../../arm-softfloat-linux-gnu/bin/ld: cannot find -lfloat +# collect2: ld returned 1 exit status +# make[2]: *** [arm-softfloat-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/iconvdata/ISO8859-1.so] Error 1 +# when building glibc-2.3.3 with gcc-3.4.0 for arm-softfloat + +Index: gcc-4.0.2/gcc/config/arm/linux-elf.h +=================================================================== +--- gcc-4.0.2.orig/gcc/config/arm/linux-elf.h 2005-03-04 16:14:01.000000000 +0000 ++++ gcc-4.0.2/gcc/config/arm/linux-elf.h 2005-11-11 18:02:54.000000000 +0000 +@@ -56,7 +56,7 @@ + %{shared:-lc} \ + %{!shared:%{profile:-lc_p}%{!profile:-lc}}" + +-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc" ++#define LIBGCC_SPEC "-lgcc" + + /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add + the GNU/Linux magical crtbegin.o file (see crtstuff.c) which diff --git a/packages/gcc/gcc-4.2.4/arm-softfloat.patch b/packages/gcc/gcc-4.2.4/arm-softfloat.patch new file mode 100644 index 0000000000..5e1edd9208 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-softfloat.patch @@ -0,0 +1,16 @@ +Index: gcc-4.0.2/gcc/config/arm/t-linux +=================================================================== +--- gcc-4.0.2.orig/gcc/config/arm/t-linux 2004-05-15 12:41:35.000000000 +0000 ++++ gcc-4.0.2/gcc/config/arm/t-linux 2005-11-11 16:07:53.000000000 +0000 +@@ -4,7 +4,10 @@ + LIBGCC2_DEBUG_CFLAGS = -g0 + + LIB1ASMSRC = arm/lib1funcs.asm +-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx ++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ ++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ ++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ ++ _fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundisf _floatundidf + + # MULTILIB_OPTIONS = mhard-float/msoft-float + # MULTILIB_DIRNAMES = hard-float soft-float diff --git a/packages/gcc/gcc-4.2.4/arm-thumb-cache.patch b/packages/gcc/gcc-4.2.4/arm-thumb-cache.patch new file mode 100644 index 0000000000..fa63846c8c --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-thumb-cache.patch @@ -0,0 +1,29 @@ +--- gcc-4.1.1/gcc/config/arm/linux-gas.h- 2005-06-25 03:22:41.000000000 +0200 ++++ gcc-4.1.1/gcc/config/arm/linux-gas.h 2006-06-18 10:23:46.000000000 +0200 +@@ -44,6 +44,7 @@ + + /* Clear the instruction cache from `beg' to `end'. This makes an + inline system call to SYS_cacheflush. */ ++#if !defined(__thumb__) + #define CLEAR_INSN_CACHE(BEG, END) \ + { \ + register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \ +@@ -53,3 +54,18 @@ + : "=r" (_beg) \ + : "0" (_beg), "r" (_end), "r" (_flg)); \ + } ++#else ++#define CLEAR_INSN_CACHE(BEG, END) \ ++{ \ ++ register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \ ++ register unsigned long _end __asm ("a2") = (unsigned long) (END); \ ++ register unsigned long _flg __asm ("a3") = 0; \ ++ register unsigned long _swi __asm ("a4") = 0xf0002; \ ++ __asm __volatile ("push {r7}\n" \ ++ " mov r7,a4\n" \ ++ " swi 0 @ sys_cacheflush\n" \ ++ " pop {r7}\n" \ ++ : "=r" (_beg) \ ++ : "0" (_beg), "r" (_end), "r" (_flg), "r" (_swi)); \ ++} ++#endif diff --git a/packages/gcc/gcc-4.2.4/arm-thumb.patch b/packages/gcc/gcc-4.2.4/arm-thumb.patch new file mode 100644 index 0000000000..016a7a550b --- /dev/null +++ b/packages/gcc/gcc-4.2.4/arm-thumb.patch @@ -0,0 +1,64 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- gcc-4.1.1/gcc/config/arm/lib1funcs.asm~gcc ++++ gcc-4.1.1/gcc/config/arm/lib1funcs.asm +@@ -995,10 +995,24 @@ + .code 32 + FUNC_START div0 + ++#if ! defined __thumb__ + stmfd sp!, {r1, lr} + mov r0, #SIGFPE + bl SYM(raise) __PLT__ + RETLDM r1 ++#else ++ push {r1, lr} ++ mov r0, #SIGFPE ++ bl SYM(raise) __PLT__ ++#if __ARM_ARCH__ > 4 ++ pop {r1, pc} ++#else ++ @ on 4T that won't work ++ pop {r1} ++ pop {r3} ++ bx r3 ++#endif ++#endif + + FUNC_END div0 + +@@ -1141,11 +1155,12 @@ + code here switches to the correct mode before executing the function. */ + + .text +- .align 0 ++ .align 1 + .force_thumb + + .macro call_via register + THUMB_FUNC_START _call_via_\register ++ .hidden SYM (_call_via_\register) + + bx \register + nop +@@ -1242,6 +1257,7 @@ + .code 16 + + THUMB_FUNC_START _interwork_call_via_\register ++ .hidden SYM (_interwork_call_via_\register) + + bx pc + nop +--- gcc-4.1.1/gcc/config/arm/t-linux~gcc ++++ gcc-4.1.1/gcc/config/arm/t-linux +@@ -7,6 +7,7 @@ + LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ ++ _call_via_rX \ + _fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundisf _floatundidf + + # MULTILIB_OPTIONS = mhard-float/msoft-float diff --git a/packages/gcc/gcc-4.2.4/cache-amnesia.patch b/packages/gcc/gcc-4.2.4/cache-amnesia.patch new file mode 100644 index 0000000000..ef7cd111c5 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/cache-amnesia.patch @@ -0,0 +1,13 @@ +diff --git a/gcc/configure b/gcc/configure +index 44620ab..6e1830c 100755 +--- a/gcc/configure ++++ b/gcc/configure +@@ -12272,7 +12272,7 @@ else + esac + saved_CFLAGS="${CFLAGS}" + CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \ +- ${realsrcdir}/configure \ ++ CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \ + --enable-languages=${enable_languages-all} \ + --target=$target_alias --host=$build_alias --build=$build_alias + CFLAGS="${saved_CFLAGS}" diff --git a/packages/gcc/gcc-4.2.4/fix-ICE-in-arm_unwind_emit_set.diff b/packages/gcc/gcc-4.2.4/fix-ICE-in-arm_unwind_emit_set.diff new file mode 100644 index 0000000000..568e15abff --- /dev/null +++ b/packages/gcc/gcc-4.2.4/fix-ICE-in-arm_unwind_emit_set.diff @@ -0,0 +1,18 @@ +--- trunk/gcc/config/arm/arm.c 2006/09/19 13:18:27 117055 ++++ trunk/gcc/config/arm/arm.c 2006/09/19 13:19:24 117056 +@@ -15415,6 +15415,15 @@ + /* Move from sp to reg. */ + asm_fprintf (asm_out_file, "\t.movsp %r\n", REGNO (e0)); + } ++ else if (GET_CODE (e1) == PLUS ++ && GET_CODE (XEXP (e1, 0)) == REG ++ && REGNO (XEXP (e1, 0)) == SP_REGNUM ++ && GET_CODE (XEXP (e1, 1)) == CONST_INT) ++ { ++ /* Set reg to offset from sp. */ ++ asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n", ++ REGNO (e0), (int)INTVAL(XEXP (e1, 1))); ++ } + else + abort (); + break; diff --git a/packages/gcc/gcc-4.2.4/fortran-cross-compile-hack.patch b/packages/gcc/gcc-4.2.4/fortran-cross-compile-hack.patch new file mode 100644 index 0000000000..b3d38ad983 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/fortran-cross-compile-hack.patch @@ -0,0 +1,30 @@ +* Fortran would have searched for arm-angstrom-gnueabi-gfortran but would have used + used gfortan. For gcc_4.2.2.bb we want to use the gfortran compiler from our cross + directory. + +diff --git a/libgfortran/configure b/libgfortran/configure +index f7d86fb..d0966ec 100755 +--- a/libgfortran/configure ++++ b/libgfortran/configure +@@ -4475,6 +4475,6 @@ exec 5>>./config.log + + # We need gfortran to compile parts of the library + #AC_PROG_FC(gfortran) +-FC="$GFORTRAN" ++#FC="$GFORTRAN" + ac_ext=${FC_SRCEXT-f} + ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5' +\ No newline at end of file +diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac +index 4661306..9f83e55 100644 +--- a/libgfortran/configure.ac ++++ b/libgfortran/configure.ac +@@ -140,7 +140,7 @@ AC_SUBST(enable_static) + + # We need gfortran to compile parts of the library + #AC_PROG_FC(gfortran) +-FC="$GFORTRAN" ++#FC="$GFORTRAN" + AC_PROG_FC(gfortran) + + # extra LD Flags which are required for targets diff --git a/packages/gcc/gcc-4.2.4/fortran-static-linking.patch b/packages/gcc/gcc-4.2.4/fortran-static-linking.patch new file mode 100644 index 0000000000..3dd6321dc3 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/fortran-static-linking.patch @@ -0,0 +1,48 @@ +f951 (fortran) links to MPFR and GMP of our staging area but when executing +the command the libs can not be found. Use rpath like all the other apps in +our staging bin/ directory. + +Patch the configure to avoid the regeneration... + +Index: gcc-4.2.2/configure +=================================================================== +--- gcc-4.2.2.orig/configure 2008-01-15 23:23:41.000000000 +0100 ++++ gcc-4.2.2/configure 2008-01-15 23:25:20.000000000 +0100 +@@ -2278,14 +2278,14 @@ + + + if test "x$with_mpfr" != x; then +- gmplibs="-L$with_mpfr/lib $gmplibs" ++ gmplibs="-static -L$with_mpfr/lib $gmplibs" + gmpinc="-I$with_mpfr/include" + fi + if test "x$with_mpfr_include" != x; then + gmpinc="-I$with_mpfr_include" + fi + if test "x$with_mpfr_lib" != x; then +- gmplibs="-L$with_mpfr_lib $gmplibs" ++ gmplibs="-static -L$with_mpfr_lib $gmplibs" + fi + + # Specify a location for gmp +Index: gcc-4.2.2/configure.in +=================================================================== +--- gcc-4.2.2.orig/configure.in 2008-01-15 23:23:41.000000000 +0100 ++++ gcc-4.2.2/configure.in 2008-01-15 23:24:36.000000000 +0100 +@@ -1066,14 +1066,14 @@ + AC_ARG_WITH(mpfr_lib, [ --with-mpfr-lib=PATH Specify the directory for the installed MPFR library]) + + if test "x$with_mpfr" != x; then +- gmplibs="-L$with_mpfr/lib $gmplibs" ++ gmplibs="-static -L$with_mpfr/lib $gmplibs" + gmpinc="-I$with_mpfr/include" + fi + if test "x$with_mpfr_include" != x; then + gmpinc="-I$with_mpfr_include" + fi + if test "x$with_mpfr_lib" != x; then +- gmplibs="-L$with_mpfr_lib $gmplibs" ++ gmplibs="-static -L$with_mpfr_lib $gmplibs" + fi + + # Specify a location for gmp diff --git a/packages/gcc/gcc-4.2.4/gcc-4.0.2-e300c2c3.patch b/packages/gcc/gcc-4.2.4/gcc-4.0.2-e300c2c3.patch new file mode 100644 index 0000000000..736ac4b6b6 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/gcc-4.0.2-e300c2c3.patch @@ -0,0 +1,311 @@ +Adds support for Freescale Power architecture e300c2 and e300c3 cores. +http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm + +Leon Woestenberg <leonw@mailcan.com> + +Index: gcc-4.1.2/gcc/config/rs6000/e300c2c3.md +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/rs6000/e300c2c3.md 2007-10-18 15:32:51.000000000 +0200 +@@ -0,0 +1,189 @@ ++;; Pipeline description for Motorola PowerPC e300c3 core. ++;; Copyright (C) 2003 Free Software Foundation, Inc. ++;; ++;; This file is part of GCC. ++ ++;; GCC 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, or (at your ++;; option) any later version. ++ ++;; GCC 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 General Public License ++;; along with GCC; see the file COPYING. If not, write to the ++;; Free Software Foundation, 59 Temple Place - Suite 330, Boston, ++;; MA 02111-1307, USA. ++ ++(define_automaton "ppce300c3_most,ppce300c3_long,ppce300c3_retire") ++(define_cpu_unit "ppce300c3_decode_0,ppce300c3_decode_1" "ppce300c3_most") ++ ++;; We don't simulate general issue queue (GIC). If we have SU insn ++;; and then SU1 insn, they can not be issued on the same cycle ++;; (although SU1 insn and then SU insn can be issued) because the SU ++;; insn will go to SU1 from GIC0 entry. Fortunately, the first cycle ++;; multipass insn scheduling will find the situation and issue the SU1 ++;; insn and then the SU insn. ++(define_cpu_unit "ppce300c3_issue_0,ppce300c3_issue_1" "ppce300c3_most") ++ ++;; We could describe completion buffers slots in combination with the ++;; retirement units and the order of completion but the result ++;; automaton would behave in the same way because we can not describe ++;; real latency time with taking in order completion into account. ++;; Actually we could define the real latency time by querying reserved ++;; automaton units but the current scheduler uses latency time before ++;; issuing insns and making any reservations. ++;; ++;; So our description is aimed to achieve a insn schedule in which the ++;; insns would not wait in the completion buffer. ++(define_cpu_unit "ppce300c3_retire_0,ppce300c3_retire_1" "ppce300c3_retire") ++ ++;; Branch unit: ++(define_cpu_unit "ppce300c3_bu" "ppce300c3_most") ++ ++;; IU: ++(define_cpu_unit "ppce300c3_iu0_stage0,ppce300c3_iu1_stage0" "ppce300c3_most") ++ ++;; IU: This used to describe non-pipelined division. ++(define_cpu_unit "ppce300c3_mu_div" "ppce300c3_long") ++ ++;; SRU: ++(define_cpu_unit "ppce300c3_sru_stage0" "ppce300c3_most") ++ ++;; Here we simplified LSU unit description not describing the stages. ++(define_cpu_unit "ppce300c3_lsu" "ppce300c3_most") ++ ++;; FPU: ++(define_cpu_unit "ppce300c3_fpu" "ppce300c3_most") ++ ++;; The following units are used to make automata deterministic ++(define_cpu_unit "present_ppce300c3_decode_0" "ppce300c3_most") ++(define_cpu_unit "present_ppce300c3_issue_0" "ppce300c3_most") ++(define_cpu_unit "present_ppce300c3_retire_0" "ppce300c3_retire") ++(define_cpu_unit "present_ppce300c3_iu0_stage0" "ppce300c3_most") ++ ++;; The following sets to make automata deterministic when option ndfa is used. ++(presence_set "present_ppce300c3_decode_0" "ppce300c3_decode_0") ++(presence_set "present_ppce300c3_issue_0" "ppce300c3_issue_0") ++(presence_set "present_ppce300c3_retire_0" "ppce300c3_retire_0") ++(presence_set "present_ppce300c3_iu0_stage0" "ppce300c3_iu0_stage0") ++ ++;; Some useful abbreviations. ++(define_reservation "ppce300c3_decode" ++ "ppce300c3_decode_0|ppce300c3_decode_1+present_ppce300c3_decode_0") ++(define_reservation "ppce300c3_issue" ++ "ppce300c3_issue_0|ppce300c3_issue_1+present_ppce300c3_issue_0") ++(define_reservation "ppce300c3_retire" ++ "ppce300c3_retire_0|ppce300c3_retire_1+present_ppce300c3_retire_0") ++(define_reservation "ppce300c3_iu_stage0" ++ "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0") ++ ++;; Compares can be executed either one of the IU or SRU ++(define_insn_reservation "ppce300c3_cmp" 1 ++ (and (eq_attr "type" "cmp,compare,delayed_compare,fast_compare") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_stage0) \ ++ +ppce300c3_retire") ++ ++;; Other one cycle IU insns ++(define_insn_reservation "ppce300c3_iu" 1 ++ (and (eq_attr "type" "integer,insert_word") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire") ++ ++;; Branch. Actually this latency time is not used by the scheduler. ++(define_insn_reservation "ppce300c3_branch" 1 ++ (and (eq_attr "type" "jmpreg,branch") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire") ++ ++;; Multiply is non-pipelined but can be executed in any IU ++(define_insn_reservation "ppce300c3_multiply" 2 ++ (and (eq_attr "type" "imul,imul2,imul3,imul_compare") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \ ++ ppce300c3_iu_stage0+ppce300c3_retire") ++ ++;; Divide. We use the average latency time here. We omit reserving a ++;; retire unit because of the result automata will be huge. ++(define_insn_reservation "ppce300c3_divide" 20 ++ (and (eq_attr "type" "idiv") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,\ ++ ppce300c3_mu_div*19") ++ ++;; CR logical ++(define_insn_reservation "ppce300c3_cr_logical" 1 ++ (and (eq_attr "type" "cr_logical,delayed_cr") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire") ++ ++;; Mfcr ++(define_insn_reservation "ppce300c3_mfcr" 1 ++ (and (eq_attr "type" "mfcr") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire") ++ ++;; Mtcrf ++(define_insn_reservation "ppce300c3_mtcrf" 1 ++ (and (eq_attr "type" "mtcr") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire") ++ ++;; Mtjmpr ++(define_insn_reservation "ppce300c3_mtjmpr" 1 ++ (and (eq_attr "type" "mtjmpr,mfjmpr") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire") ++ ++;; Float point instructions ++(define_insn_reservation "ppce300c3_fpcompare" 3 ++ (and (eq_attr "type" "fpcompare") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") ++ ++(define_insn_reservation "ppce300c3_fp" 3 ++ (and (eq_attr "type" "fp") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") ++ ++(define_insn_reservation "ppce300c3_dmul" 4 ++ (and (eq_attr "type" "dmul") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu,nothing,ppce300c3_retire") ++ ++; Divides are not pipelined ++(define_insn_reservation "ppce300c3_sdiv" 18 ++ (and (eq_attr "type" "sdiv") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*17") ++ ++(define_insn_reservation "ppce300c3_ddiv" 33 ++ (and (eq_attr "type" "ddiv") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32") ++ ++;; Loads ++(define_insn_reservation "ppce300c3_load" 2 ++ (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") ++ ++(define_insn_reservation "ppce300c3_fpload" 2 ++ (and (eq_attr "type" "fpload,fpload_ux,fpload_u") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") ++ ++;; Stores. ++(define_insn_reservation "ppce300c3_store" 2 ++ (and (eq_attr "type" "store,store_ux,store_u") ++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") ++ ++(define_insn_reservation "ppce300c3_fpstore" 2 ++ (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u") ++ (eq_attr "cpu" "ppce300c3")) ++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") +Index: gcc-4.1.2/gcc/config/rs6000/rs6000.c +=================================================================== +--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.c 2006-12-16 20:24:56.000000000 +0100 ++++ gcc-4.1.2/gcc/config/rs6000/rs6000.c 2007-10-18 15:34:26.000000000 +0200 +@@ -557,6 +557,21 @@ + COSTS_N_INSNS (29), /* ddiv */ + }; + ++/* Instruction costs on E300C2 and E300C3 cores. */ ++static const ++struct processor_costs ppce300c2c3_cost = { ++ COSTS_N_INSNS (4), /* mulsi */ ++ COSTS_N_INSNS (4), /* mulsi_const */ ++ COSTS_N_INSNS (4), /* mulsi_const9 */ ++ COSTS_N_INSNS (4), /* muldi */ ++ COSTS_N_INSNS (19), /* divsi */ ++ COSTS_N_INSNS (19), /* divdi */ ++ COSTS_N_INSNS (3), /* fp */ ++ COSTS_N_INSNS (4), /* dmul */ ++ COSTS_N_INSNS (18), /* sdiv */ ++ COSTS_N_INSNS (33), /* ddiv */ ++}; ++ + /* Instruction costs on POWER4 and POWER5 processors. */ + static const + struct processor_costs power4_cost = { +@@ -1140,6 +1155,8 @@ + /* 8548 has a dummy entry for now. */ + {"8548", PROCESSOR_PPC8540, + POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_STRICT_ALIGN}, ++ {"e300c2", PROCESSOR_PPCE300C2, POWERPC_BASE_MASK | MASK_SOFT_FLOAT}, ++ {"e300c3", PROCESSOR_PPCE300C3, POWERPC_BASE_MASK}, + {"860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT}, + {"970", PROCESSOR_POWER4, + POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64}, +@@ -1529,6 +1546,11 @@ + rs6000_cost = &ppc8540_cost; + break; + ++ case PROCESSOR_PPCE300C2: ++ case PROCESSOR_PPCE300C3: ++ rs6000_cost = &ppce300c2c3_cost; ++ break; ++ + case PROCESSOR_POWER4: + case PROCESSOR_POWER5: + rs6000_cost = &power4_cost; +@@ -16647,6 +16669,8 @@ + case CPU_PPC750: + case CPU_PPC7400: + case CPU_PPC8540: ++ case CPU_PPCE300C2: ++ case CPU_PPCE300C3: + return 2; + case CPU_RIOS2: + case CPU_PPC604: +Index: gcc-4.1.2/gcc/config/rs6000/rs6000.h +=================================================================== +--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.h 2006-11-18 01:25:49.000000000 +0100 ++++ gcc-4.1.2/gcc/config/rs6000/rs6000.h 2007-10-18 15:32:51.000000000 +0200 +@@ -111,6 +111,8 @@ + %{mcpu=970: -mpower4 -maltivec} \ + %{mcpu=G5: -mpower4 -maltivec} \ + %{mcpu=8540: -me500} \ ++%{mcpu=e300c2: -mppc} \ ++%{mcpu=e300c3: -mppc -mpmr} \ + %{maltivec: -maltivec} \ + -many" + +@@ -211,6 +213,8 @@ + PROCESSOR_PPC7400, + PROCESSOR_PPC7450, + PROCESSOR_PPC8540, ++ PROCESSOR_PPCE300C2, ++ PROCESSOR_PPCE300C3, + PROCESSOR_POWER4, + PROCESSOR_POWER5 + }; +Index: gcc-4.1.2/gcc/config/rs6000/rs6000.md +=================================================================== +--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.md 2006-12-16 20:24:56.000000000 +0100 ++++ gcc-4.1.2/gcc/config/rs6000/rs6000.md 2007-10-18 15:32:51.000000000 +0200 +@@ -103,7 +103,7 @@ + ;; Processor type -- this attribute must exactly match the processor_type + ;; enumeration in rs6000.h. + +-(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5" ++(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppce300c2,ppce300c3,power4,power5" + (const (symbol_ref "rs6000_cpu_attr"))) + + (automata_option "ndfa") +@@ -119,6 +119,7 @@ + (include "7xx.md") + (include "7450.md") + (include "8540.md") ++(include "e300c2c3.md") + (include "power4.md") + (include "power5.md") + +Index: gcc-4.1.2/gcc/config.gcc +=================================================================== +--- gcc-4.1.2.orig/gcc/config.gcc 2007-10-18 15:26:23.000000000 +0200 ++++ gcc-4.1.2/gcc/config.gcc 2007-10-18 15:32:51.000000000 +0200 +@@ -2710,7 +2710,7 @@ + | rios | rios1 | rios2 | rsc | rsc1 | rs64a \ + | 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \ + | 601 | 602 | 603 | 603e | ec603e | 604 \ +- | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \ ++ | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 | e300c[23] \ + | 854[08] | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5) + # OK + ;; diff --git a/packages/gcc/gcc-4.2.4/gcc41-configure.in.patch b/packages/gcc/gcc-4.2.4/gcc41-configure.in.patch new file mode 100644 index 0000000000..3d33bcb978 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/gcc41-configure.in.patch @@ -0,0 +1,22 @@ +--- gcc-3.4.4/configure.in.orig 2005-08-09 19:57:51.504323183 -0700 ++++ gcc-3.4.4/configure.in 2005-08-09 20:00:12.073168623 -0700 +@@ -1907,7 +1907,7 @@ + *) gxx_include_dir=${with_gxx_include_dir} ;; + esac + +-FLAGS_FOR_TARGET= ++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET" + case " $target_configdirs " in + *" newlib "*) + case " $target_configargs " in +--- gcc-3.4.4/configure.orig 2005-08-09 21:02:29.668360660 -0700 ++++ gcc-3.4.4/configure 2005-08-09 21:02:50.157649970 -0700 +@@ -2669,7 +2669,7 @@ + *) gxx_include_dir=${with_gxx_include_dir} ;; + esac + +-FLAGS_FOR_TARGET= ++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET" + case " $target_configdirs " in + *" newlib "*) + case " $target_configargs " in diff --git a/packages/gcc/gcc-4.2.4/gfortran.patch b/packages/gcc/gcc-4.2.4/gfortran.patch new file mode 100644 index 0000000000..96905e5d7d --- /dev/null +++ b/packages/gcc/gcc-4.2.4/gfortran.patch @@ -0,0 +1,40 @@ +The patch below fixes a crash building libgfortran on arm-linux-gnueabi. + +This target doesn't really have a 128-bit integer type, however it does use +TImode to represent the return value of certain special ABI defined library +functions. This results in type_for_size(TImode) being called. + +Because TImode deosn't correspond to any gfortran integer kind +gfc_type_for_size returns NULL and we segfault shortly after. + +The patch below fixes this by making gfc_type_for_size handle TImode in the +same way as the C frontend. + +Tested on x86_64-linux and arm-linux-gnueabi. +Applied to trunk. + +Paul + +2007-05-15 Paul Brook <paul@codesourcery.com> + + gcc/fortran/ + * trans-types.c (gfc_type_for_size): Handle signed TImode. + +Index: gcc-4.2.1/gcc/fortran/trans-types.c +=================================================================== +--- gcc-4.2.1/gcc/fortran/trans-types.c (revision 170435) ++++ gcc-4.2.1/gcc/fortran/trans-types.c (working copy) +@@ -1800,6 +1800,13 @@ gfc_type_for_size (unsigned bits, int un + if (type && bits == TYPE_PRECISION (type)) + return type; + } ++ ++ /* Handle TImode as a special case because it is used by some backends ++ (eg. ARM) even though it is not available for normal use. */ ++#if HOST_BITS_PER_WIDE_INT >= 64 ++ if (bits == TYPE_PRECISION (intTI_type_node)) ++ return intTI_type_node; ++#endif + } + else + { diff --git a/packages/gcc/gcc-4.2.4/intermask-bigendian.patch b/packages/gcc/gcc-4.2.4/intermask-bigendian.patch new file mode 100644 index 0000000000..fdff3d3d86 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/intermask-bigendian.patch @@ -0,0 +1,24 @@ +--- gcc-4.2.0/gcc/config/arm/bpabi.h ++++ gcc-4.2.0/gcc/config/arm/bpabi.h +@@ -33,9 +33,19 @@ + #undef FPUTYPE_DEFAULT + #define FPUTYPE_DEFAULT FPUTYPE_VFP + ++/* ++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-* ++ * (big endian) configurations. ++ */ ++#if TARGET_BIG_ENDIAN_DEFAULT ++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END ++#else ++#define TARGET_ENDIAN_DEFAULT 0 ++#endif ++ + /* EABI targets should enable interworking by default. */ + #undef TARGET_DEFAULT +-#define TARGET_DEFAULT MASK_INTERWORK ++#define TARGET_DEFAULT (MASK_INTERWORK | TARGET_ENDIAN_DEFAULT) + + /* The ARM BPABI functions return a boolean; they use no special + calling convention. */ + diff --git a/packages/gcc/gcc-4.2.4/ldflags.patch b/packages/gcc/gcc-4.2.4/ldflags.patch new file mode 100644 index 0000000000..9576f60778 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/ldflags.patch @@ -0,0 +1,22 @@ +--- /tmp/Makefile.in 2006-02-23 20:56:01.399758728 +0100 ++++ gcc-4.1-20060217/Makefile.in 2006-02-23 20:56:16.874406224 +0100 +@@ -334,7 +334,7 @@ + CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) + LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) + LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates +-LDFLAGS_FOR_TARGET = ++LDFLAGS_FOR_TARGET = @LDFLAGS@ + PICFLAG_FOR_TARGET = + + # ------------------------------------ +--- /tmp/Makefile.tpl 2006-02-23 20:50:34.077519272 +0100 ++++ gcc-4.1-20060217/Makefile.tpl 2006-02-23 21:04:31.092273688 +0100 +@@ -337,7 +337,7 @@ + CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) + LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) + LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates +-LDFLAGS_FOR_TARGET = ++LDFLAGS_FOR_TARGET = @LDFLAGS@ + PICFLAG_FOR_TARGET = + + # ------------------------------------ diff --git a/packages/gcc/gcc-4.2.4/sdk-libstdc++-includes.patch b/packages/gcc/gcc-4.2.4/sdk-libstdc++-includes.patch new file mode 100644 index 0000000000..4377c2143b --- /dev/null +++ b/packages/gcc/gcc-4.2.4/sdk-libstdc++-includes.patch @@ -0,0 +1,22 @@ +--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~ 2003-08-27 22:29:42.000000000 +0100 ++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100 +@@ -32,7 +32,7 @@ + + libmath_la_SOURCES = stubs.c + +-AM_CPPFLAGS = $(CANADIAN_INCLUDES) ++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include + + # Only compiling "C" sources in this directory. + LIBTOOL = @LIBTOOL@ --tag CC +--- gcc-3.4.1/libstdc++-v3/fragment.am.old 2004-07-22 18:24:58.024083656 +0100 ++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100 +@@ -18,7 +18,7 @@ + $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once + + # -I/-D flags to pass when compiling. +-AM_CPPFLAGS = $(GLIBCXX_INCLUDES) ++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include + + + diff --git a/packages/gcc/gcc-4.2.4/sh3-installfix-fixheaders.patch b/packages/gcc/gcc-4.2.4/sh3-installfix-fixheaders.patch new file mode 100644 index 0000000000..a06cd2e075 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/sh3-installfix-fixheaders.patch @@ -0,0 +1,11 @@ +--- gcc-4.1.1/gcc/Makefile.in_orig 2007-01-31 21:24:23.000000000 +0000 ++++ gcc-4.1.1/gcc/Makefile.in 2007-01-31 21:24:43.000000000 +0000 +@@ -3772,8 +3772,6 @@ + $(INSTALL_SCRIPT) $(mkinstalldirs) \ + $(DESTDIR)$(itoolsdir)/mkinstalldirs ; \ + $(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \ +- $(INSTALL_PROGRAM) build/fix-header$(build_exeext) \ +- $(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \ + else :; fi + echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \ + > $(DESTDIR)$(itoolsdatadir)/mkheaders.conf diff --git a/packages/gcc/gcc-4.2.4/unbreak-armv4t.patch b/packages/gcc/gcc-4.2.4/unbreak-armv4t.patch new file mode 100644 index 0000000000..b3399abfdb --- /dev/null +++ b/packages/gcc/gcc-4.2.4/unbreak-armv4t.patch @@ -0,0 +1,12 @@ +diff -urN gcc-4.1.1/gcc/config/arm/linux-eabi.h gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h +--- gcc-4.1.1/gcc/config/arm/linux-eabi.h 2006-10-22 11:11:49.000000000 -0700 ++++ gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h 2006-10-24 21:34:01.000000000 -0700 +@@ -45,7 +45,7 @@ + The ARM10TDMI core is the default for armv5t, so set + SUBTARGET_CPU_DEFAULT to achieve this. */ + #undef SUBTARGET_CPU_DEFAULT +-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi ++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi + + #undef SUBTARGET_EXTRA_LINK_SPEC + #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi" diff --git a/packages/gcc/gcc-4.2.4/zecke-no-host-includes.patch b/packages/gcc/gcc-4.2.4/zecke-no-host-includes.patch new file mode 100644 index 0000000000..6afb10d6ef --- /dev/null +++ b/packages/gcc/gcc-4.2.4/zecke-no-host-includes.patch @@ -0,0 +1,31 @@ +Index: gcc-4.0.2/gcc/c-incpath.c +=================================================================== +--- gcc-4.0.2.orig/gcc/c-incpath.c 2005-01-23 16:05:27.000000000 +0100 ++++ gcc-4.0.2/gcc/c-incpath.c 2006-05-15 21:23:02.000000000 +0200 +@@ -350,6 +350,26 @@ + p->construct = 0; + p->user_supplied_p = user_supplied_p; + ++#ifdef CROSS_COMPILE ++ /* A common error when cross compiling is including ++ host headers. This code below will try to fail fast ++ for cross compiling. Currently we consider /usr/include, ++ /opt/include and /sw/include as harmful. */ ++ { ++ /* printf("Adding Path: %s\n", p->name ); */ ++ if( strstr(p->name, "/usr/include" ) == p->name ) { ++ fprintf(stderr, _("CROSS COMPILE Badness: /usr/include in INCLUDEPATH: %s\n"), p->name); ++ abort(); ++ } else if( strstr(p->name, "/sw/include") == p->name ) { ++ fprintf(stderr, _("CROSS COMPILE Badness: /sw/include in INCLUDEPATH: %s\n"), p->name); ++ abort(); ++ } else if( strstr(p->name, "/opt/include") == p->name ) { ++ fprintf(stderr, _("CROSS COMPILE Badness: /opt/include in INCLUDEPATH: %s\n"), p->name); ++ abort(); ++ } ++ } ++#endif ++ + add_cpp_dir_path (p, chain); + } + diff --git a/packages/gcc/gcc-4.2.4/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.2.4/zecke-xgcc-cpp.patch new file mode 100644 index 0000000000..921cab6e18 --- /dev/null +++ b/packages/gcc/gcc-4.2.4/zecke-xgcc-cpp.patch @@ -0,0 +1,16 @@ +upstream: n/a +comment: Use the preprocessor we have just compiled instead the one of +the system. There might be incompabilities between us and them. + +Index: gcc-4.1.1/Makefile.in +=================================================================== +--- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200 ++++ gcc-4.1.1/Makefile.in 2006-08-06 13:32:46.000000000 +0200 +@@ -194,6 +194,7 @@ + AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \ + CC="$(CC_FOR_TARGET)"; export CC; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ ++ CPP="$(CC_FOR_TARGET) -E"; export CCP; \ + CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ + CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ diff --git a/packages/gcc/gcc-4.3.0.inc b/packages/gcc/gcc-4.3.0.inc index 96b7d02501..b5ab13f1b4 100644 --- a/packages/gcc/gcc-4.3.0.inc +++ b/packages/gcc/gcc-4.3.0.inc @@ -59,6 +59,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ # file://pr34130.patch;patch=1 \ # file://fortran-static-linking.patch;patch=1 \ # file://intermask-bigendian.patch;patch=1 \ + file://gcc-arm-frename-registers.patch;patch=1 \ " SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " diff --git a/packages/gcc/gcc-4.3.0/gcc-arm-frename-registers.patch b/packages/gcc/gcc-4.3.0/gcc-arm-frename-registers.patch new file mode 100644 index 0000000000..280b90358e --- /dev/null +++ b/packages/gcc/gcc-4.3.0/gcc-arm-frename-registers.patch @@ -0,0 +1,25 @@ +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35964 +Index: gcc-4.3.0/gcc/regrename.c +=================================================================== +--- gcc-4.3.0.orig/gcc/regrename.c 2008-05-28 08:31:15.000000000 -0700 ++++ gcc-4.3.0/gcc/regrename.c 2008-05-28 08:34:00.000000000 -0700 +@@ -782,6 +782,10 @@ + || (predicated && recog_data.operand_type[i] == OP_OUT)) + recog_data.operand_type[i] = OP_INOUT; + } ++ /* Unshare dup_loc RTL */ ++ for (i = 0; i < recog_data.n_dups; i++) ++ *recog_data.dup_loc[i] = copy_rtx(*recog_data.dup_loc[i]); ++ + + /* Step 1: Close chains for which we have overlapping reads. */ + for (i = 0; i < n_ops; i++) +@@ -813,7 +817,7 @@ + OP_IN, 0); + + for (i = 0; i < recog_data.n_dups; i++) +- *recog_data.dup_loc[i] = copy_rtx (old_dups[i]); ++ *recog_data.dup_loc[i] = old_dups[i]; + for (i = 0; i < n_ops; i++) + *recog_data.operand_loc[i] = old_operands[i]; + if (recog_data.n_dups) diff --git a/packages/gcc/gcc-cross-initial_4.2.4.bb b/packages/gcc/gcc-cross-initial_4.2.4.bb new file mode 100644 index 0000000000..fe326d304b --- /dev/null +++ b/packages/gcc/gcc-cross-initial_4.2.4.bb @@ -0,0 +1,5 @@ +require gcc-cross_${PV}.bb +require gcc-cross-initial.inc + +EXTRA_OECONF += "--disable-libmudflap --disable-libgomp \ + --disable-libssp" diff --git a/packages/gcc/gcc-cross-sdk_4.2.4.bb b/packages/gcc/gcc-cross-sdk_4.2.4.bb new file mode 100644 index 0000000000..e4a1e41138 --- /dev/null +++ b/packages/gcc/gcc-cross-sdk_4.2.4.bb @@ -0,0 +1,14 @@ +PR = "r0" + +inherit sdk + +require gcc-${PV}.inc +require gcc-cross-sdk.inc +require gcc-configure-sdk.inc +require gcc-package-sdk.inc + +DEPENDS += "gmp-native mpfr-native" + +EXTRA_OECONF += "--disable-libunwind-exceptions --disable-libssp \ + --disable-libgomp --disable-libmudflap \ + --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}" diff --git a/packages/gcc/gcc-cross_4.2.4.bb b/packages/gcc/gcc-cross_4.2.4.bb new file mode 100644 index 0000000000..68c4d70551 --- /dev/null +++ b/packages/gcc/gcc-cross_4.2.4.bb @@ -0,0 +1,12 @@ +PR = "r0" + +require gcc-${PV}.inc +require gcc-cross4.inc +require gcc-configure-cross.inc +require gcc-package-cross.inc + +SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " + +EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}" + +ARCH_FLAGS_FOR_TARGET += "-isystem${STAGING_DIR_TARGET}${layout_includedir}" diff --git a/packages/gcc/gcc-cross_4.3.0.bb b/packages/gcc/gcc-cross_4.3.0.bb index 9821d3cd83..11e04594fc 100644 --- a/packages/gcc/gcc-cross_4.3.0.bb +++ b/packages/gcc/gcc-cross_4.3.0.bb @@ -1,4 +1,4 @@ -PR = "r5" +PR = "r6" require gcc-${PV}.inc require gcc-cross4.inc diff --git a/packages/gcc/gcc_4.2.4.bb b/packages/gcc/gcc_4.2.4.bb new file mode 100644 index 0000000000..f191a18f3a --- /dev/null +++ b/packages/gcc/gcc_4.2.4.bb @@ -0,0 +1,10 @@ +PR = "r0" + +require gcc-${PV}.inc +require gcc-configure-target.inc +require gcc-package-target.inc + +SRC_URI_append = "file://fortran-cross-compile-hack.patch;patch=1" + +ARCH_FLAGS_FOR_TARGET += "-isystem${STAGING_INCDIR}" + diff --git a/packages/glibc/eglibc-initial_svn.bb b/packages/glibc/eglibc-initial_svn.bb deleted file mode 100644 index cbe4878529..0000000000 --- a/packages/glibc/eglibc-initial_svn.bb +++ /dev/null @@ -1,48 +0,0 @@ -require eglibc_${PV}.bb - -DEPENDS = "linux-libc-headers" -PROVIDES = "virtual/${TARGET_PREFIX}libc-initial" -FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/glibc-2.4', '${FILE_DIRNAME}/glibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" - -PACKAGES = "" -PACKAGES_DYNAMIC = "" - -do_configure () { - sed -ie 's,{ (exit 1); exit 1; }; },{ (exit 0); }; },g' ${S}/configure - chmod +x ${S}/configure - unset CFLAGS - find ${S} -name "configure" | xargs touch - CC="${BUILD_CC}" CPP="${BUILD_CPP}" LD="${BUILD_LD}" ${S}/configure --host=${TARGET_SYS} --build=${BUILD_SYS} \ - --without-cvs --disable-sanity-checks \ - --with-headers=${STAGING_INCDIR} \ - --enable-hacker-mode - if grep -q GLIBC_2.3 ${S}/ChangeLog; then - # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c, which fails without a real cross-compiler. - # Fortunately, we don't need errlist-compat.c, since we just need .h files, - # so work around this by creating a fake errlist-compat.c and satisfying its dependencies. - # Another workaround might be to tell configure to not use any cross options to $(CC). - # The real fix would be to get install-headers to not generate errlist-compat.c. - make sysdeps/gnu/errlist.c - mkdir -p stdio-common - touch stdio-common/errlist-compat.c - fi -} - -do_compile () { - : -} - -do_stage () { - oe_runmake cross-compiling=yes install_root=${STAGING_DIR_HOST} includedir=${layout_includedir} prefix="" install-headers - - # Two headers -- stubs.h and features.h -- aren't installed by install-headers, - # so do them by hand. We can tolerate an empty stubs.h for the moment. - # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html - mkdir -p ${STAGING_INCDIR}/gnu - touch ${STAGING_INCDIR}/gnu/stubs.h - cp ${S}/include/features.h ${STAGING_INCDIR}/features.h -} - -do_install () { - : -} diff --git a/packages/glibc/eglibc-svn/eglibc-svn-arm-cargs6.patch b/packages/glibc/eglibc-svn/eglibc-svn-arm-cargs6.patch deleted file mode 100644 index ef9708faaa..0000000000 --- a/packages/glibc/eglibc-svn/eglibc-svn-arm-cargs6.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- libc/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h.org 2008-04-04 18:44:53.000000000 -0700 -+++ libc/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2008-04-04 18:45:27.000000000 -0700 -@@ -73,6 +73,9 @@ - # define DOCARGS_5 DOCARGS_4 - # define UNDOCARGS_5 UNDOCARGS_4 - -+# define DOCARGS_6 DOCARGS_5 -+# define UNDOCARGS_6 UNDOCARGS_5 -+ - # ifdef IS_IN_libpthread - # define CENABLE bl PLTJMP(__pthread_enable_asynccancel) - # define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) diff --git a/packages/glibc/eglibc-svn/eglibc-svn-arm-check_pf.patch b/packages/glibc/eglibc-svn/eglibc-svn-arm-check_pf.patch deleted file mode 100644 index cf45035f99..0000000000 --- a/packages/glibc/eglibc-svn/eglibc-svn-arm-check_pf.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: eglibc/ports/sysdeps/unix/sysv/linux/arm/check_pf.c -=================================================================== ---- eglibc/ports/sysdeps/unix/sysv/linux/arm/check_pf.c (revision 5790) -+++ eglibc/ports/sysdeps/unix/sysv/linux/arm/check_pf.c (working copy) -@@ -200,16 +200,12 @@ - } - - if (ifam->ifa_flags & (IFA_F_DEPRECATED -- | IFA_F_TEMPORARY - | IFA_F_HOMEADDRESS)) - { - struct in6ailist *newp = alloca (sizeof (*newp)); - newp->info.flags = (((ifam->ifa_flags & IFA_F_DEPRECATED) - ? in6ai_deprecated : 0) - | ((ifam->ifa_flags -- & IFA_F_TEMPORARY) -- ? in6ai_temporary : 0) -- | ((ifam->ifa_flags - & IFA_F_HOMEADDRESS) - ? in6ai_homeaddress : 0)); - memcpy (newp->info.addr, address ?: local, diff --git a/packages/glibc/glibc-stage.inc b/packages/glibc/glibc-stage.inc index a86cf7888e..46220d7831 100644 --- a/packages/glibc/glibc-stage.inc +++ b/packages/glibc/glibc-stage.inc @@ -16,8 +16,8 @@ do_stage() { install -m 0644 ${S}/sunrpc/rpcsvc/$h ${STAGING_INCDIR}/rpcsvc/ done for i in libc.a libc_pic.a libc_nonshared.a; do - install -m 0644 ${B}/$i ${STAGING_DIR_HOST}/${layout_base_libdir}/ || die "failed to install $i" + install -m 0644 ${B}/$i ${STAGING_DIR_HOST}/${layout_libdir}/ || die "failed to install $i" done - echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${STAGING_DIR_HOST}/${layout_base_libdir}/libpthread.so - echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${STAGING_DIR_HOST}/${layout_base_libdir}/libc.so + echo 'GROUP ( ${layout_base_libdir}/libpthread.so.0 ${layout_libdir}/libpthread_nonshared.a )' > ${STAGING_DIR_HOST}/${layout_libdir}/libpthread.so + echo 'GROUP ( ${layout_base_libdir}/libc.so.6 ${layout_libdir}/libc_nonshared.a )' > ${STAGING_DIR_HOST}/${layout_libdir}/libc.so } diff --git a/packages/glibc/glibc_2.3.2+cvs20040726.bb b/packages/glibc/glibc_2.3.2+cvs20040726.bb index c40968dd7f..8beed8e8dc 100644 --- a/packages/glibc/glibc_2.3.2+cvs20040726.bb +++ b/packages/glibc/glibc_2.3.2+cvs20040726.bb @@ -3,7 +3,7 @@ require glibc.inc DEFAULT_PREFERENCE_sh3 = "-99" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs" -PR = "r25" +PR = "r26" GLIBC_ADDONS ?= "linuxthreads" diff --git a/packages/glibc/glibc_2.3.2.bb b/packages/glibc/glibc_2.3.2.bb index 6ea2951eb6..fc06794e61 100644 --- a/packages/glibc/glibc_2.3.2.bb +++ b/packages/glibc/glibc_2.3.2.bb @@ -1,6 +1,6 @@ require glibc.inc -PR = "r14" +PR = "r15" DEFAULT_PREFERENCE_sh3 = "-99" diff --git a/packages/glibc/glibc_2.3.3+cvs20041128.bb b/packages/glibc/glibc_2.3.3+cvs20041128.bb index 9c344ccc46..4c9b3dce94 100644 --- a/packages/glibc/glibc_2.3.3+cvs20041128.bb +++ b/packages/glibc/glibc_2.3.3+cvs20041128.bb @@ -3,7 +3,7 @@ require glibc.inc DEFAULT_PREFERENCE_sh3 = "-99" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs" -PR = "r10" +PR = "r11" GLIBC_ADDONS ?= "linuxthreads" diff --git a/packages/glibc/glibc_2.3.3+cvs20050221.bb b/packages/glibc/glibc_2.3.3+cvs20050221.bb index 51de036ece..4517adedcc 100644 --- a/packages/glibc/glibc_2.3.3+cvs20050221.bb +++ b/packages/glibc/glibc_2.3.3+cvs20050221.bb @@ -3,7 +3,7 @@ require glibc.inc DEFAULT_PREFERENCE_sh3 = "-99" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs" -PR = "r10" +PR = "r11" GLIBC_ADDONS ?= "linuxthreads" diff --git a/packages/glibc/glibc_2.3.3+cvs20050420.bb b/packages/glibc/glibc_2.3.3+cvs20050420.bb index 6fb4b12293..b1a5d66b17 100644 --- a/packages/glibc/glibc_2.3.3+cvs20050420.bb +++ b/packages/glibc/glibc_2.3.3+cvs20050420.bb @@ -5,7 +5,7 @@ DEFAULT_PREFERENCE_i586 = "0" DEFAULT_PREFERENCE_sh3 = "-99" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs" -PR = "r8" +PR = "r9" GLIBC_ADDONS ?= "linuxthreads" diff --git a/packages/glibc/glibc_2.3.3.bb b/packages/glibc/glibc_2.3.3.bb index b1eeef30f0..510709aba9 100644 --- a/packages/glibc/glibc_2.3.3.bb +++ b/packages/glibc/glibc_2.3.3.bb @@ -1,6 +1,6 @@ require glibc.inc -PR = "r11" +PR = "r12" DEFAULT_PREFERENCE_sh3 = "-99" diff --git a/packages/glibc/glibc_2.3.5+cvs20050627.bb b/packages/glibc/glibc_2.3.5+cvs20050627.bb index 4e80f90d2c..d0a396d465 100644 --- a/packages/glibc/glibc_2.3.5+cvs20050627.bb +++ b/packages/glibc/glibc_2.3.5+cvs20050627.bb @@ -2,7 +2,7 @@ require glibc.inc FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs-2.3.5" SRCDATE = "20050627" -PR = "r17" +PR = "r18" #Doesnt build for sh3 DEFAULT_PREFERENCE_sh3="-1" diff --git a/packages/glibc/glibc_2.3.6.bb b/packages/glibc/glibc_2.3.6.bb index bebc48dfa5..4519be9d03 100644 --- a/packages/glibc/glibc_2.3.6.bb +++ b/packages/glibc/glibc_2.3.6.bb @@ -1,5 +1,7 @@ require glibc.inc +PR = "r0" + #FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/glibc-2.3.6', '${FILE_DIRNAME}/orig/glibc', '${FILE_DIRNAME}/orig/files', '${FILE_DIRNAME}/orig' ], d)}" GLIBC_ADDONS ?= "linuxthreads" diff --git a/packages/glibc/glibc_2.4.bb b/packages/glibc/glibc_2.4.bb index 0ab3dbb157..1112486c50 100644 --- a/packages/glibc/glibc_2.4.bb +++ b/packages/glibc/glibc_2.4.bb @@ -1,6 +1,6 @@ require glibc.inc -PR = "r15" +PR = "r16" #add the hosts that are confirmed to be working to COMPATIBLE_HOSTi COMPATIBLE_HOST = '(i.86.*-linux|sh.*-linux)' diff --git a/packages/glibc/glibc_2.5.bb b/packages/glibc/glibc_2.5.bb index c74a748357..6df70076b8 100644 --- a/packages/glibc/glibc_2.5.bb +++ b/packages/glibc/glibc_2.5.bb @@ -1,5 +1,5 @@ require glibc.inc -PR = "r12" +PR = "r13" ARM_INSTRUCTION_SET = "arm" diff --git a/packages/glibc/glibc_2.6.1.bb b/packages/glibc/glibc_2.6.1.bb index c1c0c3150d..5069ea19e2 100644 --- a/packages/glibc/glibc_2.6.1.bb +++ b/packages/glibc/glibc_2.6.1.bb @@ -1,5 +1,5 @@ require glibc.inc -PR = "r5" +PR = "r6" ARM_INSTRUCTION_SET = "arm" diff --git a/packages/glibc/glibc_2.7.bb b/packages/glibc/glibc_2.7.bb index d355d85360..760883c4b6 100644 --- a/packages/glibc/glibc_2.7.bb +++ b/packages/glibc/glibc_2.7.bb @@ -5,7 +5,7 @@ ARM_INSTRUCTION_SET = "arm" PACKAGES_DYNAMIC = "libc6*" RPROVIDES_${PN}-dev = "libc6-dev" -PR = "r2" +PR = "r3" # the -isystem in bitbake.conf screws up glibc do_stage BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}" diff --git a/packages/gnome/libart-lgpl/mipsel/.mtn2git_empty b/packages/gnome/libart-lgpl/mipsel/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/gnome/libart-lgpl/mipsel/.mtn2git_empty diff --git a/packages/gnome/libart-lgpl/mipsel/art_config.h b/packages/gnome/libart-lgpl/mipsel/art_config.h new file mode 100644 index 0000000000..b0e74ad6ae --- /dev/null +++ b/packages/gnome/libart-lgpl/mipsel/art_config.h @@ -0,0 +1,10 @@ +/* Automatically generated by gen_art_config.c */ + +#define ART_SIZEOF_CHAR 1 +#define ART_SIZEOF_SHORT 2 +#define ART_SIZEOF_INT 4 +#define ART_SIZEOF_LONG 4 + +typedef unsigned char art_u8; +typedef unsigned short art_u16; +typedef unsigned int art_u32; diff --git a/packages/gnuchess/files/.mtn2git_empty b/packages/gnuchess/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/gnuchess/files/.mtn2git_empty diff --git a/packages/gnuchess/files/fix_cast_error_and_gnuchess_exec.patch b/packages/gnuchess/files/fix_cast_error_and_gnuchess_exec.patch new file mode 100644 index 0000000000..8dba103dc3 --- /dev/null +++ b/packages/gnuchess/files/fix_cast_error_and_gnuchess_exec.patch @@ -0,0 +1,23 @@ +diff -Naur fltk-chess.orig/fltk-chess.cxx fltk-chess/fltk-chess.cxx +--- fltk-chess.orig/fltk-chess.cxx 2005-08-25 01:42:28.000000000 +0400 ++++ fltk-chess/fltk-chess.cxx 2008-05-17 19:26:57.000000000 +0400 +@@ -705,8 +705,8 @@ + + void cb_P(Fl_Widget * ob, void *p) + { +- +- changeP = (char) p; ++ int temp_p = (int) p; ++ changeP = (char) temp_p; + } + + +@@ -881,7 +881,7 @@ + // close(fdFrom[0]); + // close(fdFrom[1]); + +- execl("./gnuchess", NULL); ++ execl("/bin/sh", "/bin/sh", "-c", "exec gnuchess", NULL); + + } else { + diff --git a/packages/gnuchess/files/fltk-chess.desktop b/packages/gnuchess/files/fltk-chess.desktop new file mode 100644 index 0000000000..6c422659d6 --- /dev/null +++ b/packages/gnuchess/files/fltk-chess.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=FLTK Chess +Comment=FLTK frontend to GNUchess +Exec=fltk-chess +Type=Application +Icon=fltk-chess +Categories=Game;BoardGame; diff --git a/packages/gnuchess/fltk-chess_0.5.bb b/packages/gnuchess/fltk-chess_0.5.bb new file mode 100644 index 0000000000..fae7411329 --- /dev/null +++ b/packages/gnuchess/fltk-chess_0.5.bb @@ -0,0 +1,33 @@ +DESCRIPTION = "fltk-chess is a frontend for the Gnuchess chess playing engine." +AUTHOR = "Andreas Holzer <a.holzer@cheese.at>" +SECTION = "x11/games" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "fltk" +RDEPENDS = "gnuchess" + + +SRC_URI = "http://members.cheese.at/woody/fltk-chess/fltk-chess-${PV}.tgz \ + file://fix_cast_error_and_gnuchess_exec.patch;patch=1 \ + file://fltk-chess.desktop" +S = "${WORKDIR}/fltk-chess/" + + +do_compile() { + `fltk-config --cxx --cxxflags --ldflags --use-images` -o fltk-chess \ + fltk-chess.cxx +} + +do_install() { + install -d ${D}${bindir} + install -d ${D}${datadir}/pixmaps/fltk-chess/ + install -d ${D}${datadir}/applications/ + install -m 0755 ${S}/fltk-chess ${D}${bindir} + install -m 0644 ${S}/bitmaps/*.pnx ${D}${datadir}/pixmaps/fltk-chess/ + install -m 0644 ${S}/bitmaps/{user,computer}.png \ + ${D}${datadir}/pixmaps/fltk-chess/ + install -m 0644 ${S}/bitmaps/fltk-chess.png ${D}${datadir}/pixmaps/ + install -m 0644 ${WORKDIR}/fltk-chess.desktop ${D}${datadir}/applications/ +} + + diff --git a/packages/gpe-conf/gpe-conf_0.2.7.bb b/packages/gpe-conf/gpe-conf_0.2.7.bb new file mode 100644 index 0000000000..b908e6c50b --- /dev/null +++ b/packages/gpe-conf/gpe-conf_0.2.7.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "Configuration applets for GPE" +SECTION = "gpe" +PRIORITY = "optional" +LICENSE = "GPL" + +DEPENDS = "gtk+ esound audiofile libgpewidget libxsettings libxsettings-client libxrandr" +RDEPENDS_${PN} = "xst gpe-confd xset ntpdate gpe-icons tzdata xrandr" +RDEPENDS_gpe-conf-panel = "gpe-conf" + +RPROVIDES_${PN} += " bl" +RCONFLICTS_${PN} = "bl" + +PR = "r0" + +GPE_TARBALL_SUFFIX = "bz2" + +inherit gpe autotools pkgconfig + +PACKAGES += "gpe-conf-panel" + +FILES_${PN} = "${sysconfdir} ${bindir} ${datadir}/pixmaps \ + ${datadir}/applications/gpe-conf-* ${datadir}/gpe/pixmaps \ + ${datadir}/gpe-conf" +FILES_gpe-conf-panel = "${datadir}/applications/gpe-conf.desktop" + diff --git a/packages/gpe-login/gpe-login_0.92.bb b/packages/gpe-login/gpe-login_0.92.bb new file mode 100644 index 0000000000..ec168bfc93 --- /dev/null +++ b/packages/gpe-login/gpe-login_0.92.bb @@ -0,0 +1,24 @@ +DESCRIPTION = "GPE user login screen" +SECTION = "gpe" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "gtk+ libgpewidget gpe-ownerinfo xkbd" +RDEPENDS = "xkbd gpe-theme-clearlooks" +RPROVIDES_${PN} = "gpe-session-starter" +PR = "r0" + +SRC_URI_OVERRIDES_PACKAGE_ARCH = "1" + +GPE_TARBALL_SUFFIX = "bz2" + +inherit gpe autotools pkgconfig + + +SRC_URI += "file://removeblue-fontsize8.patch;patch=1" +SRC_URI += " file://chvt-keylaunch.patch;patch=1 " +SRC_URI += " file://c-locale.patch;patch=1 " + +SRC_URI_append_spitz = "file://brightness-adjust-keyluanchrc.patch;patch=1" +SRC_URI_append_akita = "file://brightness-adjust-keyluanchrc.patch;patch=1" +SRC_URI_append_c7x0 = "file://brightness-adjust-keyluanchrc.patch;patch=1" + diff --git a/packages/gpe-session-scripts/gpe-session-scripts_0.68.bb b/packages/gpe-session-scripts/gpe-session-scripts_0.68.bb new file mode 100644 index 0000000000..5daf39c836 --- /dev/null +++ b/packages/gpe-session-scripts/gpe-session-scripts_0.68.bb @@ -0,0 +1,56 @@ +inherit gpe + +DESCRIPTION = "GPE session startup scripts" +LICENSE = "GPL" +SECTION = "gpe" +PRIORITY = "optional" +RDEPENDS_${PN} = "matchbox-panel matchbox-desktop matchbox-common gpe-session-starter xtscal gpe-question matchbox-applet-inputmanager xmodmap xdpyinfo xserver-common ipaq-sleep" +# more rdepends: keylaunch apmd blueprobe +DEPENDS = "matchbox-wm matchbox-panel xtscal gpe-question matchbox-applet-inputmanager xmodmap xdpyinfo xserver-common ipaq-sleep" + +SRC_URI += "file://matchbox-session \ + file://disable-composite.xsettings" + +PR = "r0" + +#apply a patch to set the fontsize for bigdpi (200+) devices to 5 +SRC_URI_append_hx4700 = " file://highdpifontfix.patch;patch=1" +SRC_URI_append_spitz = " file://highdpifontfix.patch;patch=1" +SRC_URI_append_akita = " file://highdpifontfix.patch;patch=1" +SRC_URI_append_c7x0 = " file://highdpifontfix.patch;patch=1" +SRC_URI_append_nokia770 = " file://highdpifontfix.patch;patch=1" + + +do_configure_append_angstrom() { + sed -i s:Default:Clearlooks:g X11/xsettings.default + sed -i s:Industrial:Clearlooks:g X11/xsettings.default +} + +export CURSOR_HIDE = '${@base_contains("MACHINE_FEATURES","touchscreen","-use_cursor no","-use_cursor yes",d)}' + +do_install_append() { + install -d ${D}${sysconfdir}/gpe/xsettings-default.d + if [ "${GUI_MACHINE_CLASS}" != "bigscreen" ]; then + echo "Gtk/ToolbarStyle:S:icons" > ${D}${sysconfdir}/gpe/xsettings-default.d/toolbar + fi + install -d ${D}${sysconfdir}/matchbox + install ${WORKDIR}/matchbox-session ${D}${sysconfdir}/matchbox/session + printf "exec matchbox-window-manager ${CURSOR_HIDE} \$@ \n" >> ${D}${sysconfdir}/matchbox/session + + + install -d ${D}${sysconfdir}/gpe/xsettings-default.d + install -m 0644 ${WORKDIR}/disable-composite.xsettings ${D}${sysconfdir}/gpe/xsettings-default.d/disable-composite + + mv ${D}/usr/bin/gpe-logout.sh ${D}/usr/bin/gpe-logout.sh.matchbox +} + +pkg_postinst_${PN}() { + update-alternatives --install /usr/bin/gpe-logout.sh gpe-logout.sh /usr/bin/gpe-logout.sh.matchbox 10 +} + +pkg_postrm_${PN}() { + update-alternatives --remove gpe-logout.sh /usr/bin/gpe-logout.sh.matchbox +} + +# This makes use of GUI_MACHINE_CLASS, so set PACKAGE_ARCH appropriately +PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/packages/gpe-todo/gpe-todo_0.57.bb b/packages/gpe-todo/gpe-todo_0.57.bb new file mode 100644 index 0000000000..b76e173d16 --- /dev/null +++ b/packages/gpe-todo/gpe-todo_0.57.bb @@ -0,0 +1,3 @@ +require gpe-todo.inc + +DEPENDS += "gtk+ libgpepimc" diff --git a/packages/gtkmm/gtkmm_2.10.11.bb b/packages/gtkmm/gtkmm_2.12.7.bb index b8ba69f50e..b8ba69f50e 100644 --- a/packages/gtkmm/gtkmm_2.10.11.bb +++ b/packages/gtkmm/gtkmm_2.12.7.bb diff --git a/packages/images/fso-image.bb b/packages/images/fso-image.bb index 72cbfd71c6..1d90b5c35f 100644 --- a/packages/images/fso-image.bb +++ b/packages/images/fso-image.bb @@ -24,6 +24,7 @@ MICKEY_INSTALL = "\ ZHONE_INSTALL = "\ gsm0710muxd \ python-odeviced \ + python-oeventd \ python-ophoned \ python-ousaged \ zhone \ @@ -50,6 +51,10 @@ IMAGE_INSTALL = "\ \ python-codecs \ \ + openmoko-alsa-scenarios \ + openmoko-sound-system2 \ + openmoko-sound-theme-standard2 \ + \ ${ADD_INSTALL} \ ${MICKEY_INSTALL} \ ${ZHONE_INSTALL} \ diff --git a/packages/lcd4linux/.mtn2git_empty b/packages/lcd4linux/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/lcd4linux/.mtn2git_empty diff --git a/packages/lcd4linux/files/.mtn2git_empty b/packages/lcd4linux/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/lcd4linux/files/.mtn2git_empty diff --git a/packages/lcd4linux/files/lcd4linux.init b/packages/lcd4linux/files/lcd4linux.init new file mode 100644 index 0000000000..0972c9005e --- /dev/null +++ b/packages/lcd4linux/files/lcd4linux.init @@ -0,0 +1,56 @@ +#! /bin/sh + +### BEGIN INIT INFO +# Provides: lcd4linux +# Required-Start: +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: daemon for driving LCD based displays +# Description: LCD4Linux is a small program that grabs information from +# the kernel and some subsystems and displays it on an +# external liquid crystal display. +### END INIT INFO + +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/lcd4linux +NAME=lcd4linux +DESC=lcd4linux + +test -x $DAEMON || exit 0 +test -f /etc/lcd4linux.conf || exit 0 + +set -e + +case "$1" in + start) + echo -n "Starting $DESC: " + chmod 600 /etc/lcd4linux.conf + start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON -- $DAEMON_OPTS + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON || true + echo "$NAME." + ;; + restart|force-reload) + echo -n "Restarting $DESC: " + start-stop-daemon --stop --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON + sleep 1 + start-stop-daemon --start --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS + echo "$NAME." + ;; + *) + N=/etc/init.d/$NAME + # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $N {start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/packages/lcd4linux/lcd4linux_0.10.0.bb b/packages/lcd4linux/lcd4linux_0.10.0.bb new file mode 100644 index 0000000000..7b820dd254 --- /dev/null +++ b/packages/lcd4linux/lcd4linux_0.10.0.bb @@ -0,0 +1,26 @@ +DESCRIPTION = "LCD4Linux is a small program that grabs information from the kernel and some subsystems and displays it on an external liquid crystal display." +LICENSE = "GPLv2" + +DEPENDS = "libusb ncurses readline virtual/libx11" + +PV = "0.10.0+0.10.1-RC2" +PR = "r1" + +SRC_URI = "http://ssl.bulix.org/projects/lcd4linux/raw-attachment/wiki/Download/lcd4linux-0.10.1-RC2.tar.gz \ + file://lcd4linux.init" + +S = "${WORKDIR}/lcd4linux-0.10.1-RC2" + + +inherit autotools update-rc.d + +INITSCRIPT_NAME = "lcd4linux" +CONFFILES_${PN} += "${sysconfdir}/lcd4linux.conf" + +do_install_append() { + install -d ${D}/${sysconfdir} + install -m 0600 ${S}/lcd4linux.conf.sample ${D}/${sysconfdir}/lcd4linux.conf + install -d ${D}/${INIT_D_DIR} + install -m 0755 ${WORKDIR}/lcd4linux.init ${D}/${INIT_D_DIR}/lcd4linux +} + diff --git a/packages/lcms/lcms_1.13.bb b/packages/lcms/lcms_1.13.bb index b2a2f960aa..af1869e75d 100644 --- a/packages/lcms/lcms_1.13.bb +++ b/packages/lcms/lcms_1.13.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Little cms is a small-footprint, speed optimized color management engine." SECTION = "libs" LICENSE = "LGPL" -SRC_URI = "http://www.littlecms.com/lcms-${PV}.tar.gz" +SRC_URI = "${SOURCEFORGE_MIRROR}/lcms/lcms-${PV}.tar.gz" inherit autotools pkgconfig diff --git a/packages/lcms/lcms_1.15.bb b/packages/lcms/lcms_1.17.bb index c8b6ede7fb..f4f3dd20ff 100644 --- a/packages/lcms/lcms_1.15.bb +++ b/packages/lcms/lcms_1.17.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Little cms is a small-footprint, speed optimized color management engine." SECTION = "libs" LICENSE = "LGPL" -SRC_URI = "http://www.littlecms.com/lcms-${PV}.tar.gz" +SRC_URI = "${SOURCEFORGE_MIRROR}/lcms/lcms-${PV}.tar.gz" inherit autotools pkgconfig diff --git a/packages/libmatthew/files/.mtn2git_empty b/packages/libmatthew/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/libmatthew/files/.mtn2git_empty diff --git a/packages/libmatthew/files/Makefile-0.7.patch b/packages/libmatthew/files/Makefile-0.7.patch new file mode 100644 index 0000000000..4a91cd52cf --- /dev/null +++ b/packages/libmatthew/files/Makefile-0.7.patch @@ -0,0 +1,15 @@ +Index: libmatthew-java-0.7/Makefile +=================================================================== +--- libmatthew-java-0.7.orig/Makefile 2008-05-27 13:17:47.000000000 +0800 ++++ libmatthew-java-0.7/Makefile 2008-05-27 13:18:04.000000000 +0800 +@@ -8,8 +8,8 @@ + PPFLAGS+=-C -P + CFLAGS+=-fpic -Wall -Os -pedantic -std=c99 -Werror + GCJFLAGS+=-fjni +-JCFLAGS+=-source 5.0 +-INCLUDES+=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux ++#JCFLAGS+=-source 5.0 ++#INCLUDES+=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux + JAVADOCFLAGS?=-quiet -author -link http://java.sun.com/j2se/1.4.2/docs/api/ + + LDVER?=$(shell ld -v | cut -d' ' -f1) diff --git a/packages/libmatthew/libmatthew_0.7.bb b/packages/libmatthew/libmatthew_0.7.bb new file mode 100644 index 0000000000..68be750f8e --- /dev/null +++ b/packages/libmatthew/libmatthew_0.7.bb @@ -0,0 +1,50 @@ +DESCRIPTION = "Unix socket, debug and hexdump libraries" +AUTHOR = "Matthew Johnson <web@matthew.ath.cx>" +HOMEPAGE = "http://www.matthew.ath.cx/projects/java" +SECTION = "libs" +LICENSE = "LGPL" +DEPENDS = "classpath-native classpath fastjar-native virtual/javac-native" +RDEPENDS_${JPN} = "${PN}-jni" +PR = "r0" + +SRC_URI = "http://www.matthew.ath.cx/projects/java/libmatthew-java-${PV}.tar.gz \ + file://Makefile-0.7.patch;patch=1" + +S = "${WORKDIR}/libmatthew-java-${PV}" + +inherit java-library + +do_compile() { + oe_runmake \ + JCFLAGS="-source 1.5" \ + JAVAC="javac" \ + JAR="fastjar" \ + JAVAH="gjavah" \ + INCLUDES="-I${STAGING_INCDIR}/classpath" \ + LDFLAGS="-fpic -shared -lc ${LDFLAGS}" \ + LD="${CC}" \ + CFLAGS="-fpic -Wall -Os -pedantic -std=c99 -Werror" +} +do_install() { + oe_jarinstall cgi-0.5.jar cgi.jar + oe_jarinstall debug-disable-1.1.jar debug-disable.jar + oe_jarinstall debug-enable-1.1.jar debug-enable.jar + oe_jarinstall hexdump-0.2.jar hexdump.jar + oe_jarinstall io-0.1.jar io.jar + oe_jarinstall unix-0.4.jar unix.jar + oe_libinstall -so libcgi-java ${D}${libdir_jni} + oe_libinstall -so libunix-java ${D}${libdir_jni} +} +do_stage() { + oe_jarinstall -s cgi-0.5.jar cgi.jar + oe_jarinstall -s debug-disable-1.1.jar debug-disable.jar + oe_jarinstall -s debug-enable-1.1.jar debug-enable.jar + oe_jarinstall -s hexdump-0.2.jar hexdump.jar + oe_jarinstall -s io-0.1.jar io.jar + oe_jarinstall -s unix-0.4.jar unix.jar +} + +PACKAGES += "${PN}-jni ${PN}-jni-dbg" + +FILES_${PN}-jni = "${libdir_jni}/lib*.so" +FILES_${PN}-jni-dbg = "${libdir_jni}/.debug/lib*.so" diff --git a/packages/liboil/liboil_0.3.14.bb b/packages/liboil/liboil_0.3.14.bb new file mode 100644 index 0000000000..ebbe6cfb97 --- /dev/null +++ b/packages/liboil/liboil_0.3.14.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "Liboil is a library of simple functions that are optimized for various CPUs." +HOMEPAGE = "http://liboil.freedesktop.org/" +LICENSE = "various" + +# The configure script seems to have bogus checks, so let's not make it the default +DEFAULT_PREFERENCE = "-1" + +DEPENDS = "glib-2.0" + +SRC_URI = "http://liboil.freedesktop.org/download/${P}.tar.gz \ + " + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} diff --git a/packages/libpcap/libpcap-0.9.8/aclocal.patch b/packages/libpcap/libpcap-0.9.8/aclocal.patch new file mode 100644 index 0000000000..29cd275d58 --- /dev/null +++ b/packages/libpcap/libpcap-0.9.8/aclocal.patch @@ -0,0 +1,156 @@ +diff -Naru libpcap-0.9.7.orig/aclocal.m4 libpcap-0.9.7/acinclude.m4 +--- libpcap-0.9.7.orig/aclocal.m4 2007-09-16 01:19:51.000000000 +0200 ++++ libpcap-0.9.7/aclocal.m4 2007-09-16 02:45:52.000000000 +0200 +@@ -42,7 +42,7 @@ + dnl ac_cv_lbl_gcc_vers + dnl LBL_CFLAGS + dnl +-AC_DEFUN(AC_LBL_C_INIT, ++AC_DEFUN([AC_LBL_C_INIT], + [AC_PREREQ(2.12) + AC_BEFORE([$0], [AC_PROG_CC]) + AC_BEFORE([$0], [AC_LBL_FIXINCLUDES]) +@@ -169,7 +169,7 @@ + # Make sure we use the V_CCOPT flags, because some of those might + # disable inlining. + # +-AC_DEFUN(AC_LBL_C_INLINE, ++AC_DEFUN([AC_LBL_C_INLINE], + [AC_MSG_CHECKING(for inline) + save_CFLAGS="$CFLAGS" + CFLAGS="$V_CCOPT" +@@ -225,7 +225,7 @@ + dnl LIBS + dnl LBL_LIBS + dnl +-AC_DEFUN(AC_LBL_LIBPCAP, ++AC_DEFUN([AC_LBL_LIBPCAP], + [AC_REQUIRE([AC_LBL_LIBRARY_NET]) + dnl + dnl save a copy before locating libpcap.a +@@ -293,7 +293,7 @@ + dnl RETSIGTYPE (defined) + dnl RETSIGVAL (defined) + dnl +-AC_DEFUN(AC_LBL_TYPE_SIGNAL, ++AC_DEFUN([AC_LBL_TYPE_SIGNAL], + [AC_BEFORE([$0], [AC_LBL_LIBPCAP]) + AC_TYPE_SIGNAL + if test "$ac_cv_type_signal" = void ; then +@@ -323,7 +323,7 @@ + dnl + dnl AC_LBL_FIXINCLUDES + dnl +-AC_DEFUN(AC_LBL_FIXINCLUDES, ++AC_DEFUN([AC_LBL_FIXINCLUDES], + [if test "$GCC" = yes ; then + AC_MSG_CHECKING(for ANSI ioctl definitions) + AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes, +@@ -369,7 +369,7 @@ + dnl $2 (yacc appended) + dnl $3 (optional flex and bison -P prefix) + dnl +-AC_DEFUN(AC_LBL_LEX_AND_YACC, ++AC_DEFUN([AC_LBL_LEX_AND_YACC], + [AC_ARG_WITH(flex, [ --without-flex don't use flex]) + AC_ARG_WITH(bison, [ --without-bison don't use bison]) + if test "$with_flex" = no ; then +@@ -422,7 +422,7 @@ + dnl + dnl DECLWAITSTATUS (defined) + dnl +-AC_DEFUN(AC_LBL_UNION_WAIT, ++AC_DEFUN([AC_LBL_UNION_WAIT], + [AC_MSG_CHECKING(if union wait is used) + AC_CACHE_VAL(ac_cv_lbl_union_wait, + AC_TRY_COMPILE([ +@@ -451,7 +451,7 @@ + dnl + dnl HAVE_SOCKADDR_SA_LEN (defined) + dnl +-AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN, ++AC_DEFUN([AC_LBL_SOCKADDR_SA_LEN], + [AC_MSG_CHECKING(if sockaddr struct has sa_len member) + AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len, + AC_TRY_COMPILE([ +@@ -476,7 +476,7 @@ + dnl + dnl HAVE_SOCKADDR_STORAGE (defined) + dnl +-AC_DEFUN(AC_LBL_SOCKADDR_STORAGE, ++AC_DEFUN([AC_LBL_SOCKADDR_STORAGE], + [AC_MSG_CHECKING(if sockaddr_storage struct exists) + AC_CACHE_VAL(ac_cv_lbl_has_sockaddr_storage, + AC_TRY_COMPILE([ +@@ -509,7 +509,7 @@ + dnl won't be using code that would use that member, or we wouldn't + dnl compile in any case). + dnl +-AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1, ++AC_DEFUN([AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1], + [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member) + AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1, + AC_TRY_COMPILE([ +@@ -535,7 +535,7 @@ + dnl + dnl ac_cv_lbl_have_run_path (yes or no) + dnl +-AC_DEFUN(AC_LBL_HAVE_RUN_PATH, ++AC_DEFUN([AC_LBL_HAVE_RUN_PATH], + [AC_MSG_CHECKING(for ${CC-cc} -R) + AC_CACHE_VAL(ac_cv_lbl_have_run_path, + [echo 'main(){}' > conftest.c +@@ -561,7 +561,7 @@ + dnl int32_t (defined) + dnl u_int32_t (defined) + dnl +-AC_DEFUN(AC_LBL_CHECK_TYPE, ++AC_DEFUN([AC_LBL_CHECK_TYPE], + [AC_MSG_CHECKING(for $1 using $CC) + AC_CACHE_VAL(ac_cv_lbl_have_$1, + AC_TRY_COMPILE([ +@@ -590,7 +590,7 @@ + dnl + dnl LBL_ALIGN (DEFINED) + dnl +-AC_DEFUN(AC_LBL_UNALIGNED_ACCESS, ++AC_DEFUN([AC_LBL_UNALIGNED_ACCESS], + [AC_MSG_CHECKING(if unaligned accesses fail) + AC_CACHE_VAL(ac_cv_lbl_unaligned_fail, + [case "$host_cpu" in +@@ -695,7 +695,7 @@ + dnl HAVE_OS_PROTO_H (defined) + dnl os-proto.h (symlinked) + dnl +-AC_DEFUN(AC_LBL_DEVEL, ++AC_DEFUN([AC_LBL_DEVEL], + [rm -f os-proto.h + if test "${LBL_CFLAGS+set}" = set; then + $1="$$1 ${LBL_CFLAGS}" +@@ -825,7 +825,7 @@ + dnl statically and happen to have a libresolv.a lying around (and no + dnl libnsl.a). + dnl +-AC_DEFUN(AC_LBL_LIBRARY_NET, [ ++AC_DEFUN([AC_LBL_LIBRARY_NET], [ + # Most operating systems have gethostbyname() in the default searched + # libraries (i.e. libc): + # Some OSes (eg. Solaris) place it in libnsl +@@ -848,7 +848,7 @@ + dnl Test for __attribute__ + dnl + +-AC_DEFUN(AC_C___ATTRIBUTE__, [ ++AC_DEFUN([AC_C___ATTRIBUTE__], [ + AC_MSG_CHECKING(for __attribute__) + AC_CACHE_VAL(ac_cv___attribute__, [ + AC_COMPILE_IFELSE( +@@ -886,7 +886,7 @@ + dnl + dnl -Scott Barron + dnl +-AC_DEFUN(AC_LBL_TPACKET_STATS, ++AC_DEFUN([AC_LBL_TPACKET_STATS], + [AC_MSG_CHECKING(if if_packet.h has tpacket_stats defined) + AC_CACHE_VAL(ac_cv_lbl_tpacket_stats, + AC_TRY_COMPILE([ diff --git a/packages/libpcap/libpcap_0.9.8.bb b/packages/libpcap/libpcap_0.9.8.bb index 865e57ab93..8003d4491f 100644 --- a/packages/libpcap/libpcap_0.9.8.bb +++ b/packages/libpcap/libpcap_0.9.8.bb @@ -1,3 +1,5 @@ require libpcap.inc -PR = "r2" +PR = "r3" + +SRC_URI += "file://aclocal.patch;patch=1" diff --git a/packages/libqpe/libqpe-opie/citytime-path.patch b/packages/libqpe/libqpe-opie/citytime-path.patch new file mode 100644 index 0000000000..0abaf146d7 --- /dev/null +++ b/packages/libqpe/libqpe-opie/citytime-path.patch @@ -0,0 +1,11 @@ +--- library/tzselect.cpp.orig 2008-01-12 21:05:49.000000000 +1300 ++++ library/tzselect.cpp 2008-01-12 21:06:01.000000000 +1300 +@@ -273,7 +273,7 @@ + void TimeZoneSelector::slotExecute( void ) + { + // execute the world time application... +- if (QFile::exists(QPEApplication::qpeDir()+"bin/citytime")) ++ if (QFile::exists(OPIE_BINDIR "/citytime")) + Global::execute( "citytime" ); + else + QMessageBox::warning(this,tr("citytime executable not found"), diff --git a/packages/libqpe/libqpe-opie/fix-sd-card-path.patch b/packages/libqpe/libqpe-opie/fix-sd-card-path.patch new file mode 100644 index 0000000000..32be5d2e7c --- /dev/null +++ b/packages/libqpe/libqpe-opie/fix-sd-card-path.patch @@ -0,0 +1,17 @@ +Index: library/storage.cpp +=================================================================== +RCS file: /cvs/opie/library/storage.cpp,v +retrieving revision 1.25 +retrieving revision 1.26 +diff -U3 -r1.25 -r1.26 +--- library/storage.cpp 7 Mar 2005 14:32:58 -0000 1.25 ++++ library/storage.cpp 29 Dec 2007 02:14:09 -0000 1.26 +@@ -307,7 +307,7 @@ + bool hasMmc=false; + if( deviceTab("/dev/mmc/part")) + hasMmc=true; +- if( deviceTab("/dev/mmcd")) ++ else if( deviceTab("/dev/mmcblk")) + hasMmc=true; + return hasMmc; + } diff --git a/packages/libqpe/libqpe-opie_1.2.3.bb b/packages/libqpe/libqpe-opie_1.2.3.bb index bd2e672fff..a51d6a9225 100644 --- a/packages/libqpe/libqpe-opie_1.2.3.bb +++ b/packages/libqpe/libqpe-opie_1.2.3.bb @@ -1,9 +1,12 @@ require ${PN}.inc +PR = "r2" TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}" SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \ file://fix-titleheight.patch;patch=1 \ file://unbreak-logging.patch;patch=1 \ + file://citytime-path.patch;patch=1 \ + file://fix-sd-card-path.patch;patch=1 \ " diff --git a/packages/libqpe/libqpe-opie_cvs.bb b/packages/libqpe/libqpe-opie_cvs.bb index 10ad8d56ea..e6bf737efa 100644 --- a/packages/libqpe/libqpe-opie_cvs.bb +++ b/packages/libqpe/libqpe-opie_cvs.bb @@ -1,9 +1,11 @@ require ${PN}.inc -PV = "1.2.3+cvs${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r2" SRC_URI = "${HANDHELDS_CVS};module=opie/library \ file://fix-titleheight.patch;patch=1 \ file://unbreak-logging.patch;patch=1 \ + file://citytime-path.patch;patch=1 \ " diff --git a/packages/linux-libc-headers/linux-libc-headers-2.6.25/.mtn2git_empty b/packages/linux-libc-headers/linux-libc-headers-2.6.25/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux-libc-headers/linux-libc-headers-2.6.25/.mtn2git_empty diff --git a/packages/linux-libc-headers/linux-libc-headers-2.6.25/fix-kernel-conditionalize-a.out.h.patch b/packages/linux-libc-headers/linux-libc-headers-2.6.25/fix-kernel-conditionalize-a.out.h.patch new file mode 100644 index 0000000000..30dee5d520 --- /dev/null +++ b/packages/linux-libc-headers/linux-libc-headers-2.6.25/fix-kernel-conditionalize-a.out.h.patch @@ -0,0 +1,15 @@ +diff --git a/include/linux/a.out.h b/include/linux/a.out.h +index 208f4e8..d149699 100644 +--- a/include/linux/a.out.h ++++ b/include/linux/a.out.h +@@ -1,6 +1,10 @@ + #ifndef __A_OUT_GNU_H__ + #define __A_OUT_GNU_H__ + ++#ifndef __KERNEL__ ++#define CONFIG_ARCH_SUPPORTS_AOUT ++#endif ++ + #ifdef CONFIG_ARCH_SUPPORTS_AOUT + + #define __GNU_EXEC_MACROS__ diff --git a/packages/linux-libc-headers/linux-libc-headers-2.6.25/procinfo.h b/packages/linux-libc-headers/linux-libc-headers-2.6.25/procinfo.h new file mode 100644 index 0000000000..8cdf828af8 --- /dev/null +++ b/packages/linux-libc-headers/linux-libc-headers-2.6.25/procinfo.h @@ -0,0 +1,24 @@ +/* + * linux/include/asm-arm/procinfo.h + * + * Copyright (C) 1996-1999 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef __ASM_PROCINFO_H +#define __ASM_PROCINFO_H + +#define HWCAP_SWP 1 +#define HWCAP_HALF 2 +#define HWCAP_THUMB 4 +#define HWCAP_26BIT 8 /* Play it safe */ +#define HWCAP_FAST_MULT 16 +#define HWCAP_FPA 32 +#define HWCAP_VFP 64 +#define HWCAP_EDSP 128 +#define HWCAP_JAVA 256 +#define HWCAP_IWMMXT 512 +#define HWCAP_CRUNCH 1024 +#endif diff --git a/packages/linux-libc-headers/linux-libc-headers-2.6.25/reinstate-a.out.h.patch b/packages/linux-libc-headers/linux-libc-headers-2.6.25/reinstate-a.out.h.patch new file mode 100644 index 0000000000..9032f4e716 --- /dev/null +++ b/packages/linux-libc-headers/linux-libc-headers-2.6.25/reinstate-a.out.h.patch @@ -0,0 +1,14 @@ +diff --git a/include/linux/Kbuild b/include/linux/Kbuild +index 93b9885..b6fbb25 100644 +--- a/include/linux/Kbuild ++++ b/include/linux/Kbuild +@@ -166,6 +166,9 @@ unifdef-y += acct.h + unifdef-y += adb.h + unifdef-y += adfs_fs.h + unifdef-y += agpgart.h ++ifeq ($(wildcard include/asm-$(SRCARCH)/a.out.h),include/asm-$(SRCARCH)/a.out.h) ++unifdef-y += a.out.h ++endif + unifdef-y += apm_bios.h + unifdef-y += atalk.h + unifdef-y += atmdev.h diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.25.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.25.bb new file mode 100644 index 0000000000..f47fd08091 --- /dev/null +++ b/packages/linux-libc-headers/linux-libc-headers_2.6.25.bb @@ -0,0 +1,68 @@ +require linux-libc-headers.inc + +INHIBIT_DEFAULT_DEPS = "1" +DEPENDS += "unifdef-native" +PR = "r1" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ + file://reinstate-a.out.h.patch;patch=1 \ + file://fix-kernel-conditionalize-a.out.h.patch;patch=1 \ + file://procinfo.h" + +S = "${WORKDIR}/linux-${PV}" + +set_arch() { + case ${TARGET_ARCH} in + alpha*) ARCH=alpha ;; + arm*) ARCH=arm ;; + cris*) ARCH=cris ;; + hppa*) ARCH=parisc ;; + i*86*) ARCH=i386 ;; + ia64*) ARCH=ia64 ;; + mips*) ARCH=mips ;; + m68k*) ARCH=m68k ;; + powerpc*) ARCH=powerpc ;; + s390*) ARCH=s390 ;; + sh*) ARCH=sh ;; + sparc64*) ARCH=sparc64 ;; + sparc*) ARCH=sparc ;; + x86_64*) ARCH=x86_64 ;; + avr32*) ARCH=avr32 ;; + bfin*) ARCH=blackfin ;; + esac +} + +do_configure() { + set_arch + oe_runmake allnoconfig ARCH=$ARCH +} + +do_compile () { +} + +do_install() { + set_arch + oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH +} + +do_install_append_arm() { + cp ${WORKDIR}/procinfo.h ${D}${includedir}/asm/ +} + +STAGE_TEMP="${WORKDIR}/temp-staging" + +do_stage () { + set_arch + echo $ARCH + rm -rf ${STAGE_TEMP} + mkdir -p ${STAGE_TEMP} + oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH + if [ "$ARCH" = "arm" ]; then + cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/ + fi + install -d ${STAGING_INCDIR} + rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic + cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/ + cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/ + cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/ +} diff --git a/packages/linux/linux-omap1-2.6.24-omap1/timespec_add_ns_avoid_udivdi3.patch b/packages/linux/linux-omap1-2.6.24-omap1/timespec_add_ns_avoid_udivdi3.patch new file mode 100644 index 0000000000..4aba897b06 --- /dev/null +++ b/packages/linux/linux-omap1-2.6.24-omap1/timespec_add_ns_avoid_udivdi3.patch @@ -0,0 +1,20 @@ +Backport of this patch here + +http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg270684.html + +Needed for 2.6.24 to compile with gcc 4.3 +Index: linux-2.6.24/include/linux/time.h +=================================================================== +--- linux-2.6.24.orig/include/linux/time.h 2008-05-28 15:39:46.000000000 -0700 ++++ linux-2.6.24/include/linux/time.h 2008-05-28 15:40:48.000000000 -0700 +@@ -173,6 +173,10 @@ + { + ns += a->tv_nsec; + while(unlikely(ns >= NSEC_PER_SEC)) { ++ /* The following asm() prevents the compiler from ++ * optimising this loop into a modulo operation. */ ++ asm("" : "+r"(ns)); ++ + ns -= NSEC_PER_SEC; + a->tv_sec++; + } diff --git a/packages/linux/linux-omap1-2.6.25-omap1/.mtn2git_empty b/packages/linux/linux-omap1-2.6.25-omap1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux/linux-omap1-2.6.25-omap1/.mtn2git_empty diff --git a/packages/linux/linux-omap1-2.6.25-omap1/defconfig b/packages/linux/linux-omap1-2.6.25-omap1/defconfig new file mode 100644 index 0000000000..138da037d5 --- /dev/null +++ b/packages/linux/linux-omap1-2.6.25-omap1/defconfig @@ -0,0 +1,1204 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.25-omap1 +# Thu May 29 14:43:54 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_SUPPORTS_AOUT=y +CONFIG_ZONE_DMA=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_GROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_USER_SCHED=y +# CONFIG_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_RELAY is not set +CONFIG_NAMESPACES=y +# CONFIG_UTS_NS is not set +# CONFIG_IPC_NS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_COMPAT_BRK=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +# CONFIG_MARKERS is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_CLASSIC_RCU=y + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_ORION is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +CONFIG_ARCH_OMAP=y +# CONFIG_ARCH_MSM7X00A is not set + +# +# TI OMAP Implementations +# +CONFIG_ARCH_OMAP_OTG=y +CONFIG_ARCH_OMAP1=y +# CONFIG_ARCH_OMAP2 is not set +# CONFIG_ARCH_OMAP3 is not set + +# +# OMAP Feature Selections +# +CONFIG_OMAP_DEBUG_SRAM_PATCH=y +CONFIG_OMAP_RESET_CLOCKS=y +# CONFIG_OMAP_BOOT_TAG is not set +# CONFIG_OMAP_GPIO_SWITCH is not set +CONFIG_OMAP_MUX=y +# CONFIG_OMAP_MUX_DEBUG is not set +CONFIG_OMAP_MUX_WARNINGS=y +CONFIG_OMAP_MCBSP=y +# CONFIG_OMAP_MMU_FWK is not set +# CONFIG_OMAP_MBOX_FWK is not set +# CONFIG_OMAP_MPU_TIMER is not set +CONFIG_OMAP_32K_TIMER=y +CONFIG_OMAP_32K_TIMER_HZ=128 +# CONFIG_OMAP_DM_TIMER is not set +CONFIG_OMAP_LL_DEBUG_UART1=y +# CONFIG_OMAP_LL_DEBUG_UART2 is not set +# CONFIG_OMAP_LL_DEBUG_UART3 is not set +CONFIG_OMAP_SERIAL_WAKE=y + +# +# OMAP Core Type +# +# CONFIG_ARCH_OMAP730 is not set +# CONFIG_ARCH_OMAP15XX is not set +CONFIG_ARCH_OMAP16XX=y + +# +# OMAP Board Type +# +# CONFIG_MACH_OMAP_INNOVATOR is not set +# CONFIG_MACH_OMAP_H2 is not set +# CONFIG_MACH_OMAP_H3 is not set +CONFIG_MACH_OMAP_OSK=y +# CONFIG_OMAP_OSK_MISTRAL is not set +# CONFIG_MACH_NOKIA770 is not set +# CONFIG_MACH_OMAP_GENERIC is not set + +# +# OMAP CPU Speed +# +# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set +# CONFIG_OMAP_ARM_216MHZ is not set +CONFIG_OMAP_ARM_192MHZ=y +# CONFIG_OMAP_ARM_168MHZ is not set +# CONFIG_OMAP_ARM_120MHZ is not set +# CONFIG_OMAP_ARM_60MHZ is not set +# CONFIG_OMAP_ARM_30MHZ is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM926T=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5TJ=y +CONFIG_CPU_PABRT_NOIFAR=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set +# CONFIG_OUTER_CACHE is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_OMAP_CF=y + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_PREEMPT is not set +CONFIG_HZ=128 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE=" debug " +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_VFP is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_APM_EMULATION is not set +CONFIG_ARCH_SUSPEND_POSSIBLE=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_OMAP_NOR=y +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_OMAP_STI is not set +# CONFIG_ENCLOSURE_SERVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_AX88796 is not set +CONFIG_SMC91X=y +# CONFIG_DM9000 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +CONFIG_NETDEV_1000=y +# CONFIG_E1000E_ENABLED is not set +CONFIG_NETDEV_10000=y + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set +# CONFIG_NET_PCMCIA is not set +# CONFIG_WAN is not set +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +# CONFIG_PPP_ASYNC is not set +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=y +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_OMAP=y +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_CS is not set +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +CONFIG_HW_RANDOM_OMAP=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_IPWIRELESS is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_OMAP=y +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_PCF8575 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_ISP1301_OMAP is not set +CONFIG_TPS65010=y +# CONFIG_SENSORS_TLV320AIC23 is not set +# CONFIG_GPIOEXPANDER_OMAP is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_LP5521 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +CONFIG_HAVE_GPIO_LIB=y + +# +# GPIO Support +# + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set + +# +# SPI GPIO expanders: +# +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7473 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_ASIC3 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FB_OMAP=y +# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set +# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set +CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=2 +# CONFIG_FB_OMAP_DMA_TUNE is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_OMAP_AIC23 is not set +# CONFIG_SND_OMAP_TSC2101 is not set +# CONFIG_SND_SX1 is not set +# CONFIG_SND_OMAP_TSC2102 is not set +# CONFIG_SND_OMAP24XX_EAC is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# ALSA SoC audio for Freescale SOCs +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HID_DEBUG=y +# CONFIG_HIDRAW is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +# CONFIG_USB is not set + +# +# Enable Host or Gadget support to see Inventra options +# + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +# CONFIG_NEW_LEDS is not set +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# CBUS support +# +# CONFIG_CBUS is not set +# CONFIG_OMAP_DSP is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_DNOTIFY=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +# CONFIG_CRYPTO_SEQIV is not set +# CONFIG_CRYPTO_MANAGER is not set +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_ECB is not set +# CONFIG_CRYPTO_CBC is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_LZO is not set +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-omap1_2.6.24-omap1.bb b/packages/linux/linux-omap1_2.6.24-omap1.bb index f5ed1a43f9..2f2076b923 100644 --- a/packages/linux/linux-omap1_2.6.24-omap1.bb +++ b/packages/linux/linux-omap1_2.6.24-omap1.bb @@ -5,6 +5,7 @@ COMPATIBLE_MACHINE = "omap5912osk" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ http://www.muru.com/linux/omap/patches/patch-2.6.24-omap1.bz2;patch=1 \ file://binutils-buildid-arm.patch;patch=1 \ + file://timespec_add_ns_avoid_udivdi3.patch;patch=1 \ file://defconfig" S = "${WORKDIR}/linux-2.6.24" diff --git a/packages/linux/linux-omap1_2.6.25-omap1.bb b/packages/linux/linux-omap1_2.6.25-omap1.bb new file mode 100644 index 0000000000..1d2d0bedc5 --- /dev/null +++ b/packages/linux/linux-omap1_2.6.25-omap1.bb @@ -0,0 +1,9 @@ +require linux-omap.inc + +COMPATIBLE_MACHINE = "omap5912osk" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \ + http://www.muru.com/linux/omap/patches/patch-2.6.25-omap1.bz2;patch=1 \ + file://defconfig" + +S = "${WORKDIR}/linux-2.6.25" diff --git a/packages/linux/linux-omap2-git/beagleboard/0001-omap3beagle-add-a-platform-device-to-hook-up-the-GP.patch b/packages/linux/linux-omap2-git/beagleboard/0001-omap3beagle-add-a-platform-device-to-hook-up-the-GP.patch new file mode 100644 index 0000000000..17329be29b --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/0001-omap3beagle-add-a-platform-device-to-hook-up-the-GP.patch @@ -0,0 +1,69 @@ +From 7a444ee080c5f1a62ac5042f1e7926622b3e1ce7 Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@openembedded.org> +Date: Fri, 30 May 2008 13:43:36 +0200 +Subject: [PATCH] ARM: OMAP: omap3beagle: add a platform device to hook up the GPIO leds to the leds-gpio driver + +omap3beagle: add a platform device to hook up the GPIO leds to the leds-gpio driver + * on revision A5 and earlier board the two leds can't be controlled seperately, should be fixed in rev. B and C boards. + +Signed-off-by: Koen Kooi <koen@openembedded.org> +--- + arch/arm/mach-omap2/board-omap3beagle.c | 28 ++++++++++++++++++++++++++++ + 1 files changed, 28 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index c992cc7..83891fc 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -19,6 +19,7 @@ + #include <linux/err.h> + #include <linux/clk.h> + #include <linux/io.h> ++#include <linux/leds.h> + + #include <asm/hardware.h> + #include <asm/mach-types.h> +@@ -72,6 +73,32 @@ static struct omap_lcd_config omap3_beagle_lcd_config __initdata = { + .ctrl_name = "internal", + }; + ++struct gpio_led gpio_leds[] = { ++ { ++ .name = "beagleboard::led0", ++ .default_trigger = "none", ++ .gpio = 149, ++ }, ++ { ++ .name = "beagleboard::led1", ++ .default_trigger = "none", ++ .gpio = 150, ++ }, ++}; ++ ++static struct gpio_led_platform_data gpio_led_info = { ++ .leds = gpio_leds, ++ .num_leds = ARRAY_SIZE(gpio_leds), ++}; ++ ++static struct platform_device leds_gpio = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &gpio_led_info, ++ }, ++}; ++ + static struct omap_board_config_kernel omap3_beagle_config[] __initdata = { + { OMAP_TAG_UART, &omap3_beagle_uart_config }, + { OMAP_TAG_MMC, &omap3beagle_mmc_config }, +@@ -83,6 +110,7 @@ static struct platform_device *omap3_beagle_devices[] __initdata = { + #ifdef CONFIG_RTC_DRV_TWL4030 + &omap3_beagle_twl4030rtc_device, + #endif ++ &leds_gpio, + }; + + static void __init omap3_beagle_init(void) +-- +1.5.4.3 + diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 3d3562d9f5..c4eec9bc75 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.26-rc3-omap1 -# Tue May 20 19:38:20 2008 +# Linux kernel version: 2.6.26-rc4-omap1 +# Sun Jun 1 11:35:14 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -31,6 +31,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y @@ -79,8 +80,9 @@ CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set +CONFIG_SLUB_DEBUG=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y # CONFIG_SLOB is not set # CONFIG_PROFILING is not set # CONFIG_MARKERS is not set @@ -171,7 +173,6 @@ CONFIG_ARCH_OMAP3=y # # OMAP Feature Selections # -CONFIG_OMAP_DEBUG_SRAM_PATCH=y # CONFIG_OMAP_DEBUG_POWERDOMAIN is not set # CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set # CONFIG_OMAP_RESET_CLOCKS is not set @@ -179,9 +180,7 @@ CONFIG_OMAP_BOOT_TAG=y CONFIG_OMAP_BOOT_REASON=y # CONFIG_OMAP_COMPONENT_VERSION is not set # CONFIG_OMAP_GPIO_SWITCH is not set -CONFIG_OMAP_MUX=n -# CONFIG_OMAP_MUX_DEBUG is not set -CONFIG_OMAP_MUX_WARNINGS=n +# CONFIG_OMAP_MUX is not set CONFIG_OMAP_MCBSP=y # CONFIG_OMAP_MMU_FWK is not set # CONFIG_OMAP_MBOX_FWK is not set @@ -192,7 +191,6 @@ CONFIG_OMAP_DM_TIMER=y # CONFIG_OMAP_LL_DEBUG_UART1 is not set # CONFIG_OMAP_LL_DEBUG_UART2 is not set CONFIG_OMAP_LL_DEBUG_UART3=y -CONFIG_OMAP_SERIAL_WAKE=y CONFIG_ARCH_OMAP34XX=y CONFIG_ARCH_OMAP3430=y @@ -233,7 +231,7 @@ CONFIG_CPU_CP15_MMU=y # Processor Features # CONFIG_ARM_THUMB=y -# CONFIG_ARM_THUMBEE is not set +CONFIG_ARM_THUMBEE=y # CONFIG_CPU_ICACHE_DISABLE is not set # CONFIG_CPU_DCACHE_DISABLE is not set # CONFIG_CPU_BPREDICT_DISABLE is not set @@ -254,7 +252,7 @@ CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -# CONFIG_PREEMPT is not set +CONFIG_PREEMPT=y CONFIG_HZ=128 CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set @@ -273,7 +271,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_ZONE_DMA_FLAG=1 CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y -# CONFIG_LEDS is not set +CONFIG_LEDS=y CONFIG_ALIGNMENT_TRAP=y # @@ -473,7 +471,7 @@ CONFIG_MAC80211_RC_DEFAULT_PID=y CONFIG_MAC80211_RC_DEFAULT="pid" CONFIG_MAC80211_RC_PID=y # CONFIG_MAC80211_MESH is not set -# CONFIG_MAC80211_LEDS is not set +CONFIG_MAC80211_LEDS=y # CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set # CONFIG_MAC80211_DEBUG is not set CONFIG_IEEE80211=y @@ -514,7 +512,7 @@ CONFIG_MTD_PARTITIONS=y CONFIG_MTD_CHAR=y CONFIG_MTD_BLKDEVS=y CONFIG_MTD_BLOCK=y -CONFIG_FTL=y +# CONFIG_FTL is not set # CONFIG_NFTL is not set # CONFIG_INFTL is not set # CONFIG_RFD_FTL is not set @@ -566,6 +564,7 @@ CONFIG_MTD_NAND=y # CONFIG_MTD_NAND_VERIFY_WRITE is not set # CONFIG_MTD_NAND_ECC_SMC is not set # CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_OMAP2=y CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_NANDSIM is not set @@ -853,22 +852,23 @@ CONFIG_I2C_OMAP=y # Miscellaneous I2C Chip support # # CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set +CONFIG_SENSORS_EEPROM=y # CONFIG_SENSORS_PCF8574 is not set # CONFIG_PCF8575 is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_ISP1301_OMAP is not set # CONFIG_TPS65010 is not set -CONFIG_SENSORS_TLV320AIC23=y +# CONFIG_SENSORS_TLV320AIC23 is not set CONFIG_TWL4030_CORE=y CONFIG_TWL4030_GPIO=y -# CONFIG_TWL4030_MADC is not set +CONFIG_TWL4030_MADC=m CONFIG_TWL4030_USB=y CONFIG_TWL4030_USB_HS_ULPI=y CONFIG_TWL4030_PWRBUTTON=y -# CONFIG_TWL4030_POWEROFF is not set +CONFIG_TWL4030_POWEROFF=y # CONFIG_SENSORS_MAX6875 is not set # CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_TSL2563 is not set # CONFIG_LP5521 is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set @@ -912,8 +912,65 @@ CONFIG_HAVE_GPIO_LIB=y # # CONFIG_GPIO_MCP23S08 is not set # CONFIG_W1 is not set -# CONFIG_POWER_SUPPLY is not set -# CONFIG_HWMON is not set +CONFIG_POWER_SUPPLY=m +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_APM_POWER is not set +# CONFIG_BATTERY_DS2760 is not set +# CONFIG_BATTERY_BQ27x00 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7473 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_SENSORS_TSC210X is not set +CONFIG_SENSORS_OMAP34XX=y +# CONFIG_HWMON_DEBUG_CHIP is not set CONFIG_WATCHDOG=y CONFIG_WATCHDOG_NOWAYOUT=y @@ -949,102 +1006,13 @@ CONFIG_SSB_POSSIBLE=y # # Multimedia core support # -CONFIG_VIDEO_DEV=y -CONFIG_VIDEO_V4L2_COMMON=y -# CONFIG_VIDEO_ALLOW_V4L1 is not set -# CONFIG_VIDEO_V4L1_COMPAT is not set +# CONFIG_VIDEO_DEV is not set # CONFIG_DVB_CORE is not set -CONFIG_VIDEO_MEDIA=y +# CONFIG_VIDEO_MEDIA is not set # # Multimedia drivers # -CONFIG_MEDIA_ATTACH=y -CONFIG_MEDIA_TUNER=y -# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set -CONFIG_MEDIA_TUNER_SIMPLE=y -CONFIG_MEDIA_TUNER_TDA8290=y -CONFIG_MEDIA_TUNER_TDA9887=y -CONFIG_MEDIA_TUNER_TEA5761=y -CONFIG_MEDIA_TUNER_TEA5767=y -CONFIG_MEDIA_TUNER_MT20XX=y -CONFIG_MEDIA_TUNER_XC2028=y -CONFIG_MEDIA_TUNER_XC5000=y -CONFIG_VIDEO_V4L2=y -CONFIG_VIDEO_TVEEPROM=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_CAPTURE_DRIVERS=y -# CONFIG_VIDEO_ADV_DEBUG is not set -# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set - -# -# Encoders/decoders and other helper chips -# - -# -# Audio decoders -# -# CONFIG_VIDEO_TVAUDIO is not set -# CONFIG_VIDEO_TDA7432 is not set -# CONFIG_VIDEO_TDA9840 is not set -# CONFIG_VIDEO_TDA9875 is not set -# CONFIG_VIDEO_TEA6415C is not set -# CONFIG_VIDEO_TEA6420 is not set -CONFIG_VIDEO_MSP3400=m -# CONFIG_VIDEO_CS5345 is not set -CONFIG_VIDEO_CS53L32A=m -# CONFIG_VIDEO_M52790 is not set -# CONFIG_VIDEO_TLV320AIC23B is not set -CONFIG_VIDEO_WM8775=m -# CONFIG_VIDEO_WM8739 is not set -# CONFIG_VIDEO_VP27SMPX is not set - -# -# Video decoders -# -# CONFIG_VIDEO_OV7670 is not set -# CONFIG_VIDEO_TCM825X is not set -# CONFIG_VIDEO_OV9640 is not set -CONFIG_VIDEO_SAA711X=m -# CONFIG_VIDEO_SAA717X is not set -# CONFIG_VIDEO_TVP5150 is not set - -# -# Video and audio decoders -# -CONFIG_VIDEO_CX25840=m - -# -# MPEG video encoders -# -CONFIG_VIDEO_CX2341X=m - -# -# Video encoders -# -# CONFIG_VIDEO_SAA7127 is not set - -# -# Video improvement chips -# -# CONFIG_VIDEO_UPD64031A is not set -# CONFIG_VIDEO_UPD64083 is not set -# CONFIG_VIDEO_VIVI is not set -# CONFIG_VIDEO_SAA5246A is not set -# CONFIG_VIDEO_SAA5249 is not set -CONFIG_V4L_USB_DRIVERS=y -CONFIG_VIDEO_PVRUSB2=m -CONFIG_VIDEO_PVRUSB2_SYSFS=y -# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set -# CONFIG_VIDEO_EM28XX is not set -# CONFIG_VIDEO_USBVISION is not set -# CONFIG_USB_ET61X251 is not set -CONFIG_USB_SN9C102=m -# CONFIG_USB_ZC0301 is not set -# CONFIG_USB_ZR364XX is not set -# CONFIG_USB_STKWEBCAM is not set -# CONFIG_SOC_CAMERA is not set -# CONFIG_RADIO_ADAPTERS is not set # CONFIG_DAB is not set # @@ -1203,7 +1171,7 @@ CONFIG_USB_DEVICEFS=y CONFIG_USB_DEVICE_CLASS=y # CONFIG_USB_DYNAMIC_MINORS is not set CONFIG_USB_SUSPEND=y -# CONFIG_USB_OTG is not set +CONFIG_USB_OTG=y # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set @@ -1228,9 +1196,10 @@ CONFIG_USB_MUSB_SOC=y # OMAP 343x high speed USB support # # CONFIG_USB_MUSB_HOST is not set -CONFIG_USB_MUSB_PERIPHERAL=y -# CONFIG_USB_MUSB_OTG is not set +# CONFIG_USB_MUSB_PERIPHERAL is not set +CONFIG_USB_MUSB_OTG=y CONFIG_USB_GADGET_MUSB_HDRC=y +CONFIG_USB_MUSB_HDRC_HCD=y # CONFIG_MUSB_PIO_ONLY is not set CONFIG_USB_INVENTRA_DMA=y # CONFIG_USB_TI_CPPI_DMA is not set @@ -1241,6 +1210,7 @@ CONFIG_USB_MUSB_LOGLEVEL=0 # CONFIG_USB_ACM=m CONFIG_USB_PRINTER=m +# CONFIG_USB_WDM is not set # # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' @@ -1380,6 +1350,7 @@ CONFIG_MMC_UNSAFE_RESUME=y CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_SDIO_UART=y +# CONFIG_MMC_TEST is not set # # MMC/SD Host Controller Drivers @@ -1395,14 +1366,14 @@ CONFIG_LEDS_CLASS=y # CONFIG_LEDS_OMAP_DEBUG is not set # CONFIG_LEDS_OMAP is not set # CONFIG_LEDS_OMAP_PWM is not set -CONFIG_LEDS_GPIO=m +CONFIG_LEDS_GPIO=y # # LED Triggers # CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=m -CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y @@ -1476,8 +1447,12 @@ CONFIG_EXT3_FS=y CONFIG_JBD=y # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set -# CONFIG_FS_POSIX_ACL is not set -# CONFIG_XFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_XFS_DEBUG is not set # CONFIG_GFS2_FS is not set # CONFIG_OCFS2_FS is not set CONFIG_DNOTIFY=y @@ -1491,13 +1466,16 @@ CONFIG_QFMT_V2=y CONFIG_QUOTACTL=y # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set -# CONFIG_FUSE_FS is not set +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y # # DOS/FAT/NT Filesystems @@ -1530,7 +1508,23 @@ CONFIG_TMPFS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set # CONFIG_CRAMFS is not set # CONFIG_VXFS_FS is not set # CONFIG_MINIX_FS is not set @@ -1641,7 +1635,9 @@ CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y # CONFIG_DEBUG_OBJECTS is not set -# CONFIG_DEBUG_SLAB is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set @@ -1652,7 +1648,7 @@ CONFIG_DEBUG_MUTEXES=y # CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_BUGVERBOSE is not set # CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_WRITECOUNT is not set @@ -1665,7 +1661,7 @@ CONFIG_FRAME_POINTER=y # CONFIG_FAULT_INJECTION is not set # CONFIG_SAMPLES is not set # CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_ERRORS is not set # CONFIG_DEBUG_STACK_USAGE is not set CONFIG_DEBUG_LL=y # CONFIG_DEBUG_ICEDCC is not set @@ -1772,8 +1768,10 @@ CONFIG_CRC_ITU_T=y CONFIG_CRC32=y CONFIG_CRC7=y CONFIG_LIBCRC32C=y -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-omap2-git/beagleboard/flash.patch b/packages/linux/linux-omap2-git/beagleboard/flash.patch new file mode 100644 index 0000000000..4c76cd97bd --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/flash.patch @@ -0,0 +1,558 @@ +diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile +index 13d0043..d582b8f 100644 +--- a/arch/arm/mach-omap2/Makefile ++++ b/arch/arm/mach-omap2/Makefile +@@ -44,7 +44,8 @@ obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o \ + board-omap3evm-flash.o + obj-$(CONFIG_MACH_OMAP3_BEAGLE) += board-omap3beagle.o \ + usb-musb.o usb-ehci.o \ +- hsmmc.o ++ hsmmc.o \ ++ board-omap3beagle-flash.o + obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o \ + hsmmc.o \ + usb-musb.o +diff --git a/arch/arm/mach-omap2/board-omap3beagle-flash.c b/arch/arm/mach-omap2/board-omap3beagle-flash.c +new file mode 100644 +index 0000000..5346df0 +--- /dev/null ++++ b/arch/arm/mach-omap2/board-omap3beagle-flash.c +@@ -0,0 +1,119 @@ ++/* ++ * board-omap3beagle-flash.c ++ * ++ * Copyright (c) 2008 Texas Instruments ++ * ++ * Modified from board-omap3evm-flash.c ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include <linux/kernel.h> ++#include <linux/platform_device.h> ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/partitions.h> ++#include <linux/mtd/nand.h> ++#include <linux/types.h> ++#include <linux/io.h> ++ ++#include <asm/mach/flash.h> ++#include <asm/arch/board.h> ++#include <asm/arch/gpmc.h> ++#include <asm/arch/nand.h> ++ ++#define GPMC_CS0_BASE 0x60 ++#define GPMC_CS_SIZE 0x30 ++ ++static struct mtd_partition omap3beagle_nand_partitions[] = { ++ /* All the partition sizes are listed in terms of NAND block size */ ++ { ++ .name = "X-Loader", ++ .offset = 0, ++ .size = 4*(64 * 2048), ++ .mask_flags = MTD_WRITEABLE, /* force read-only */ ++ }, ++ { ++ .name = "U-Boot", ++ .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ ++ .size = 15*(64 * 2048), ++ .mask_flags = MTD_WRITEABLE, /* force read-only */ ++ }, ++ { ++ .name = "U-Boot Env", ++ .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ ++ .size = 1*(64 * 2048), ++ }, ++ { ++ .name = "Kernel", ++ .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ ++ .size = 32*(64 * 2048), ++ }, ++ { ++ .name = "File System", ++ .offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */ ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct omap_nand_platform_data omap3beagle_nand_data = { ++ .parts = omap3beagle_nand_partitions, ++ .nr_parts = ARRAY_SIZE(omap3beagle_nand_partitions), ++ .dma_channel = -1, /* disable DMA in OMAP NAND driver */ ++ .nand_setup = NULL, ++ .dev_ready = NULL, ++}; ++ ++static struct resource omap3beagle_nand_resource = { ++ .flags = IORESOURCE_MEM, ++}; ++ ++static struct platform_device omap3beagle_nand_device = { ++ .name = "omap2-nand", ++ .id = -1, ++ .dev = { ++ .platform_data = &omap3beagle_nand_data, ++ }, ++ .num_resources = 1, ++ .resource = &omap3beagle_nand_resource, ++}; ++ ++ ++void __init omap3beagle_flash_init(void) ++{ ++ u8 cs = 0; ++ u8 nandcs = GPMC_CS_NUM + 1; ++ ++ u32 gpmc_base_add = OMAP34XX_GPMC_VIRT; ++ ++ /* find out the chip-select on which NAND exists */ ++ while (cs < GPMC_CS_NUM) { ++ u32 ret = 0; ++ ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); ++ ++ if ((ret & 0xC00) == 0x800) { ++ printk(KERN_INFO "Found NAND on CS%d\n", cs); ++ if (nandcs > GPMC_CS_NUM) ++ nandcs = cs; ++ } ++ cs++; ++ } ++ ++ if (nandcs > GPMC_CS_NUM) { ++ printk(KERN_INFO "NAND: Unable to find configuration " ++ "in GPMC\n "); ++ return; ++ } ++ ++ if (nandcs < GPMC_CS_NUM) { ++ omap3beagle_nand_data.cs = nandcs; ++ omap3beagle_nand_data.gpmc_cs_baseaddr = (void *)(gpmc_base_add + ++ GPMC_CS0_BASE + nandcs * GPMC_CS_SIZE); ++ omap3beagle_nand_data.gpmc_baseaddr = (void *) (gpmc_base_add); ++ ++ printk(KERN_INFO "Registering NAND on CS%d\n", nandcs); ++ if (platform_device_register(&omap3beagle_nand_device) < 0) ++ printk(KERN_ERR "Unable to register NAND device\n"); ++ } ++} +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index c992cc7..99e042e 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -94,6 +94,7 @@ static void __init omap3_beagle_init(void) + hsmmc_init(); + usb_musb_init(); + usb_ehci_init(); ++ omap3beagle_flash_init(); + } + + arch_initcall(omap3_beagle_i2c_init); +diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig +index 3d5e432..02b9ced 100644 +--- a/drivers/mtd/nand/Kconfig ++++ b/drivers/mtd/nand/Kconfig +@@ -71,7 +71,7 @@ config MTD_NAND_AMS_DELTA + + config MTD_NAND_OMAP2 + tristate "NAND Flash device on OMAP 2420H4/2430SDP boards" +- depends on (ARM && ARCH_OMAP2 && MTD_NAND) ++ depends on ARM && MTD_NAND && (ARCH_OMAP2 || ARCH_OMAP3) + help + Support for NAND flash on Texas Instruments 2430SDP/2420H4 platforms. + +diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c +index 3b7307c..3aac1d2 100644 +--- a/drivers/mtd/nand/omap2.c ++++ b/drivers/mtd/nand/omap2.c +@@ -111,15 +111,6 @@ + static const char *part_probes[] = { "cmdlinepart", NULL }; + #endif + +-static int hw_ecc = 1; +- +-/* new oob placement block for use with hardware ecc generation */ +-static struct nand_ecclayout omap_hw_eccoob = { +- .eccbytes = 12, +- .eccpos = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, +- .oobfree = {{16, 32}, {33, 63} }, +-}; +- + struct omap_nand_info { + struct nand_hw_control controller; + struct omap_nand_platform_data *pdata; +@@ -133,6 +124,13 @@ struct omap_nand_info { + void __iomem *gpmc_cs_baseaddr; + void __iomem *gpmc_baseaddr; + }; ++ ++/* ++ * omap_nand_wp - This function enable or disable the Write Protect feature on ++ * NAND device ++ * @mtd: MTD device structure ++ * @mode: WP ON/OFF ++ */ + static void omap_nand_wp(struct mtd_info *mtd, int mode) + { + struct omap_nand_info *info = container_of(mtd, +@@ -189,11 +187,11 @@ static void omap_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) + } + + /* +-* omap_read_buf - read data from NAND controller into buffer +-* @mtd: MTD device structure +-* @buf: buffer to store date +-* @len: number of bytes to read +-*/ ++ * omap_read_buf - read data from NAND controller into buffer ++ * @mtd: MTD device structure ++ * @buf: buffer to store date ++ * @len: number of bytes to read ++ */ + static void omap_read_buf(struct mtd_info *mtd, u_char *buf, int len) + { + struct omap_nand_info *info = container_of(mtd, +@@ -207,11 +205,11 @@ static void omap_read_buf(struct mtd_info *mtd, u_char *buf, int len) + } + + /* +-* omap_write_buf - write buffer to NAND controller +-* @mtd: MTD device structure +-* @buf: data buffer +-* @len: number of bytes to write +-*/ ++ * omap_write_buf - write buffer to NAND controller ++ * @mtd: MTD device structure ++ * @buf: data buffer ++ * @len: number of bytes to write ++ */ + static void omap_write_buf(struct mtd_info *mtd, const u_char * buf, int len) + { + struct omap_nand_info *info = container_of(mtd, +@@ -250,10 +248,16 @@ static int omap_verify_buf(struct mtd_info *mtd, const u_char * buf, int len) + return 0; + } + ++#ifdef CONFIG_MTD_NAND_OMAP_HWECC ++/* ++ * omap_hwecc_init-Initialize the Hardware ECC for NAND flash in GPMC controller ++ * @mtd: MTD device structure ++ */ + static void omap_hwecc_init(struct mtd_info *mtd) + { + struct omap_nand_info *info = container_of(mtd, struct omap_nand_info, + mtd); ++ register struct nand_chip *chip = mtd->priv; + unsigned long val = 0x0; + + /* Read from ECC Control Register */ +@@ -264,16 +268,15 @@ static void omap_hwecc_init(struct mtd_info *mtd) + + /* Read from ECC Size Config Register */ + val = __raw_readl(info->gpmc_baseaddr + GPMC_ECC_SIZE_CONFIG); +- /* ECCSIZE1=512 | ECCSIZE0=8bytes | Select eccResultsize[0123] */ +- val = ((0x000000FF<<22) | (0x00000003<<12) | (0x0000000F)); ++ /* ECCSIZE1=512 | Select eccResultsize[0-3] */ ++ val = ((((chip->ecc.size >> 1) - 1) << 22) | (0x0000000F)); + __raw_writel(val, info->gpmc_baseaddr + GPMC_ECC_SIZE_CONFIG); +- +- + } + + /* +- * This function will generate true ECC value, which can be used ++ * gen_true_ecc - This function will generate true ECC value, which can be used + * when correcting data read from NAND flash memory core ++ * @ecc_buf: buffer to store ecc code + */ + static void gen_true_ecc(u8 *ecc_buf) + { +@@ -289,8 +292,12 @@ static void gen_true_ecc(u8 *ecc_buf) + } + + /* +- * This function compares two ECC's and indicates if there is an error. +- * If the error can be corrected it will be corrected to the buffer ++ * omap_compare_ecc - This function compares two ECC's and indicates if there ++ * is an error. If the error can be corrected it will be corrected to the ++ * buffer ++ * @ecc_data1: ecc code from nand spare area ++ * @ecc_data2: ecc code from hardware register obtained from hardware ecc ++ * @page_data: page data + */ + static int omap_compare_ecc(u8 *ecc_data1, /* read from NAND memory */ + u8 *ecc_data2, /* read from register */ +@@ -409,6 +416,14 @@ static int omap_compare_ecc(u8 *ecc_data1, /* read from NAND memory */ + } + } + ++/* ++ * omap_correct_data - Compares the ecc read from nand spare area with ECC ++ * registers values and corrects one bit error if it has occured ++ * @mtd: MTD device structure ++ * @dat: page data ++ * @read_ecc: ecc read from nand flash ++ * @calc_ecc: ecc read from ECC registers ++ */ + static int omap_correct_data(struct mtd_info *mtd, u_char * dat, + u_char * read_ecc, u_char * calc_ecc) + { +@@ -436,65 +451,64 @@ static int omap_correct_data(struct mtd_info *mtd, u_char * dat, + } + + /* +-** Generate non-inverted ECC bytes. +-** +-** Using noninverted ECC can be considered ugly since writing a blank +-** page ie. padding will clear the ECC bytes. This is no problem as long +-** nobody is trying to write data on the seemingly unused page. +-** +-** Reading an erased page will produce an ECC mismatch between +-** generated and read ECC bytes that has to be dealt with separately. +-*/ ++ * omap_calcuate_ecc - Generate non-inverted ECC bytes. ++ * Using noninverted ECC can be considered ugly since writing a blank ++ * page ie. padding will clear the ECC bytes. This is no problem as long ++ * nobody is trying to write data on the seemingly unused page. Reading ++ * an erased page will produce an ECC mismatch between generated and read ++ * ECC bytes that has to be dealt with separately. ++ * @mtd: MTD device structure ++ * @dat: The pointer to data on which ecc is computed ++ * @ecc_code: The ecc_code buffer ++ */ + static int omap_calculate_ecc(struct mtd_info *mtd, const u_char *dat, + u_char *ecc_code) + { + struct omap_nand_info *info = container_of(mtd, struct omap_nand_info, + mtd); + unsigned long val = 0x0; +- unsigned long reg, n; +- +- /* Ex NAND_ECC_HW12_2048 */ +- if ((info->nand.ecc.mode == NAND_ECC_HW) && +- (info->nand.ecc.size == 2048)) +- n = 4; +- else +- n = 1; ++ unsigned long reg; + + /* Start Reading from HW ECC1_Result = 0x200 */ + reg = (unsigned long)(info->gpmc_baseaddr + GPMC_ECC1_RESULT); +- while (n--) { +- val = __raw_readl(reg); +- *ecc_code++ = val; /* P128e, ..., P1e */ +- *ecc_code++ = val >> 16; /* P128o, ..., P1o */ +- /* P2048o, P1024o, P512o, P256o, P2048e, P1024e, P512e, P256e */ +- *ecc_code++ = ((val >> 8) & 0x0f) | ((val >> 20) & 0xf0); +- reg += 4; +- } ++ val = __raw_readl(reg); ++ *ecc_code++ = val; /* P128e, ..., P1e */ ++ *ecc_code++ = val >> 16; /* P128o, ..., P1o */ ++ /* P2048o, P1024o, P512o, P256o, P2048e, P1024e, P512e, P256e */ ++ *ecc_code++ = ((val >> 8) & 0x0f) | ((val >> 20) & 0xf0); ++ reg += 4; + + return 0; +-} /* omap_calculate_ecc */ ++} + ++/* ++ * omap_enable_hwecc - This function enables the hardware ecc functionality ++ * @mtd: MTD device structure ++ * @mode: Read/Write mode ++ */ + static void omap_enable_hwecc(struct mtd_info *mtd, int mode) + { + struct omap_nand_info *info = container_of(mtd, struct omap_nand_info, + mtd); ++ register struct nand_chip *chip = mtd->priv; ++ unsigned int dev_width = (chip->options & NAND_BUSWIDTH_16) ? 1 : 0; + unsigned long val = __raw_readl(info->gpmc_baseaddr + GPMC_ECC_CONFIG); + + switch (mode) { + case NAND_ECC_READ : + __raw_writel(0x101, info->gpmc_baseaddr + GPMC_ECC_CONTROL); +- /* ECC 16 bit col) | ( CS 0 ) | ECC Enable */ +- val = (1 << 7) | (0x0) | (0x1) ; ++ /* (ECC 16 or 8 bit col) | ( CS ) | ECC Enable */ ++ val = (dev_width << 7) | (info->gpmc_cs << 1) | (0x1); + break; + case NAND_ECC_READSYN : +- __raw_writel(0x100, info->gpmc_baseaddr + GPMC_ECC_CONTROL); +- /* ECC 16 bit col) | ( CS 0 ) | ECC Enable */ +- val = (1 << 7) | (0x0) | (0x1) ; ++ __raw_writel(0x100, info->gpmc_baseaddr + GPMC_ECC_CONTROL); ++ /* (ECC 16 or 8 bit col) | ( CS ) | ECC Enable */ ++ val = (dev_width << 7) | (info->gpmc_cs << 1) | (0x1); + break; + case NAND_ECC_WRITE : + __raw_writel(0x101, info->gpmc_baseaddr + GPMC_ECC_CONTROL); +- /* ECC 16 bit col) | ( CS 0 ) | ECC Enable */ +- val = (1 << 7) | (0x0) | (0x1) ; ++ /* (ECC 16 or 8 bit col) | ( CS ) | ECC Enable */ ++ val = (dev_width << 7) | (info->gpmc_cs << 1) | (0x1); + break; + default: + DEBUG(MTD_DEBUG_LEVEL0, "Error: Unrecognized Mode[%d]!\n", +@@ -504,7 +518,38 @@ static void omap_enable_hwecc(struct mtd_info *mtd, int mode) + + __raw_writel(val, info->gpmc_baseaddr + GPMC_ECC_CONFIG); + } ++#endif + ++/* ++ * omap_wait - Wait function is called during Program and erase ++ * operations and the way it is called from MTD layer, we should wait ++ * till the NAND chip is ready after the programming/erase operation ++ * has completed. ++ * @mtd: MTD device structure ++ * @chip: NAND Chip structure ++ */ ++static int omap_wait(struct mtd_info *mtd, struct nand_chip *chip) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct omap_nand_info *info = container_of(mtd, struct omap_nand_info, ++ mtd); ++ int status = 0; ++ ++ this->IO_ADDR_W = (void *) info->gpmc_cs_baseaddr + ++ GPMC_CS_NAND_COMMAND; ++ this->IO_ADDR_R = (void *) info->gpmc_cs_baseaddr + GPMC_CS_NAND_DATA; ++ ++ while (!(status & 0x40)) { ++ __raw_writeb(NAND_CMD_STATUS & 0xFF, this->IO_ADDR_W); ++ status = __raw_readb(this->IO_ADDR_R); ++ } ++ return status; ++} ++ ++/* ++ * omap_dev_ready - calls the platform specific dev_ready function ++ * @mtd: MTD device structure ++ */ + static int omap_dev_ready(struct mtd_info *mtd) + { + struct omap_nand_info *info = container_of(mtd, struct omap_nand_info, +@@ -534,7 +579,7 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) + struct omap_nand_info *info; + struct omap_nand_platform_data *pdata; + int err; +- unsigned long val; ++ unsigned long val; + + + pdata = pdev->dev.platform_data; +@@ -568,15 +613,20 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) + } + + /* Enable RD PIN Monitoring Reg */ +- val = gpmc_cs_read_reg(info->gpmc_cs, GPMC_CS_CONFIG1); +- val |= WR_RD_PIN_MONITORING; +- gpmc_cs_write_reg(info->gpmc_cs, GPMC_CS_CONFIG1, val); ++ if (pdata->dev_ready) { ++ val = gpmc_cs_read_reg(info->gpmc_cs, GPMC_CS_CONFIG1); ++ val |= WR_RD_PIN_MONITORING; ++ gpmc_cs_write_reg(info->gpmc_cs, GPMC_CS_CONFIG1, val); ++ } + + val = gpmc_cs_read_reg(info->gpmc_cs, GPMC_CS_CONFIG7); + val &= ~(0xf << 8); + val |= (0xc & 0xf) << 8; + gpmc_cs_write_reg(info->gpmc_cs, GPMC_CS_CONFIG7, val); + ++ /* NAND write protect off */ ++ omap_nand_wp(&info->mtd, NAND_WP_OFF); ++ + if (!request_mem_region(info->phys_base, NAND_IO_SIZE, + pdev->dev.driver->name)) { + err = -EBUSY; +@@ -597,29 +647,39 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) + info->nand.write_buf = omap_write_buf; + info->nand.verify_buf = omap_verify_buf; + +- info->nand.dev_ready = omap_dev_ready; +- info->nand.chip_delay = 0; +- +- /* Options */ +- info->nand.options = NAND_BUSWIDTH_16; +- info->nand.options |= NAND_SKIP_BBTSCAN; +- +- if (hw_ecc) { +- /* init HW ECC */ +- omap_hwecc_init(&info->mtd); +- +- info->nand.ecc.calculate = omap_calculate_ecc; +- info->nand.ecc.hwctl = omap_enable_hwecc; +- info->nand.ecc.correct = omap_correct_data; +- info->nand.ecc.mode = NAND_ECC_HW; +- info->nand.ecc.bytes = 12; +- info->nand.ecc.size = 2048; +- info->nand.ecc.layout = &omap_hw_eccoob; +- ++ /* ++ * If RDY/BSY line is connected to OMAP then use the omap ready funcrtion ++ * and the generic nand_wait function which reads the status register ++ * after monitoring the RDY/BSY line.Otherwise use a standard chip delay ++ * which is slightly more than tR (AC Timing) of the NAND device and read ++ * status register until you get a failure or success ++ */ ++ if (pdata->dev_ready) { ++ info->nand.dev_ready = omap_dev_ready; ++ info->nand.chip_delay = 0; + } else { +- info->nand.ecc.mode = NAND_ECC_SOFT; ++ info->nand.waitfunc = omap_wait; ++ info->nand.chip_delay = 50; + } + ++ info->nand.options |= NAND_SKIP_BBTSCAN; ++ if ((gpmc_cs_read_reg(info->gpmc_cs, GPMC_CS_CONFIG1) & 0x3000) ++ == 0x1000) ++ info->nand.options |= NAND_BUSWIDTH_16; ++ ++#ifdef CONFIG_MTD_NAND_OMAP_HWECC ++ info->nand.ecc.bytes = 3; ++ info->nand.ecc.size = 512; ++ info->nand.ecc.calculate = omap_calculate_ecc; ++ info->nand.ecc.hwctl = omap_enable_hwecc; ++ info->nand.ecc.correct = omap_correct_data; ++ info->nand.ecc.mode = NAND_ECC_HW; ++ ++ /* init HW ECC */ ++ omap_hwecc_init(&info->mtd); ++#else ++ info->nand.ecc.mode = NAND_ECC_SOFT; ++#endif + + /* DIP switches on some boards change between 8 and 16 bit + * bus widths for flash. Try the other width if the first try fails. +@@ -636,14 +696,12 @@ static int __devinit omap_nand_probe(struct platform_device *pdev) + err = parse_mtd_partitions(&info->mtd, part_probes, &info->parts, 0); + if (err > 0) + add_mtd_partitions(&info->mtd, info->parts, err); +- else if (err < 0 && pdata->parts) ++ else if (err <= 0 && pdata->parts) + add_mtd_partitions(&info->mtd, pdata->parts, pdata->nr_parts); + else + #endif + add_mtd_device(&info->mtd); + +- omap_nand_wp(&info->mtd, NAND_WP_OFF); +- + platform_set_drvdata(pdev, &info->mtd); + + return 0; +diff --git a/include/asm-arm/arch-omap/board-omap3beagle.h b/include/asm-arm/arch-omap/board-omap3beagle.h +index 46dff31..26ecfb8 100644 +--- a/include/asm-arm/arch-omap/board-omap3beagle.h ++++ b/include/asm-arm/arch-omap/board-omap3beagle.h +@@ -29,5 +29,7 @@ + #ifndef __ASM_ARCH_OMAP3_BEAGLE_H + #define __ASM_ARCH_OMAP3_BEAGLE_H + ++extern void omap3beagle_flash_init(void); ++ + #endif /* __ASM_ARCH_OMAP3_BEAGLE_H */ + diff --git a/packages/linux/linux-omap2-git/beagleboard/mcbsp-fix-include.patch b/packages/linux/linux-omap2-git/beagleboard/mcbsp-fix-include.patch new file mode 100644 index 0000000000..13e931b61a --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/mcbsp-fix-include.patch @@ -0,0 +1,10 @@ +--- /tmp/mcbsp.c 2008-05-29 00:41:05.793645383 +0200 ++++ git/arch/arm/mach-omap2/mcbsp.c 2008-05-29 00:41:31.584031392 +0200 +@@ -14,6 +14,7 @@ + #include <linux/init.h> + #include <linux/clk.h> + #include <linux/err.h> ++#include <linux/io.h> + + #include <asm/arch/dma.h> + #include <asm/arch/mux.h> diff --git a/packages/linux/linux-omap2-git/beagleboard/mux.patch b/packages/linux/linux-omap2-git/beagleboard/mux.patch new file mode 100644 index 0000000000..836b52954d --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/mux.patch @@ -0,0 +1,15 @@ +diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c +index 7d56516..be6eb3e 100644 +--- a/arch/arm/mach-omap2/mux.c ++++ b/arch/arm/mach-omap2/mux.c +@@ -253,8 +253,8 @@ MUX_CFG_34XX("Y13_3430_USB1HS_PHY_D7", 0x5e2, + OMAP34XX_MUX_MODE3 | OMAP34XX_PIN_INPUT_PULLDOWN) + + /* PHY - HSUSB: 12-pin ULPI PHY: Port 2*/ +-MUX_CFG_34XX("AA8_3430_USB2HS_PHY_CLK", 0x5f0, +- OMAP34XX_MUX_MODE3 | OMAP34XX_PIN_OUTPUT) ++/*KK MUX_CFG_34XX("AA8_3430_USB2HS_PHY_CLK", 0x5f0, ++ OMAP34XX_MUX_MODE3 | OMAP34XX_PIN_OUTPUT)*/ + MUX_CFG_34XX("AA10_3430_USB2HS_PHY_STP", 0x5f2, + OMAP34XX_MUX_MODE3 | OMAP34XX_PIN_OUTPUT) + MUX_CFG_34XX("AA9_3430_USB2HS_PHY_DIR", 0x5f4, diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index f128d9cc8f..5fba8e3b66 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -2,21 +2,20 @@ require linux-omap.inc FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MACHINE}" -SRCREV = "41c13615e46ed02a1aaafcc267603be8ea5244e9" +SRCREV = "24d1d54db70a8ebf59382dc51d8ca40ca5c29b08" -PV = "2.6.25+2.6.26-rc3+git${SRCREV}" -PR = "r16" +PV = "2.6.25+2.6.26-rc4+git${SRCREV}" +PR = "r19" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ - file://00001-mcbsp-transform.patch;patch=1 \ - file://00002-mcbsp-omap1.patch;patch=1 \ - file://00003-mcbsp-omap3-clock.patch;patch=1 \ - file://00004-omap2-mcbsp.patch;patch=1 \ - file://0001-ASoC-OMAP-Add-basic-support-for-OMAP34xx-in-McBSP.patch;patch=1 \ file://defconfig" SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ + file://0001-ASoC-OMAP-Add-basic-support-for-OMAP34xx-in-McBSP.patch;patch=1 \ + file://mux.patch;patch=1 \ + file://0001-omap3beagle-add-a-platform-device-to-hook-up-the-GP.patch;patch=1 \ + file://flash.patch;patch=1 \ " COMPATIBLE_MACHINE = "omap2430sdp|omap2420h4|beagleboard" diff --git a/packages/linux/linux-rt-2.6.24/sysctl_missing_include.patch b/packages/linux/linux-rt-2.6.24/sysctl_missing_include.patch deleted file mode 100644 index 2949374818..0000000000 --- a/packages/linux/linux-rt-2.6.24/sysctl_missing_include.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: linux-2.6.24.3/kernel/sysctl.c -=================================================================== ---- linux-2.6.24.3.orig/kernel/sysctl.c 2008-02-29 00:52:45.000000000 +0100 -+++ linux-2.6.24.3/kernel/sysctl.c 2008-02-29 00:52:59.000000000 +0100 -@@ -47,6 +47,7 @@ - #include <linux/acpi.h> - #include <linux/reboot.h> - #include <linux/ftrace.h> -+#include <linux/profile.h> - - #include <asm/uaccess.h> - #include <asm/processor.h> diff --git a/packages/linux/linux-rt-2.6.25/.mtn2git_empty b/packages/linux/linux-rt-2.6.25/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux/linux-rt-2.6.25/.mtn2git_empty diff --git a/packages/linux/linux-rt-2.6.25/mpc8315e-rdb/.mtn2git_empty b/packages/linux/linux-rt-2.6.25/mpc8315e-rdb/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux/linux-rt-2.6.25/mpc8315e-rdb/.mtn2git_empty diff --git a/packages/linux/linux-rt-2.6.25/mpc8315e-rdb/defconfig b/packages/linux/linux-rt-2.6.25/mpc8315e-rdb/defconfig new file mode 100644 index 0000000000..75c8fae9ce --- /dev/null +++ b/packages/linux/linux-rt-2.6.25/mpc8315e-rdb/defconfig @@ -0,0 +1,1833 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.25.4-rt3 +# Wed May 28 15:38:47 2008 +# +# CONFIG_PPC64 is not set + +# +# Processor support +# +CONFIG_6xx=y +# CONFIG_PPC_85xx is not set +# CONFIG_PPC_8xx is not set +# CONFIG_40x is not set +# CONFIG_44x is not set +# CONFIG_E200 is not set +CONFIG_PPC_FPU=y +# CONFIG_FSL_EMB_PERFMON is not set +CONFIG_PPC_STD_MMU=y +CONFIG_PPC_STD_MMU_32=y +# CONFIG_PPC_MM_SLICES is not set +# CONFIG_SMP is not set +CONFIG_PPC32=y +CONFIG_WORD_SIZE=32 +CONFIG_PPC_MERGE=y +CONFIG_MMU=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_HARDIRQS=y +# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +CONFIG_IRQ_PER_CPU=y +CONFIG_ARCH_HAS_ILOG2_U32=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +# CONFIG_ARCH_NO_VIRT_TO_BUS is not set +CONFIG_PPC=y +CONFIG_EARLY_PRINTK=y +CONFIG_GENERIC_NVRAM=y +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_PPC_OF=y +CONFIG_OF=y +CONFIG_PPC_UDBG_16550=y +# CONFIG_GENERIC_TBSYNC is not set +CONFIG_AUDIT_ARCH=y +CONFIG_GENERIC_BUG=y +CONFIG_DEFAULT_UIMAGE=y +# CONFIG_PPC_DCR_NATIVE is not set +# CONFIG_PPC_DCR_MMIO is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_GROUP_SCHED=y +# CONFIG_FAIR_GROUP_SCHED is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_USER_SCHED=y +# CONFIG_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_RELAY is not set +# CONFIG_NAMESPACES is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +# CONFIG_RADIX_TREE_CONCURRENT is not set +CONFIG_EMBEDDED=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_COMPAT_BRK=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +# CONFIG_EPOLL is not set +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +# CONFIG_SHMEM is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_PROFILING=y +CONFIG_MARKERS=y +CONFIG_OPROFILE=m +CONFIG_HAVE_OPROFILE=y +CONFIG_PROFILE_NMI=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_TINY_SHMEM=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_CLASSIC_RCU is not set + +# +# Platform support +# +# CONFIG_PPC_MULTIPLATFORM is not set +# CONFIG_PPC_82xx is not set +CONFIG_PPC_83xx=y +# CONFIG_PPC_86xx is not set +# CONFIG_PPC_MPC512x is not set +# CONFIG_PPC_MPC5121 is not set +# CONFIG_PPC_CELL is not set +# CONFIG_PPC_CELL_NATIVE is not set +# CONFIG_PQ2ADS is not set +CONFIG_MPC83xx=y +CONFIG_MPC831x_RDB=y +# CONFIG_MPC832x_MDS is not set +# CONFIG_MPC832x_RDB is not set +# CONFIG_MPC834x_MDS is not set +# CONFIG_MPC834x_ITX is not set +# CONFIG_MPC836x_MDS is not set +# CONFIG_MPC837x_MDS is not set +# CONFIG_MPC837x_RDB is not set +# CONFIG_SBC834x is not set +CONFIG_PPC_MPC831x=y +CONFIG_IPIC=y +# CONFIG_MPIC is not set +# CONFIG_MPIC_WEIRD is not set +# CONFIG_PPC_I8259 is not set +# CONFIG_PPC_RTAS is not set +# CONFIG_MMIO_NVRAM is not set +# CONFIG_PPC_MPC106 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_INDIRECT_IO is not set +# CONFIG_GENERIC_IOMAP is not set +# CONFIG_CPU_FREQ is not set +# CONFIG_FSL_ULI1575 is not set + +# +# Kernel options +# +# CONFIG_HIGHMEM is not set +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +# CONFIG_SCHED_HRTICK is not set +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT_DESKTOP is not set +CONFIG_PREEMPT_RT=y +CONFIG_PREEMPT=y +CONFIG_PREEMPT_SOFTIRQS=y +CONFIG_PREEMPT_HARDIRQS=y +CONFIG_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU_BOOST=y +CONFIG_RCU_TRACE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ASM_SEMAPHORES=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_IOMMU_HELPER is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_HAS_WALK_MEMORY=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_PROC_DEVICETREE=y +# CONFIG_CMDLINE_BOOL is not set +# CONFIG_PM is not set +# CONFIG_SECCOMP is not set +CONFIG_ISA_DMA_API=y + +# +# Bus options +# +CONFIG_ZONE_DMA=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_PPC_INDIRECT_PCI=y +CONFIG_FSL_SOC=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_SYSCALL=y +# CONFIG_PCIEPORTBUS is not set +CONFIG_ARCH_SUPPORTS_MSI=y +# CONFIG_PCI_MSI is not set +CONFIG_PCI_LEGACY=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Advanced setup +# +CONFIG_ADVANCED_OPTIONS=y +CONFIG_HIGHMEM_START=0xfe000000 +# CONFIG_LOWMEM_SIZE_BOOL is not set +CONFIG_LOWMEM_SIZE=0x30000000 +# CONFIG_KERNEL_START_BOOL is not set +CONFIG_KERNEL_START=0xc0000000 +# CONFIG_TASK_SIZE_BOOL is not set +CONFIG_TASK_SIZE=0xc0000000 +# CONFIG_BOOT_LOAD_BOOL is not set +CONFIG_BOOT_LOAD=0x00800000 + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_ASK_IP_FIB_HASH=y +# CONFIG_IP_FIB_TRIE is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +# CONFIG_NET_IPGRE_BROADCAST is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_EVENTS is not set +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +CONFIG_LLC2=m +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +# CONFIG_NET_CLS_FLOW is not set +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +# CONFIG_NET_ACT_NAT is not set +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_CLS_IND=y +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y + +# +# Wireless +# +CONFIG_CFG80211=y +CONFIG_NL80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m + +# +# Rate control algorithm selection +# +CONFIG_MAC80211_RC_DEFAULT_PID=y +# CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set +# CONFIG_MAC80211_RC_DEFAULT_NONE is not set + +# +# Selecting 'y' for an algorithm will +# + +# +# build the algorithm into mac80211. +# +CONFIG_MAC80211_RC_DEFAULT="pid" +CONFIG_MAC80211_RC_PID=y +# CONFIG_MAC80211_RC_SIMPLE is not set +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_OF_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_CFI_INTELEXT is not set +CONFIG_MTD_CFI_AMDSTD=y +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0xfe000000 +CONFIG_MTD_PHYSMAP_LEN=0x0800000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_INTEL_VR_NOR is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_NAND_FSL_ELBC is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +CONFIG_OF_DEVICE=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_CRYPTOLOOP=m +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=32768 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +CONFIG_EEPROM_93CX6=m +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ENCLOSURE_SERVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_SVW is not set +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_INIC162X is not set +CONFIG_SATA_FSL=y +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_PLATFORM is not set +# CONFIG_MD is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_IFB is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +CONFIG_CICADA_PHY=y +# CONFIG_VITESSE_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_FIXED_PHY is not set +# CONFIG_MDIO_BITBANG is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ENC28J60 is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_EEPRO100 is not set +CONFIG_E100=y +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_R6040 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_E1000E is not set +# CONFIG_E1000E_ENABLED is not set +# CONFIG_IP1000 is not set +# CONFIG_IGB is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +CONFIG_GIANFAR=y +CONFIG_GFAR_NAPI=y +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +CONFIG_NETDEV_10000=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set +# CONFIG_IXGBE is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_NIU is not set +# CONFIG_MLX4_CORE is not set +# CONFIG_TEHUTI is not set +# CONFIG_BNX2X is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_SDIO is not set +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PRISM54=m +CONFIG_USB_ZD1201=m +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_RTL8180 is not set +CONFIG_RTL8187=m +# CONFIG_ADM8211 is not set +# CONFIG_P54_COMMON is not set +# CONFIG_ATH5K is not set +# CONFIG_IWL4965 is not set +# CONFIG_IWL3945 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_BCM43XX=m +CONFIG_BCM43XX_DEBUG=y +CONFIG_BCM43XX_DMA=y +CONFIG_BCM43XX_PIO=y +CONFIG_BCM43XX_DMA_AND_PIO_MODE=y +# CONFIG_BCM43XX_DMA_MODE is not set +# CONFIG_BCM43XX_PIO_MODE is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +# CONFIG_RT2X00 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_PPPOL2TP=m +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NET_FC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_NOZOMI is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_OF_PLATFORM is not set +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_GEN_RTC is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_RMEM=m +CONFIG_ALLOC_RTSJ_MEM=m +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +CONFIG_I2C_MPC=y +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_PCF8575 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_TPS65010 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=y +CONFIG_SPI_MPC83xx=y + +# +# SPI Protocol Masters +# +CONFIG_SPI_AT25=m +CONFIG_SPI_SPIDEV=m +# CONFIG_SPI_TLE62X0 is not set +CONFIG_W1=y + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_MATROX is not set +# CONFIG_W1_MASTER_DS2490 is not set +# CONFIG_W1_MASTER_DS2482 is not set + +# +# 1-wire Slaves +# +# CONFIG_W1_SLAVE_THERM is not set +# CONFIG_W1_SLAVE_SMEM is not set +# CONFIG_W1_SLAVE_DS2433 is not set +# CONFIG_W1_SLAVE_DS2760 is not set +# CONFIG_POWER_SUPPLY is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7473 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_I5K_AMB is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +CONFIG_SENSORS_LM75=m +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_83xx_WDT=y + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Sound +# +# CONFIG_SOUND is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_EHCI_FSL=y +CONFIG_USB_EHCI_HCD_PPC_OF=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PPC_OF=y +CONFIG_USB_OHCI_HCD_PPC_OF_BE=y +# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y +CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +CONFIG_USB_GADGET_NET2280=y +CONFIG_USB_NET2280=y +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_SDHCI is not set +# CONFIG_MMC_WBSD is not set +# CONFIG_MMC_TIFM_SD is not set +# CONFIG_MMC_SPI is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_S35390A is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_DMADEVICES=y + +# +# DMA Devices +# +CONFIG_FSL_DMA=y +CONFIG_FSL_DMA_SELFTEST=y +CONFIG_DMA_ENGINE=y + +# +# DMA Clients +# +# CONFIG_NET_DMA is not set + +# +# Userspace I/O +# +CONFIG_UIO=m +CONFIG_UIO_CIF=m + +# +# File systems +# +# CONFIG_EXT2_FS is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_DNOTIFY=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +CONFIG_NLS_CODEPAGE_932=y +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +CONFIG_NLS_ISO8859_8=y +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +CONFIG_CRC7=m +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +CONFIG_STACKTRACE=y +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_EVENT_TRACER=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_PREEMPT_TRACE is not set +# CONFIG_SAMPLES is not set +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUGGER is not set +CONFIG_VIRQ_DEBUG=y +# CONFIG_BDI_SWITCH is not set +# CONFIG_PPC_EARLY_DEBUG is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=y +# CONFIG_CRYPTO_SEQIV is not set +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_CCM is not set +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SALSA20 is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_LZO is not set +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_HIFN_795X is not set +# CONFIG_PPC_CLOCK is not set diff --git a/packages/linux/linux-rt_2.6.24.bb b/packages/linux/linux-rt_2.6.24.bb index bddb16fdf0..83483bb0f5 100644 --- a/packages/linux/linux-rt_2.6.24.bb +++ b/packages/linux/linux-rt_2.6.24.bb @@ -4,18 +4,20 @@ require linux.inc DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" -PR = "r3" +PR = "r4" -SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.3.tar.bz2 \ - ${KERNELORG_MIRROR}/pub/linux/kernel/projects/rt/patch-2.6.24.3-rt3.bz2;patch=1;p=1 \ +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ + ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.24.7.bz2;patch=1;p=1 \ + ${KERNELORG_MIRROR}/pub/linux/kernel/projects/rt/patch-2.6.24.7-rt11.bz2;patch=1;p=1 \ http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ - file://sysctl_missing_include.patch;patch=1 \ file://powerpc-clockres.patch;patch=1 \ file://leds-cpu-activity.patch;patch=1 \ file://leds-cpu-activity-powerpc.patch;patch=1 \ file://defconfig" -S = "${WORKDIR}/linux-2.6.24.3" +# file://sysctl_missing_include.patch;patch=1 \ + +S = "${WORKDIR}/linux-2.6.24" SRC_URI_append_mpc8313e-rdb = "\ file://mpc8313e-rdb-leds.patch;patch=1" diff --git a/packages/linux/linux-rt_2.6.25.bb b/packages/linux/linux-rt_2.6.25.bb new file mode 100644 index 0000000000..e5f7fccaa7 --- /dev/null +++ b/packages/linux/linux-rt_2.6.25.bb @@ -0,0 +1,16 @@ +require linux.inc + +# Linux kernel using the PREEMPT RT patch + +# Mark archs/machines that this kernel supports +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_mpc8315e-rdb = "1" + +PR = "r1" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \ + ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.25.4.bz2;patch=1;p=1 \ + ${KERNELORG_MIRROR}/pub/linux/kernel/projects/rt/patch-2.6.25.4-rt4.bz2;patch=1;p=1 \ + file://defconfig" + +S = "${WORKDIR}/linux-2.6.25" diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 8dfa25c17a..e3814070ea 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -21,6 +21,7 @@ CMDLINE_append = " ${CMDLINE_DEBUG} " # Support for binary device tree generation KERNEL_DEVICETREE_mpc8313e-rdb = "arch/${ARCH}/boot/dts/mpc8313erdb.dts" +KERNEL_DEVICETREE_mpc8315e-rdb = "arch/${ARCH}/boot/dts/mpc8315erdb.dts" KERNEL_DEVICETREE_mpc8323e-rdb = "arch/${ARCH}/boot/dts/mpc832x_rdb.dts" KERNEL_DEVICETREE_kilauea = "arch/${ARCH}/boot/dts/kilauea.dts" KERNEL_DEVICETREE_sequoia = "arch/${ARCH}/boot/dts/sequoia.dts" diff --git a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb index da3f9772d3..cf9ef31c95 100644 --- a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb +++ b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "Vendor-compatible Linux kernel for the Linksys NSLU2 device" LICENSE = "GPL" -PR = "r21" +PR = "r22" COMPATIBLE_HOST = 'arm.*-linux' COMPATIBLE_MACHINE = "nslu2" @@ -49,5 +49,5 @@ do_configure_prepend() { rm -rf ${S}/include/asm-arm/arch ${S}/include/asm-arm/proc \ ${S}/include/asm-arm/.proc ${S}/include/asm-arm/.arch } -KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-${KERNEL_SUFFIX}-${DATETIME}.bin" -KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-${KERNEL_SUFFIX}.bin" +KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-${KERNEL_SUFFIX}-${DATETIME}" +KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-${KERNEL_SUFFIX}" diff --git a/packages/nonworking/opie-dasher/.mtn2git_empty b/packages/nonworking/opie-dasher/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/nonworking/opie-dasher/.mtn2git_empty diff --git a/packages/opie-dasher/opie-dasher.inc b/packages/nonworking/opie-dasher/opie-dasher.inc index 9903dd9a56..9903dd9a56 100644 --- a/packages/opie-dasher/opie-dasher.inc +++ b/packages/nonworking/opie-dasher/opie-dasher.inc diff --git a/packages/opie-dasher/opie-dasher_1.2.2.bb b/packages/nonworking/opie-dasher/opie-dasher_1.2.2.bb index 88c009d775..88c009d775 100644 --- a/packages/opie-dasher/opie-dasher_1.2.2.bb +++ b/packages/nonworking/opie-dasher/opie-dasher_1.2.2.bb diff --git a/packages/opie-dasher/opie-dasher_1.2.3.bb b/packages/nonworking/opie-dasher/opie-dasher_1.2.3.bb index e7774e33df..e7774e33df 100644 --- a/packages/opie-dasher/opie-dasher_1.2.3.bb +++ b/packages/nonworking/opie-dasher/opie-dasher_1.2.3.bb diff --git a/packages/opie-dasher/opie-dasher_cvs.bb b/packages/nonworking/opie-dasher/opie-dasher_cvs.bb index 10cca07fd6..10cca07fd6 100644 --- a/packages/opie-dasher/opie-dasher_cvs.bb +++ b/packages/nonworking/opie-dasher/opie-dasher_cvs.bb diff --git a/packages/opie-help-en/opie-help-en_cvs.bb b/packages/opie-help-en/opie-help-en_cvs.bb index 787b40833f..5960820a18 100644 --- a/packages/opie-help-en/opie-help-en_cvs.bb +++ b/packages/opie-help-en/opie-help-en_cvs.bb @@ -1,6 +1,6 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/help/en/html " diff --git a/packages/opie-i18n/opie-i18n_cvs.bb b/packages/opie-i18n/opie-i18n_cvs.bb index 3e269e73ef..96b8dad1c7 100644 --- a/packages/opie-i18n/opie-i18n_cvs.bb +++ b/packages/opie-i18n/opie-i18n_cvs.bb @@ -1,7 +1,7 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/i18n \ ${HANDHELDS_CVS};module=opie/etc/dict" diff --git a/packages/opie-i18n/opie-lrelease-native_cvs.bb b/packages/opie-i18n/opie-lrelease-native_cvs.bb index 94401fab78..bc1ea8932f 100644 --- a/packages/opie-i18n/opie-lrelease-native_cvs.bb +++ b/packages/opie-i18n/opie-lrelease-native_cvs.bb @@ -1,6 +1,7 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" + SRC_URI = "${HANDHELDS_CVS};module=opie/development/translation/opie-lrelease \ ${HANDHELDS_CVS};module=opie/development/translation/shared" diff --git a/packages/opie-i18n/opie-lupdate-native_cvs.bb b/packages/opie-i18n/opie-lupdate-native_cvs.bb index 5f2d834b74..f168ca527f 100644 --- a/packages/opie-i18n/opie-lupdate-native_cvs.bb +++ b/packages/opie-i18n/opie-lupdate-native_cvs.bb @@ -1,6 +1,7 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" + SRC_URI = "${HANDHELDS_CVS};module=opie/development/translation/opie-lupdate \ ${HANDHELDS_CVS};module=opie/development/translation/shared" diff --git a/packages/opie-keytabs/opie-keytabs_cvs.bb b/packages/opie-keytabs/opie-keytabs_cvs.bb index d18339a046..e00a55c6cd 100644 --- a/packages/opie-keytabs/opie-keytabs_cvs.bb +++ b/packages/opie-keytabs/opie-keytabs_cvs.bb @@ -1,6 +1,6 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/etc" diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb index 8923861dd6..be992e94db 100644 --- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb +++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb @@ -2,16 +2,17 @@ DESCRIPTION = "Skin for opie-mediaplayer2" SECTION = "opie/multimedia" PRIORITY = "optional" LICENSE = "GPL" -PV = "1.2.2+cvs${SRCDATE}" APPNAME = "opieplayer2" - RPROVIDES = "opie-mediaplayer2-skin" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/pics" -FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/default_landscape/*.png" - do_install() { install -d ${D}${palmtopdir}/pics/${APPNAME}/skins/default_landscape/ install -m 0644 ${WORKDIR}/pics/${APPNAME}/skins/default_landscape/*.png ${D}${palmtopdir}/pics/${APPNAME}/skins/default_landscape/ } + +FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/default_landscape/*.png" + diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb index 9546a6450e..1857849069 100644 --- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb +++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb @@ -2,16 +2,16 @@ DESCRIPTION = "Skin for opie-mediaplayer2" SECTION = "opie/multimedia" PRIORITY = "optional" LICENSE = "GPL" -PV = "1.2.2+cvs${SRCDATE}" APPNAME = "opieplayer2" - RPROVIDES = "opie-mediaplayer2-skin" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/pics" -FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/default/*.png" - do_install() { install -d ${D}${palmtopdir}/pics/${APPNAME}/skins/default/ install -m 0644 ${WORKDIR}/pics/${APPNAME}/skins/default/*.png ${D}${palmtopdir}/pics/${APPNAME}/skins/default/ } + +FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/default/*.png" diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb index 6ffde10a57..4d1e8fcba9 100644 --- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb +++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb @@ -2,16 +2,16 @@ DESCRIPTION = "Skin for opie-mediaplayer2" SECTION = "opie/multimedia" PRIORITY = "optional" LICENSE = "GPL" -PV = "1.2.2+cvs${SRCDATE}" APPNAME = "opieplayer2" - RPROVIDES = "opie-mediaplayer2-skin" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/pics" -FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/Pod/*.png" - do_install() { install -d ${D}${palmtopdir}/pics/${APPNAME}/skins/Pod/ install -m 0644 ${WORKDIR}/pics/${APPNAME}/skins/Pod/*.png ${D}${palmtopdir}/pics/${APPNAME}/skins/Pod/ } + +FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/Pod/*.png" diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb index 3d0eba2089..450c9dbc42 100644 --- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb +++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb @@ -2,16 +2,16 @@ DESCRIPTION = "Skin for opie-mediaplayer2" SECTION = "opie/multimedia" PRIORITY = "optional" LICENSE = "GPL" -PV = "1.2.2+cvs${SRCDATE}" APPNAME = "opieplayer2" - RPROVIDES = "opie-mediaplayer2-skin" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/pics" -FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/techno/*.png" - do_install() { install -d ${D}${palmtopdir}/pics/${APPNAME}/skins/techno/ install -m 0644 ${WORKDIR}/pics/${APPNAME}/skins/techno/*.png ${D}${palmtopdir}/pics/${APPNAME}/skins/techno/ } + +FILES_${PN} = "${palmtopdir}/pics/${APPNAME}/skins/techno/*.png" diff --git a/packages/opie-pics/opie-pics_cvs.bb b/packages/opie-pics/opie-pics_cvs.bb index 593ea5bf9c..78bce2c30a 100644 --- a/packages/opie-pics/opie-pics_cvs.bb +++ b/packages/opie-pics/opie-pics_cvs.bb @@ -1,7 +1,7 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/pics \ ${HANDHELDS_CVS};module=opie/pics-hires" diff --git a/packages/opie-sh-snes/opie-sh-snes_cvs.bb b/packages/opie-sh-snes/opie-sh-snes_cvs.bb index 5e69e87688..e28a02a80d 100644 --- a/packages/opie-sh-snes/opie-sh-snes_cvs.bb +++ b/packages/opie-sh-snes/opie-sh-snes_cvs.bb @@ -1,5 +1,4 @@ require ${PN}.inc -#Remove the dash below when 1.2.1 changes -PV = "1.2.2+cvs-${SRCDATE}" -PR = "r1" +PV = "${OPIE_CVS_PV}" +PR = "r2" diff --git a/packages/opie-sounds/opie-sounds_cvs.bb b/packages/opie-sounds/opie-sounds_cvs.bb index 818a1c48f1..fc16d24601 100644 --- a/packages/opie-sounds/opie-sounds_cvs.bb +++ b/packages/opie-sounds/opie-sounds_cvs.bb @@ -1,6 +1,6 @@ require ${PN}.inc -# Remove the dash below when 1.2.1 changes in PV -PV = "1.2.2+cvs-${SRCDATE}" +PV = "${OPIE_CVS_PV}" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};module=opie/sounds" diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc index 7ec97bc56c..b35dd8d593 100644 --- a/packages/opie-taskbar/opie-taskbar-images.inc +++ b/packages/opie-taskbar/opie-taskbar-images.inc @@ -19,6 +19,15 @@ PIXMAP_SIZE_simpad = "-800x600" PIXMAP_SIZE_asus730 = "-480x640" PIXMAP_SIZE_htcuniversal= "-480x640" PIXMAP_SIZE_hx4700 = "-480x640" +PIXMAP_SIZE_palmz31 = "-160x160" +PIXMAP_SIZE_palmz71 = "-320x320" +PIXMAP_SIZE_palmz72 = "-320x320" +PIXMAP_SIZE_palmt650 = "-320x320" +PIXMAP_SIZE_palmt680 = "-320x320" +PIXMAP_SIZE_palmt3 = "-320x480" +PIXMAP_SIZE_palmt5 = "-320x480" +PIXMAP_SIZE_palmtx = "-320x480" +PIXMAP_SIZE_palmld = "-320x480" do_configure() { : @@ -27,21 +36,14 @@ do_configure() { do_install() { install -d ${D}${palmtopdir}/pics/launcher - install -m 0644 ${FILESDIR}/firstuse-320x320.jpg ${D}${palmtopdir}/pics/launcher/firstuse-320x320.jpg - install -m 0644 ${FILESDIR}/opie-background-320x320.jpg ${D}${palmtopdir}/pics/launcher/opie-background-320x320.jpg install -m 0644 ${WORKDIR}/pics/launcher/firstuse.jpg ${D}${palmtopdir}/pics/launcher/firstuse-240x320.jpg install -m 0644 ${WORKDIR}/pics/launcher/opie-background.jpg ${D}${palmtopdir}/pics/launcher/opie-background-240x320.jpg - # TODO: those should be correct images for the resolution: - install -m 0644 ${WORKDIR}/pics/launcher/firstuse.jpg ${D}${palmtopdir}/pics/launcher/firstuse-320x240.jpg - install -m 0644 ${WORKDIR}/pics/launcher/opie-background.jpg ${D}${palmtopdir}/pics/launcher/opie-background-320x240.jpg - for res in 320x480 480x320 480x640 640x480 800x600; do +# for res in 320x240 240x320 320x320 320x480 480x320 480x640 640x480 600x800 800x600; do + for res in 240x240 320x320 320x480 480x320 480x640 640x480 800x600; do install -m 0644 ${WORKDIR}/pics/launcher/firstuse-${res}.jpg ${D}${palmtopdir}/pics/launcher/firstuse-${res}.jpg install -m 0644 ${WORKDIR}/pics/launcher/opie-background-${res}.jpg ${D}${palmtopdir}/pics/launcher/opie-background-${res}.jpg done - # TODO: those should be correct images for the resoltion: - install -m 0644 ${WORKDIR}/pics/launcher/firstuse-800x600.jpg ${D}${palmtopdir}/pics/launcher/firstuse-600x800.jpg - install -m 0644 ${WORKDIR}/pics/launcher/opie-background-800x600.jpg ${D}${palmtopdir}/pics/launcher/opie-background-600x800.jpg } python do_package_prepend () { diff --git a/packages/opie-taskbar/opie-taskbar-images_1.2.3+cvs20070922.bb b/packages/opie-taskbar/opie-taskbar-images_1.2.3+cvs20070922.bb index 0905cd5fe3..a36e85b34d 100644 --- a/packages/opie-taskbar/opie-taskbar-images_1.2.3+cvs20070922.bb +++ b/packages/opie-taskbar/opie-taskbar-images_1.2.3+cvs20070922.bb @@ -1,5 +1,5 @@ require ${PN}.inc -PR = "r0" -SRCDATE = "20070922" +PR = "r1" +SRCDATE = "20070922" SRC_URI = "${HANDHELDS_CVS};module=opie/pics" diff --git a/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb b/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb index 0c5b93780d..74b6c5205e 100644 --- a/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb +++ b/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb @@ -1,6 +1,6 @@ require ${PN}.inc -PR = "r1" - -TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}" +PR = "r2" SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/pics" + +TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}" diff --git a/packages/opie-taskbar/opie-taskbar-images_cvs.bb b/packages/opie-taskbar/opie-taskbar-images_cvs.bb index ff7ea9e17b..3d45118134 100644 --- a/packages/opie-taskbar/opie-taskbar-images_cvs.bb +++ b/packages/opie-taskbar/opie-taskbar-images_cvs.bb @@ -1,5 +1,5 @@ require ${PN}.inc -PV = "${OPIE_CVS_PV}" -PR = "r6" +PV = "${OPIE_CVS_PV}" +PR = "r7" SRC_URI = "${HANDHELDS_CVS};module=opie/pics" diff --git a/packages/opkg/opkg-native_svn.bb b/packages/opkg/opkg-native_svn.bb index bc38d512d6..57c6e61fb0 100644 --- a/packages/opkg/opkg-native_svn.bb +++ b/packages/opkg/opkg-native_svn.bb @@ -7,4 +7,10 @@ target_libdir := "${libdir}" inherit native +# The nogpg version isn't getting much love and has an unused variable which trips up -Werror +do_configure_prepend() { + sed -i -e s:-Werror::g ${S}/libopkg/Makefile.am +} + + EXTRA_OECONF += "--with-opkglibdir=${target_libdir} --disable-gpg" diff --git a/packages/opkg/opkg-nogpg_svn.bb b/packages/opkg/opkg-nogpg_svn.bb index aa16b551fe..3a7a0ee3b2 100644 --- a/packages/opkg/opkg-nogpg_svn.bb +++ b/packages/opkg/opkg-nogpg_svn.bb @@ -7,4 +7,9 @@ SRCREV = "${SRCREV_pn-opkg}" EXTRA_OECONF += "--disable-gpg" +# The nogpg version isn't getting much love and has an unused variable which trips up -Werror +do_configure_prepend() { + sed -i -e s:-Werror::g ${S}/libopkg/Makefile.am +} + DEFAULT_PREFERENCE = "-1" diff --git a/packages/opkg/opkg.inc b/packages/opkg/opkg.inc index 50816ef0e0..104e0fdb42 100644 --- a/packages/opkg/opkg.inc +++ b/packages/opkg/opkg.inc @@ -3,7 +3,7 @@ DESCRIPTION_libopkg = "Opkg Package Manager Library" SECTION = "base" LICENSE = "GPL" DEPENDS = "curl gpgme" -PV = "0.1+svnr${SRCREV}" +PV = "0.1.4+svnr${SRCREV}" SRC_URI = "svn://svn.openmoko.org/trunk/src/target/;module=opkg;proto=http \ file://fix_endianness.patch;patch=1;maxrev=4246" diff --git a/packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch b/packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch new file mode 100644 index 0000000000..f050a50002 --- /dev/null +++ b/packages/packagekit/files/d1e096c3267c1c9492041382b954e9327bc8bbec.patch @@ -0,0 +1,2938 @@ +diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c +index 3270e42..45e7a44 100644 +--- a/backends/alpm/pk-backend-alpm.c ++++ b/backends/alpm/pk-backend-alpm.c +@@ -895,7 +895,7 @@ backend_get_repo_list (PkBackend *backend, PkFilterEnum filters) + static gboolean + backend_install_files_thread (PkBackend *backend) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + gchar **full_paths = pk_backend_get_strv (backend, "full_paths"); + +@@ -1050,7 +1050,7 @@ backend_install_packages (PkBackend *backend, gchar **package_ids) + static gboolean + backend_refresh_cache_thread (PkBackend *backend) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NOSCRIPTLET, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) { + pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerror (pm_errno)); +diff --git a/backends/apt/pk-apt-build-db.cpp b/backends/apt/pk-apt-build-db.cpp +index d47c348..885275d 100644 +--- a/backends/apt/pk-apt-build-db.cpp ++++ b/backends/apt/pk-apt-build-db.cpp +@@ -40,7 +40,7 @@ void apt_build_db(PkBackend * backend, sqlite3 *db) + sqlite3_stmt *package = NULL; + + pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates(backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + sdir = g_build_filename(_config->Find("Dir").c_str(),_config->Find("Dir::State").c_str(),_config->Find("Dir::State::lists").c_str(), NULL); + dir = g_dir_open(sdir,0,&error); +diff --git a/backends/apt/pk-sqlite-pkg-cache.cpp b/backends/apt/pk-sqlite-pkg-cache.cpp +index 770fcdf..1bf9a50 100644 +--- a/backends/apt/pk-sqlite-pkg-cache.cpp ++++ b/backends/apt/pk-sqlite-pkg-cache.cpp +@@ -81,7 +81,7 @@ sqlite_search_packages_thread (PkBackend *backend) + const gchar *search; + + pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates(backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + type = pk_backend_get_uint (backend, "type"); + search = pk_backend_get_string (backend, "search"); + +@@ -176,7 +176,7 @@ sqlite_get_details_thread (PkBackend *backend) + } + + pk_backend_set_status(backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates(backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + pk_debug("finding %s", pi->name); + +diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c +index b7b8167..9263781 100644 +--- a/backends/box/pk-backend-box.c ++++ b/backends/box/pk-backend-box.c +@@ -138,7 +138,7 @@ backend_find_packages_thread (PkBackend *backend) + filter_box = filter_box | PKG_SEARCH_DETAILS; + } + +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + db = db_open(); + +diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c +index 49d4e5a..2df445e 100644 +--- a/backends/dummy/pk-backend-dummy.c ++++ b/backends/dummy/pk-backend-dummy.c +@@ -254,7 +254,7 @@ static void + backend_get_updates (PkBackend *backend, PkFilterEnum filters) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + /* check network state */ + if (!pk_backend_is_online (backend)) { + pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot check when offline"); +@@ -268,6 +268,8 @@ static gboolean + backend_install_timeout (gpointer data) + { + PkBackend *backend = (PkBackend *) data; ++ guint sub_percent; ++ + if (_progress_percentage == 100) { + pk_backend_finished (backend); + return FALSE; +@@ -283,9 +285,18 @@ backend_install_timeout (gpointer data) + pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, + "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora", + "Devel files for gtkhtml"); ++ /* this duplicate package should be ignored */ ++ pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, ++ "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora", NULL); + pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL); + } +- _progress_percentage += 10; ++ if (_progress_percentage > 30 && _progress_percentage < 50) { ++ sub_percent = ((gfloat) (_progress_percentage - 30.0f) / 20.0f) * 100.0f; ++ pk_backend_set_sub_percentage (backend, sub_percent); ++ } else { ++ pk_backend_set_sub_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); ++ } ++ _progress_percentage += 1; + pk_backend_set_percentage (backend, _progress_percentage); + return TRUE; + } +@@ -348,7 +359,7 @@ backend_install_packages (PkBackend *backend, gchar **package_ids) + pk_backend_package (backend, PK_INFO_ENUM_DOWNLOADING, + "gtkhtml2;2.19.1-4.fc8;i386;fedora", + "An HTML widget for GTK+ 2.0"); +- _signal_timeout = g_timeout_add (1000, backend_install_timeout, backend); ++ _signal_timeout = g_timeout_add (100, backend_install_timeout, backend); + } + + /** +@@ -526,7 +537,7 @@ backend_search_name_timeout (gpointer data) + static void + backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_set_allow_cancel (backend, TRUE); + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); + _signal_timeout = g_timeout_add (2000, backend_search_name_timeout, backend); +diff --git a/backends/opkg/pk-backend-opkg.c b/backends/opkg/pk-backend-opkg.c +index ecc97be..7649bab 100644 +--- a/backends/opkg/pk-backend-opkg.c ++++ b/backends/opkg/pk-backend-opkg.c +@@ -155,6 +155,38 @@ pk_opkg_progress_cb (opkg_t *opkg, const opkg_progress_data_t *pdata, void *data + return; + + pk_backend_set_percentage (backend, pdata->percentage); ++ if (pdata->package) ++ { ++ gchar *uid; ++ opkg_package_t *pkg = pdata->package; ++ gint status = PK_INFO_ENUM_UNKNOWN; ++ ++ uid = g_strdup_printf ("%s;%s;%s;", ++ pkg->name, pkg->version, pkg->architecture); ++ ++ if (pdata->action == OPKG_DOWNLOAD) ++ status = PK_INFO_ENUM_DOWNLOADING; ++ else if (pdata->action == OPKG_INSTALL) ++ status = PK_INFO_ENUM_INSTALLING; ++ else if (pdata->action == OPKG_REMOVE) ++ status = PK_INFO_ENUM_REMOVING; ++ ++ pk_backend_package (backend, status, uid, pkg->description); ++ g_free (uid); ++ } ++ ++ switch (pdata->action) ++ { ++ case OPKG_DOWNLOAD: ++ pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD); ++ break; ++ case OPKG_INSTALL: ++ pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL); ++ break; ++ case OPKG_REMOVE: ++ pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE); ++ break; ++ } + } + + static gboolean +@@ -163,8 +195,12 @@ backend_refresh_cache_thread (PkBackend *backend) + int ret; + + ret = opkg_update_package_lists (opkg, pk_opkg_progress_cb, backend); ++ + if (ret) { +- opkg_unknown_error (backend, ret, "Refreshing cache"); ++ if (ret == OPKG_DOWNLOAD_FAILED) ++ pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_AVAILABLE, NULL); ++ else ++ opkg_unknown_error (backend, ret, "Refreshing cache"); + } + pk_backend_finished (backend); + +@@ -178,7 +214,7 @@ static void + backend_refresh_cache (PkBackend *backend, gboolean force) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_REFRESH_CACHE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + + pk_backend_thread_create (backend, backend_refresh_cache_thread); +@@ -279,7 +315,7 @@ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *sear + + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + params = g_new0 (SearchParams, 1); + params->filters = filters; +@@ -301,7 +337,7 @@ backend_search_description (PkBackend *backend, PkFilterEnum filters, const gcha + + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + params = g_new0 (SearchParams, 1); + params->filters = filters; +@@ -320,7 +356,7 @@ backend_search_group (PkBackend *backend, PkFilterEnum filters, const gchar *sea + + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + params = g_new0 (SearchParams, 1); + params->filters = filters; +@@ -337,30 +373,52 @@ static gboolean + backend_install_packages_thread (PkBackend *backend) + { + PkPackageId *pi; +- gint err; +- const gchar *package_id; ++ gint err, i; ++ gchar **package_ids; + +- package_id = pk_backend_get_string (backend, "pkid"); +- pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_id, NULL); ++ package_ids = pk_backend_get_strv (backend, "pkids"); + +- pi = pk_package_id_new_from_string (package_id); ++ err = 0; ++ ++ for (i = 0; package_ids[i]; i++) ++ { ++ pk_backend_package (backend, PK_INFO_ENUM_INSTALLING, package_ids[0], NULL); + +- err = opkg_install_package (opkg, pi->name, pk_opkg_progress_cb, backend); +- if (err != 0) +- opkg_unknown_error (backend, err, "Install"); ++ pi = pk_package_id_new_from_string (package_ids[0]); ++ ++ err = opkg_install_package (opkg, pi->name, pk_opkg_progress_cb, backend); ++ switch (err) ++ { ++ case OPKG_NO_ERROR: ++ break; ++ case OPKG_DEPENDANCIES_FAILED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, NULL); ++ break; ++ case OPKG_PACKAGE_ALREADY_INSTALLED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ALREADY_INSTALLED, NULL); ++ break; ++ case OPKG_PACKAGE_NOT_AVAILABLE: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL); ++ break; ++ default: ++ opkg_unknown_error (backend, err, "Install"); ++ } ++ pk_package_id_free (pi); ++ if (err != 0) ++ break; ++ } + +- pk_package_id_free (pi); + pk_backend_finished (backend); + return (err == 0); + } + + static void +-backend_install_packages (PkBackend *backend, gchar **package_id) ++backend_install_packages (PkBackend *backend, gchar **package_ids) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL); + +- pk_backend_set_string (backend, "pkid", package_id[0]); ++ pk_backend_set_strv (backend, "pkids", package_ids); + + pk_backend_thread_create (backend, backend_install_packages_thread); + } +@@ -369,7 +427,7 @@ static gboolean + backend_remove_packages_thread (PkBackend *backend) + { + PkPackageId *pi; +- gint err; ++ gint err, i; + gchar **package_ids; + gboolean allow_deps; + gboolean autoremove; +@@ -382,19 +440,34 @@ backend_remove_packages_thread (PkBackend *backend) + autoremove = GPOINTER_TO_INT (data[2]); + g_free (data); + +- pi = pk_package_id_new_from_string (package_ids[0]); +- pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[0], NULL); +- + opkg_set_option (opkg, "autoremove", &autoremove); + opkg_set_option (opkg, "force_removal_of_dependent_packages", &allow_deps); + +- err = opkg_remove_package (opkg, pi->name, pk_opkg_progress_cb, backend); ++ err = 0; + +- /* TODO: improve error reporting */ +- if (err != 0) +- opkg_unknown_error (backend, err, "Remove"); ++ for (i = 0; package_ids[i]; i++) ++ { ++ pi = pk_package_id_new_from_string (package_ids[0]); ++ pk_backend_package (backend, PK_INFO_ENUM_REMOVING, package_ids[0], NULL); ++ ++ err = opkg_remove_package (opkg, pi->name, pk_opkg_progress_cb, backend); ++ ++ switch (err) ++ { ++ case OPKG_NO_ERROR: ++ break; ++ case OPKG_PACKAGE_NOT_INSTALLED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL); ++ break; ++ default: ++ opkg_unknown_error (backend, err, "Remove"); ++ } ++ pk_package_id_free (pi); ++ ++ if (err != 0) ++ break; ++ } + +- pk_package_id_free (pi); + pk_backend_finished (backend); + return (err == 0); + } +@@ -405,7 +478,7 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow + gpointer *params; + + pk_backend_set_status (backend, PK_STATUS_ENUM_REMOVE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + /* params is a small array we can pack our thread parameters into */ + params = g_new0 (gpointer, 2); +@@ -450,7 +523,7 @@ static void + backend_update_system (PkBackend *backend) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + pk_backend_thread_create (backend, backend_update_system_thread); + } +@@ -478,8 +551,14 @@ backend_update_package_thread (PkBackend *backend) + } + + err = opkg_upgrade_package (opkg, pi->name, pk_opkg_progress_cb, backend); +- +- if (err != 0) { ++ switch (err) ++ { ++ case OPKG_NO_ERROR: ++ break; ++ case OPKG_PACKAGE_NOT_INSTALLED: ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, NULL); ++ break; ++ default: + opkg_unknown_error (backend, err, "Update package"); + } + +@@ -494,7 +573,7 @@ backend_update_packages (PkBackend *backend, gchar **package_ids) + gint i; + + pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + for (i = 0; package_ids[i]; i++) { + pk_backend_set_string (backend, "pkgid", package_ids[i]); +@@ -536,7 +615,7 @@ static void + backend_get_updates (PkBackend *backend, PkFilterEnum filters) + { + pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + pk_backend_thread_create (backend, backend_get_updates_thread); + } +@@ -572,19 +651,26 @@ backend_get_details_thread (PkBackend *backend) + if (pi == NULL) + { + pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id"); +- pk_package_id_free (pi); ++ pk_backend_finished (backend); + return FALSE; + } + + + pkg = opkg_find_package (opkg, pi->name, pi->version, pi->arch, pi->data); ++ pk_package_id_free (pi); ++ ++ if (!pkg) ++ { ++ pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, NULL); ++ pk_backend_finished (backend); ++ return FALSE; ++ } + + newid = g_strdup_printf ("%s;%s;%s;%s", pkg->name, pkg->version, pkg->architecture, pkg->repository); + + pk_backend_details (backend, newid, NULL, 0, pkg->description, pkg->url, pkg->size); + + g_free (newid); +- pk_package_id_free (pi); + pk_backend_finished (backend); + return TRUE; + } +@@ -592,7 +678,7 @@ backend_get_details_thread (PkBackend *backend) + static void + backend_get_details (PkBackend *backend, const gchar *package_id) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_thread_create (backend, backend_get_details_thread); + } + +diff --git a/backends/test/pk-backend-test-dbus.c b/backends/test/pk-backend-test-dbus.c +index 5dfea32..76686dc 100644 +--- a/backends/test/pk-backend-test-dbus.c ++++ b/backends/test/pk-backend-test-dbus.c +@@ -36,7 +36,7 @@ static void + backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search) + { + pk_backend_set_allow_cancel (backend, TRUE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + pk_backend_dbus_search_name (dbus, filters, search); + } + +diff --git a/backends/test/pk-backend-test-spawn.c b/backends/test/pk-backend-test-spawn.c +index 2958c05..584f44c 100644 +--- a/backends/test/pk-backend-test-spawn.c ++++ b/backends/test/pk-backend-test-spawn.c +@@ -35,7 +35,7 @@ backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *sear + { + gchar *filters_text; + pk_backend_set_allow_cancel (backend, TRUE); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + filters_text = pk_filter_enums_to_text (filters); + pk_backend_spawn_helper (spawn, "search-name.sh", filters_text, search, NULL); + g_free (filters_text); +diff --git a/backends/test/pk-backend-test-succeed.c b/backends/test/pk-backend-test-succeed.c +index 17cdc6e..c046c1d 100644 +--- a/backends/test/pk-backend-test-succeed.c ++++ b/backends/test/pk-backend-test-succeed.c +@@ -236,7 +236,7 @@ backend_search_name_timeout (gpointer data) + static void + backend_search_name (PkBackend *backend, PkFilterEnum filters, const gchar *search) + { +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + g_timeout_add (200000, backend_search_name_timeout, backend); + } + +diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py +index f76e27c..5b2da8f 100644 +--- a/backends/yum/helpers/yumBackend.py ++++ b/backends/yum/helpers/yumBackend.py +@@ -801,6 +801,8 @@ class PackageKitYumBackend(PackageKitBaseBackend): + old_throttle = self.yumbase.conf.throttle + self.yumbase.conf.throttle = "60%" # Set bandwidth throttle to 60% + # to avoid taking all the system's bandwidth. ++ old_skip_broken = self.yumbase.conf.skip_broken ++ self.yumbase.conf.skip_broken = 1 + + try: + txmbr = self.yumbase.update() # Add all updates to Transaction +@@ -812,6 +814,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + self.error(ERROR_NO_PACKAGES_TO_UPDATE,"Nothing to do") + + self.yumbase.conf.throttle = old_throttle ++ self.yumbase.conf.skip_broken = old_skip_broken + + def refresh_cache(self): + ''' +@@ -905,7 +908,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + if txmbrs: + self._runYumTransaction() + else: +- self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"This package could not be installed as it is already installed") ++ self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package is already installed") + + def _checkForNewer(self,po): + pkgs = self.yumbase.pkgSack.returnNewestByName(name=po.name) +@@ -1003,7 +1006,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + return False + + if self._is_inst(po): +- self.error(ERROR_PACKAGE_ALREADY_INSTALLED, "%s is already installed" % str(po)) ++ self.error(ERROR_PACKAGE_ALREADY_INSTALLED, "The package %s is already installed" % str(po)) + return False + + if len(self.yumbase.conf.exclude) > 0: +diff --git a/backends/yum2/helpers/testyum2.py b/backends/yum2/helpers/testyum2.py +index cdec507..85b47f9 100755 +--- a/backends/yum2/helpers/testyum2.py ++++ b/backends/yum2/helpers/testyum2.py +@@ -80,7 +80,7 @@ try: + #iface.GetPackages(FILTER_INSTALLED,'no') + if cmd == 'get-repolist' or cmd == 'all': + print "Testing GetRepoList()" +- iface.GetRepoList() ++ iface.GetRepoList("") + if cmd == 'get-updatedetail' or cmd == 'all': + print "Testing GetUpdateDetail(PKG_ID)" + iface.GetUpdateDetail(PKG_ID) +diff --git a/backends/yum2/helpers/yumDBUSBackend.py b/backends/yum2/helpers/yumDBUSBackend.py +index 9cfed94..29f5b03 100755 +--- a/backends/yum2/helpers/yumDBUSBackend.py ++++ b/backends/yum2/helpers/yumDBUSBackend.py +@@ -434,7 +434,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + try: + pkgGroupDict = self._buildGroupDict() + fltlist = filters.split(';') +- found = {} ++ installed_nevra = [] # yum returns packages as available even when installed + + if not FILTER_NOT_INSTALLED in fltlist: + # Check installed for group +@@ -450,21 +450,31 @@ class PackageKitYumBackend(PackageKitBaseBackend): + group = groupMap[cg] # use the pk group name, instead of yum 'category/group' + if group == key: + if self._do_extra_filtering(pkg, fltlist): +- self._show_package(pkg, INFO_INSTALLED) ++ package_list.append((pkg,INFO_INSTALLED)) ++ installed_nevra.append(self._get_nevra(pkg)) ++ + if not FILTER_INSTALLED in fltlist: + # Check available for group + for pkg in self.yumbase.pkgSack: + if self._cancel_check("Search cancelled."): + # _cancel_check() sets the error message, unlocks yum, and calls Finished() + return +- group = GROUP_OTHER +- if pkgGroupDict.has_key(pkg.name): +- cg = pkgGroupDict[pkg.name] +- if groupMap.has_key(cg): +- group = groupMap[cg] +- if group == key: +- if self._do_extra_filtering(pkg, fltlist): +- self._show_package(pkg, INFO_AVAILABLE) ++ ++ nevra = self._get_nevra(pkg) ++ if nevra not in installed_nevra: ++ group = GROUP_OTHER ++ if pkgGroupDict.has_key(pkg.name): ++ cg = pkgGroupDict[pkg.name] ++ if groupMap.has_key(cg): ++ group = groupMap[cg] ++ if group == key: ++ if self._do_extra_filtering(pkg, fltlist): ++ package_list.append((pkg,INFO_AVAILABLE)) ++ ++ except yum.Errors.GroupsError,e: ++ self._unlock_yum() ++ self.ErrorCode(ERROR_GROUP_NOT_FOUND, str(e)) ++ self.Finished(EXIT_FAILED) + except yum.Errors.RepoError,e: + self.Message(MESSAGE_NOTICE, "The package cache is invalid and is being rebuilt.") + self._refresh_yum_cache() +@@ -473,6 +483,14 @@ class PackageKitYumBackend(PackageKitBaseBackend): + + return + ++ # basename filter if specified ++ if FILTER_BASENAME in fltlist: ++ for (pkg,status) in self._basename_filter(package_list): ++ self._show_package(pkg,status) ++ else: ++ for (pkg,status) in package_list: ++ self._show_package(pkg,status) ++ + self._unlock_yum() + self.Finished(EXIT_SUCCESS) + +@@ -724,6 +742,11 @@ class PackageKitYumBackend(PackageKitBaseBackend): + #we might have a rounding error + self.PercentageChanged(100) + ++ except yum.Errors.RepoError,e: ++ self._unlock_yum() ++ self.ErrorCode(ERROR_REPO_CONFIGURATION_ERROR,str(e)) ++ self.Finished(EXIT_FAILED) ++ self.Exit() + except yum.Errors.YumBaseError, e: + self._unlock_yum() + # This should be a better-defined error, but I'm not sure +@@ -837,6 +860,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + Needed to be implemented in a sub class + ''' + if inst_file.endswith('.src.rpm'): ++ self._unlock_yum() + self.ErrorCode(ERROR_CANNOT_INSTALL_SOURCE_PACKAGE,'Backend will not install a src rpm file') + self.Finished(EXIT_FAILED) + return +@@ -1385,30 +1409,30 @@ class PackageKitYumBackend(PackageKitBaseBackend): + res = self.yumbase.searchGenerator(searchlist, [key]) + fltlist = filters.split(';') + +- available = [] +- count = 1 ++ seen_nevra = [] # yum returns packages as available even when installed ++ pkg_list = [] # only do the second iteration on not installed pkgs ++ package_list = [] #we can't do emitting as found if we are post-processing ++ + for (pkg,values) in res: + if self._cancel_check("Search cancelled."): + return False + # are we installed? + if pkg.repo.id == 'installed': +- if FILTER_NOT_INSTALLED not in fltlist: +- if self._do_extra_filtering(pkg,fltlist): +- count+=1 +- if count > 100: +- break +- self._show_package(pkg, INFO_INSTALLED) ++ if self._do_extra_filtering(pkg,fltlist): ++ package_list.append((pkg,INFO_INSTALLED)) ++ seen_nevra.append(self._get_nevra(pkg)) + else: +- available.append(pkg) ++ pkg_list.append(pkg) + +- # Now show available packages. +- if FILTER_INSTALLED not in fltlist: +- for pkg in available: +- if self._cancel_check("Search cancelled."): +- return False +- if self._do_extra_filtering(pkg,fltlist): +- self._show_package(pkg, INFO_AVAILABLE) ++ for pkg in pkg_list: ++ if self._cancel_check("Search cancelled."): ++ return False + ++ nevra = self._get_nevra(pkg) ++ if nevra not in seen_nevra: ++ if self._do_extra_filtering(pkg,fltlist): ++ package_list.append((pkg,INFO_AVAILABLE)) ++ seen_nevra.append(self._get_nevra(pkg)) + except yum.Errors.RepoError,e: + self.Message(MESSAGE_NOTICE, "The package cache is invalid and is being rebuilt.") + self._refresh_yum_cache() +@@ -1417,13 +1441,22 @@ class PackageKitYumBackend(PackageKitBaseBackend): + + return False + ++ # basename filter if specified ++ if FILTER_BASENAME in fltlist: ++ for (pkg,status) in self._basename_filter(package_list): ++ self._show_package(pkg,status) ++ else: ++ for (pkg,status) in package_list: ++ self._show_package(pkg,status) ++ + return True + + def _do_extra_filtering(self,pkg,filterList): + ''' do extra filtering (gui,devel etc) ''' + for filter in filterList: + if filter in (FILTER_INSTALLED, FILTER_NOT_INSTALLED): +- continue ++ if not self._do_installed_filtering(filter,pkg): ++ return False + elif filter in (FILTER_GUI, FILTER_NOT_GUI): + if not self._do_gui_filtering(filter, pkg): + return False +@@ -1433,11 +1466,17 @@ class PackageKitYumBackend(PackageKitBaseBackend): + elif filter in (FILTER_FREE, FILTER_NOT_FREE): + if not self._do_free_filtering(filter, pkg): + return False +- elif filter in (FILTER_BASENAME, FILTER_NOT_BASENAME): +- if not self._do_basename_filtering(filter, pkg): +- return False + return True + ++ def _do_installed_filtering(self,flt,pkg): ++ isInstalled = False ++ if flt == FILTER_INSTALLED: ++ wantInstalled = True ++ else: ++ wantInstalled = False ++ isInstalled = pkg.repo.id == 'installed' ++ return isInstalled == wantInstalled ++ + def _do_gui_filtering(self,flt,pkg): + isGUI = False + if flt == FILTER_GUI: +@@ -1477,32 +1516,7 @@ class PackageKitYumBackend(PackageKitBaseBackend): + + return isFree == wantFree + +- def _do_basename_filtering(self,flt,pkg): +- if flt == FILTER_BASENAME: +- wantBase = True +- else: +- wantBase = False +- +- isBase = self._check_basename(pkg) +- +- return isBase == wantBase + +- def _check_basename(self, pkg): +- ''' +- If a package does not have a source rpm (If that ever +- happens), or it does have a source RPM, and the package's name +- is the same as the source RPM's name, then we assume it is the +- 'base' package. +- ''' +- basename = pkg.name +- +- if pkg.sourcerpm: +- basename = rpmUtils.miscutils.splitFilename(pkg.sourcerpm)[0] +- +- if basename == pkg.name: +- return True +- +- return False + + def _is_development_repo(self, repo): + if repo.endswith('-debuginfo'): +@@ -1576,28 +1590,41 @@ class PackageKitYumBackend(PackageKitBaseBackend): + ''' + find a package based on a package id (name;version;arch;repoid) + ''' +- # Split up the id +- (n,idver,a,d) = self.get_package_from_id(id) +- # get e,v,r from package id version +- e,v,r = self._getEVR(idver) ++ # is this an real id or just an name ++ if len(id.split(';')) > 1: ++ # Split up the id ++ (n,idver,a,d) = self.get_package_from_id(id) ++ # get e,v,r from package id version ++ e,v,r = self._getEVR(idver) ++ else: ++ n = id ++ e = v = r = a = None + # search the rpmdb for the nevra + pkgs = self.yumbase.rpmdb.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a) +- # if the package is found, then return it ++ # if the package is found, then return it (do not have to match the repo_id) + if len(pkgs) != 0: + return pkgs[0],True + # search the pkgSack for the nevra +- pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a) +- # if the package is found, then return it +- if len(pkgs) != 0: +- return pkgs[0],False +- else: ++ try: ++ pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a) ++ except yum.Errors.RepoError,e: ++ self.error(ERROR_REPO_NOT_AVAILABLE,str(e)) ++ # nothing found ++ if len(pkgs) == 0: + return None,False ++ # one NEVRA in a single repo ++ if len(pkgs) == 1: ++ return pkgs[0],False ++ # we might have the same NEVRA in multiple repos, match by repo name ++ for pkg in pkgs: ++ if d == pkg.repoid: ++ return pkg,False ++ # repo id did not match ++ return None,False + + def _is_inst(self,pkg): + return self.yumbase.rpmdb.installed(po=pkg) + +- +- + def _installable(self, pkg, ematch=False): + + """check if the package is reasonably installable, true/false""" +@@ -1764,6 +1791,57 @@ class PackageKitYumBackend(PackageKitBaseBackend): + return INFO_ENHANCEMENT + else: + return INFO_UNKNOWN ++ def _is_main_package(self,repo): ++ if repo.endswith('-debuginfo'): ++ return False ++ if repo.endswith('-devel'): ++ return False ++ if repo.endswith('-libs'): ++ return False ++ return True ++ ++ def _basename_filter(self,package_list): ++ ''' ++ Filter the list so that the number of packages are reduced. ++ This is done by only displaying gtk2 rather than gtk2-devel, gtk2-debuginfo, etc. ++ This imlementation is done by comparing the SRPM name, and if not falling back ++ to the first entry. ++ We have to fall back else we don't emit packages where the SRPM does not produce a ++ RPM with the same name, for instance, mono produces mono-core, mono-data and mono-winforms. ++ @package_list: a (pkg,status) list of packages ++ A new list is returned that has been filtered ++ ''' ++ base_list = [] ++ output_list = [] ++ base_list_already_got = [] ++ ++ #find out the srpm name and add to a new array of compound data ++ for (pkg,status) in package_list: ++ if pkg.sourcerpm: ++ base = rpmUtils.miscutils.splitFilename(pkg.sourcerpm)[0] ++ base_list.append ((pkg,status,base,pkg.version)); ++ else: ++ base_list.append ((pkg,status,'nosrpm',pkg.version)); ++ ++ #find all the packages that match thier basename name (done seporately so we get the "best" match) ++ for (pkg,status,base,version) in base_list: ++ if base == pkg.name and (base,version) not in base_list_already_got: ++ output_list.append((pkg,status)) ++ base_list_already_got.append ((base,version)) ++ ++ #for all the ones not yet got, can we match against a non devel match? ++ for (pkg,status,base,version) in base_list: ++ if (base,version) not in base_list_already_got: ++ if self._is_main_package(pkg.name): ++ output_list.append((pkg,status)) ++ base_list_already_got.append ((base,version)) ++ ++ #add the remainder of the packages, which should just be the single debuginfo's ++ for (pkg,status,base,version) in base_list: ++ if (base,version) not in base_list_already_got: ++ output_list.append((pkg,status)) ++ base_list_already_got.append ((base,version)) ++ return output_list + + def _get_obsoleted(self,name): + obsoletes = self.yumbase.up.getObsoletesTuples( newest=1 ) +diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp +index 746da82..15c4b4f 100644 +--- a/backends/zypp/pk-backend-zypp.cpp ++++ b/backends/zypp/pk-backend-zypp.cpp +@@ -1170,7 +1170,7 @@ backend_find_packages_thread (PkBackend *backend) + mode = pk_backend_get_uint (backend, "mode"); + + pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY); +- pk_backend_no_percentage_updates (backend); ++ pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID); + + std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable>; + std::vector<zypp::sat::Solvable> *v2 = new std::vector<zypp::sat::Solvable>; +diff --git a/client/pk-console.c b/client/pk-console.c +index 8f69068..5a05a8e 100644 +--- a/client/pk-console.c ++++ b/client/pk-console.c +@@ -50,7 +50,7 @@ static gboolean awaiting_space = FALSE; + static gboolean trusted = TRUE; + static guint timer_id = 0; + static guint percentage_last = 0; +-static gchar *filename = NULL; ++static gchar **files_cache = NULL; + static PkControl *control = NULL; + static PkClient *client = NULL; + static PkClient *client_task = NULL; +@@ -494,6 +494,12 @@ pk_console_perhaps_resolve (PkClient *client, PkFilterEnum filter, const gchar * + return g_strdup (package); + } + ++ ret = pk_client_reset (client_task, error); ++ if (ret == FALSE) { ++ pk_warning ("failed to reset client task"); ++ return NULL; ++ } ++ + /* we need to resolve it */ + ret = pk_client_resolve (client_task, filter, package, error); + if (ret == FALSE) { +@@ -549,20 +555,93 @@ pk_console_perhaps_resolve (PkClient *client, PkFilterEnum filter, const gchar * + } + + /** +- * pk_console_install_package: ++ * pk_console_install_stuff: + **/ + static gboolean +-pk_console_install_package (PkClient *client, const gchar *package, GError **error) ++pk_console_install_stuff (PkClient *client, gchar **packages, GError **error) + { +- gboolean ret; +- gchar *package_id; +- package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_NOT_INSTALLED, package, error); +- if (package_id == NULL) { +- g_print ("%s\n", _("Could not find a package with that name to install, or package already installed")); +- return FALSE; ++ gboolean ret = TRUE; ++ gboolean is_local; ++ gchar *package_id = NULL; ++ gchar **package_ids = NULL; ++ gchar **files = NULL; ++ guint i; ++ guint length; ++ GPtrArray *array_packages; ++ GPtrArray *array_files; ++ ++ array_packages = g_ptr_array_new (); ++ array_files = g_ptr_array_new (); ++ length = g_strv_length (packages); ++ for (i=2; i<length; i++) { ++ is_local = g_file_test (packages[i], G_FILE_TEST_EXISTS); ++ if (is_local) { ++ g_ptr_array_add (array_files, g_strdup (packages[i])); ++ } else { ++ package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_NOT_INSTALLED, packages[i], error); ++ if (package_id == NULL) { ++ g_print ("%s\n", _("Could not find a package with that name to install, or package already installed")); ++ ret = FALSE; ++ break; ++ } ++ g_ptr_array_add (array_packages, package_id); ++ } + } +- ret = pk_client_install_package (client, package_id, error); +- g_free (package_id); ++ ++ /* one of the resolves failed */ ++ if (!ret) { ++ pk_warning ("resolve failed"); ++ goto out; ++ } ++ ++ ++ /* any to process? */ ++ if (array_packages->len > 0) { ++ /* convert to strv */ ++ package_ids = pk_ptr_array_to_argv (array_packages); ++ ++ /* reset */ ++ ret = pk_client_reset (client, error); ++ if (!ret) { ++ pk_warning ("failed to reset"); ++ goto out; ++ } ++ ++ ret = pk_client_install_package (client, package_id, error); ++ if (!ret) { ++ pk_warning ("failed to install packages"); ++ goto out; ++ } ++ } ++ ++ /* any to process? */ ++ if (array_files->len > 0) { ++ /* convert to strv */ ++ files = pk_ptr_array_to_argv (array_files); ++ ++ /* save for untrusted callback */ ++ g_strfreev (files_cache); ++ files_cache = g_strdupv (files); ++ ++ /* reset */ ++ ret = pk_client_reset (client, error); ++ if (!ret) { ++ pk_warning ("failed to reset"); ++ goto out; ++ } ++ ++ ret = pk_client_install_files (client, trusted, files, error); ++ if (!ret) { ++ pk_warning ("failed to install files"); ++ goto out; ++ } ++ } ++ ++out: ++ g_strfreev (package_ids); ++ g_strfreev (files); ++ g_ptr_array_free (array_files, TRUE); ++ g_ptr_array_free (array_packages, TRUE); + return ret; + } + +@@ -570,16 +649,16 @@ pk_console_install_package (PkClient *client, const gchar *package, GError **err + * pk_console_remove_only: + **/ + static gboolean +-pk_console_remove_only (PkClient *client, const gchar *package_id, gboolean force, gboolean autoremove, GError **error) ++pk_console_remove_only (PkClient *client, gchar **package_ids, gboolean force, GError **error) + { + gboolean ret; + +- pk_debug ("remove %s", package_id); ++ pk_debug ("remove+ %s", package_ids[0]); + ret = pk_client_reset (client, error); + if (!ret) { + return ret; + } +- return pk_client_remove_package (client, package_id, force, autoremove, error); ++ return pk_client_remove_packages (client, package_ids, force, FALSE, error); + } + + /** +@@ -625,64 +704,99 @@ pk_console_get_prompt (const gchar *question, gboolean defaultyes) + } + + /** +- * pk_console_remove_package: ++ * pk_console_remove_packages: + **/ + static gboolean +-pk_console_remove_package (PkClient *client, const gchar *package, GError **error) ++pk_console_remove_packages (PkClient *client, gchar **packages, GError **error) + { + gchar *package_id; +- gboolean ret; +- guint length; ++ gboolean ret = TRUE; + PkPackageItem *item; + PkPackageId *ident; +- guint i; ++ guint i, j; ++ guint size; ++ guint length; + gboolean remove; ++ GPtrArray *array; ++ gchar **package_ids = NULL; ++ PkPackageList *list; ++ ++ array = g_ptr_array_new (); ++ list = pk_package_list_new (); ++ length = g_strv_length (packages); ++ for (i=2; i<length; i++) { ++ package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_INSTALLED, packages[i], error); ++ if (package_id == NULL) { ++ g_print ("%s:%s\n", _("Could not find a package to remove"), packages[i]); ++ ret = FALSE; ++ break; ++ } ++ g_ptr_array_add (array, g_strdup (package_id)); ++ pk_debug ("resolved to %s", package_id); ++ g_free (package_id); ++ } + +- package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_INSTALLED, package, error); +- if (package_id == NULL) { +- g_print ("%s\n", _("Could not find a package with that name to remove")); +- return FALSE; ++ /* one of the resolves failed */ ++ if (!ret) { ++ goto out; + } + ++ /* convert to strv */ ++ package_ids = pk_ptr_array_to_argv (array); ++ + /* are we dumb and can't check for requires? */ + if (!pk_enums_contain (roles, PK_ROLE_ENUM_GET_REQUIRES)) { + /* no, just try to remove it without deps */ +- ret = pk_console_remove_only (client, package_id, FALSE, FALSE, error); +- g_free (package_id); +- return ret; ++ ret = pk_console_remove_only (client, package_ids, FALSE, error); ++ goto out; + } + +- /* see if any packages require this one */ +- ret = pk_client_reset (client_task, error); +- if (!ret) { +- pk_warning ("failed to reset"); +- return FALSE; ++ /* get the requires packages for each package_id */ ++ length = g_strv_length (package_ids); ++ for (i=0; i<length; i++) { ++ ret = pk_client_reset (client_task, error); ++ if (!ret) { ++ pk_warning ("failed to reset"); ++ break; ++ } ++ ++ pk_debug ("Getting installed requires for %s", package_ids[i]); ++ /* see if any packages require this one */ ++ ret = pk_client_get_requires (client_task, PK_FILTER_ENUM_INSTALLED, package_ids[i], TRUE, error); ++ if (!ret) { ++ pk_warning ("failed to get requires"); ++ break; ++ } ++ ++ /* see how many packages there are */ ++ size = pk_client_package_buffer_get_size (client_task); ++ for (j=0; j<size; j++) { ++ item = pk_client_package_buffer_get_item (client_task, j); ++ pk_package_list_add_item (list, item); ++ } + } + +- pk_debug ("Getting installed requires for %s", package_id); +- ret = pk_client_get_requires (client_task, PK_FILTER_ENUM_INSTALLED, package_id, TRUE, error); ++ /* one of the get-requires failed */ + if (!ret) { +- return FALSE; ++ goto out; + } + +- /* see how many packages there are */ +- length = pk_client_package_buffer_get_size (client_task); +- + /* if there are no required packages, just do the remove */ ++ length = pk_package_list_get_size (list); + if (length == 0) { + pk_debug ("no requires"); +- ret = pk_console_remove_only (client, package_id, FALSE, FALSE, error); +- g_free (package_id); +- return ret; ++ ret = pk_console_remove_only (client, package_ids, FALSE, error); ++ goto out; + } + ++ + /* present this to the user */ + if (awaiting_space) { + g_print ("\n"); + } + g_print ("%s:\n", _("The following packages have to be removed")); + for (i=0; i<length; i++) { +- item = pk_client_package_buffer_get_item (client_task, i); ++ item = pk_package_list_get_item (list, i); + ident = pk_package_id_new_from_string (item->package_id); + g_print ("%i\t%s-%s\n", i, ident->name, ident->version); + pk_package_id_free (ident); +@@ -694,14 +808,17 @@ pk_console_remove_package (PkClient *client, const gchar *package, GError **erro + /* we chickened out */ + if (remove == FALSE) { + g_print ("%s\n", _("Cancelled!")); +- g_free (package_id); +- return FALSE; ++ ret = FALSE; ++ goto out; + } + + /* remove all the stuff */ +- ret = pk_console_remove_only (client, package_id, TRUE, FALSE, error); +- g_free (package_id); ++ ret = pk_console_remove_only (client, package_ids, TRUE, error); + ++out: ++ g_object_unref (list); ++ g_strfreev (package_ids); ++ g_ptr_array_free (array, TRUE); + return ret; + } + +@@ -840,7 +957,7 @@ pk_console_error_code_cb (PkClient *client, PkErrorCodeEnum error_code, const gc + error_code == PK_ERROR_ENUM_MISSING_GPG_SIGNATURE && trusted) { + pk_debug ("need to try again with trusted FALSE"); + trusted = FALSE; +- ret = pk_client_install_file (client_install_files, trusted, filename, &error); ++ ret = pk_client_install_files (client_install_files, trusted, files_cache, &error); + /* we succeeded, so wait for the requeue */ + if (!ret) { + pk_warning ("failed to install file second time: %s", error->message); +@@ -1153,7 +1270,6 @@ main (int argc, char *argv[]) + const gchar *value = NULL; + const gchar *details = NULL; + const gchar *parameter = NULL; +- PkRoleEnum roles; + PkGroupEnum groups; + gchar *text; + ret = FALSE; +@@ -1324,15 +1440,7 @@ main (int argc, char *argv[]) + g_print (_("You need to specify a package or file to install")); + goto out; + } +- /* is it a local file? */ +- ret = g_file_test (value, G_FILE_TEST_EXISTS); +- if (ret) { +- ret = pk_client_install_file (client, trusted, value, &error); +- /* we need this for the untrusted try */ +- filename = g_strdup (value); +- } else { +- ret = pk_console_install_package (client, value, &error); +- } ++ ret = pk_console_install_stuff (client, argv, &error); + + } else if (strcmp (mode, "install-sig") == 0) { + if (value == NULL || details == NULL || parameter == NULL) { +@@ -1346,7 +1454,7 @@ main (int argc, char *argv[]) + g_print (_("You need to specify a package to remove")); + goto out; + } +- ret = pk_console_remove_package (client, value, &error); ++ ret = pk_console_remove_packages (client, argv, &error); + + } else if (strcmp (mode, "accept-eula") == 0) { + if (value == NULL) { +@@ -1465,9 +1573,9 @@ main (int argc, char *argv[]) + ret = pk_client_get_packages (client, filters, &error); + + } else if (strcmp (mode, "get-actions") == 0) { +- roles = pk_control_get_actions (control); + text = pk_role_enums_to_text (roles); +- g_print ("roles=%s\n", text); ++ g_strdelimit (text, ";", '\n'); ++ g_print ("%s\n", text); + g_free (text); + maybe_sync = FALSE; + /* these can never fail */ +@@ -1476,7 +1584,8 @@ main (int argc, char *argv[]) + } else if (strcmp (mode, "get-filters") == 0) { + filters = pk_control_get_filters (control); + text = pk_filter_enums_to_text (filters); +- g_print ("filters=%s\n", text); ++ g_strdelimit (text, ";", '\n'); ++ g_print ("%s\n", text); + g_free (text); + maybe_sync = FALSE; + /* these can never fail */ +@@ -1485,7 +1594,8 @@ main (int argc, char *argv[]) + } else if (strcmp (mode, "get-groups") == 0) { + groups = pk_control_get_groups (control); + text = pk_group_enums_to_text (groups); +- g_print ("groups=%s\n", text); ++ g_strdelimit (text, ";", '\n'); ++ g_print ("%s\n", text); + g_free (text); + maybe_sync = FALSE; + /* these can never fail */ +@@ -1525,7 +1635,7 @@ out: + g_free (options_help); + g_free (filter); + g_free (summary); +- g_free (filename); ++ g_strfreev (files_cache); + g_object_unref (control); + g_object_unref (client); + g_object_unref (client_task); +diff --git a/configure.ac b/configure.ac +index 9d734e1..f614d2b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -535,7 +535,7 @@ if test x$enable_box = xyes; then + fi + + if test x$enable_opkg = xyes; then +- PKG_CHECK_MODULES(OPKG, libopkg = 0.1.3) ++ PKG_CHECK_MODULES(OPKG, libopkg = 0.1.4) + AC_SUBST(OPKG_CFLAGS) + AC_SUBST(OPKG_LIBS) + fi +diff --git a/contrib/yum-packagekit/refresh-packagekit.py b/contrib/yum-packagekit/refresh-packagekit.py +index 9c0bdf4..b440539 100644 +--- a/contrib/yum-packagekit/refresh-packagekit.py ++++ b/contrib/yum-packagekit/refresh-packagekit.py +@@ -35,7 +35,7 @@ def posttrans_hook(conduit): + '/org/freedesktop/PackageKit') + packagekit_iface = dbus.Interface(packagekit_proxy, 'org.freedesktop.PackageKit') + packagekit_iface.StateHasChanged('posttrans') +- except dbus.DBusException, e: ++ except Exception, e: + conduit.info(2, "Unable to send message to PackageKit") + conduit.info(6, "%s" %(e,)) + +diff --git a/data/tests/Makefile.am b/data/tests/Makefile.am +index d15dd6c..6935e66 100644 +--- a/data/tests/Makefile.am ++++ b/data/tests/Makefile.am +@@ -5,6 +5,7 @@ NULL = + + TEST_FILES = \ + pk-spawn-test.sh \ ++ pk-spawn-proxy.sh \ + pk-spawn-test-sigquit.sh \ + pk-spawn-test-profiling.sh \ + $(NULL) +diff --git a/data/tests/pk-spawn-proxy.sh b/data/tests/pk-spawn-proxy.sh +new file mode 100755 +index 0000000..57774f1 +--- /dev/null ++++ b/data/tests/pk-spawn-proxy.sh +@@ -0,0 +1,20 @@ ++#!/bin/bash ++# Copyright (C) 2008 Richard Hughes <richard@hughsie.com> ++# Licensed under the GNU General Public License Version 2 ++# 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, or ++# (at your option) any later version. ++ ++if [ -z "${http_proxy}" ]; then ++ echo "no http proxy" ++ exit 1 ++fi ++ ++if [ -z "${ftp_proxy}" ]; then ++ echo "no ftp proxy" ++ exit 1 ++fi ++ ++echo -e "percentage\t100" ++ +diff --git a/docs/html/index.html b/docs/html/index.html +index 7270eb7..d60f825 100644 +--- a/docs/html/index.html ++++ b/docs/html/index.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">PackageKit Main Page</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +@@ -20,10 +20,10 @@ + <table align="center" cellpadding="5px" border="0"> + + <tr> +- <td align="center"><a href="pk-intro.html"><img src="img/large-accessories-text-editor.png" width="128" alt="[img]"/></a></td> +- <td align="center"><a href="pk-using.html"><img src="img/large-preferences-system.png" width="128" alt="[img]"/></a></td> +- <td align="center"><a href="pk-download.html"><img src="img/large-dialog-information.png" width="128" alt="[img]"/></a></td> +- <td align="center"><a href="pk-screenshots.html"><img src="img/large-emblem-photos.png" width="128" alt="[img]"/></a></td> ++ <td align="center"><a href="pk-intro.html"><img src="img/large-accessories-text-editor.png" width="128" alt=""/></a></td> ++ <td align="center"><a href="pk-using.html"><img src="img/large-preferences-system.png" width="128" alt=""/></a></td> ++ <td align="center"><a href="pk-download.html"><img src="img/large-dialog-information.png" width="128" alt=""/></a></td> ++ <td align="center"><a href="pk-screenshots.html"><img src="img/large-emblem-photos.png" width="128" alt=""/></a></td> + </tr> + <tr> + <td><p class="indextitle"><a href="pk-intro.html" class="indextitle">What is<br/>PackageKit?</a></p></td> +@@ -32,10 +32,10 @@ + <td><p class="indextitle"><a href="pk-screenshots.html" class="indextitle">Screenshots</a></p></td> + </tr> + <tr> +- <td align="center"><a href="pk-authors.html"><img src="img/large-authors.png" width="128" alt="[img]"/></a></td> +- <td align="center"><a href="pk-bugs.html"><img src="img/large-applications-development.png" width="128" alt="[img]"/></a></td> +- <td align="center"><a href="pk-help.html"><img src="img/large-system-users.png" width="128" alt="[img]"/></a></td> +- <td align="center"><a href="pk-faq.html"><img src="img/large-help-browser.png" width="128" alt="[img]"/></a></td> ++ <td align="center"><a href="pk-authors.html"><img src="img/large-authors.png" width="128" alt=""/></a></td> ++ <td align="center"><a href="pk-bugs.html"><img src="img/large-applications-development.png" width="128" alt=""/></a></td> ++ <td align="center"><a href="pk-help.html"><img src="img/large-system-users.png" width="128" alt=""/></a></td> ++ <td align="center"><a href="pk-faq.html"><img src="img/large-help-browser.png" width="128" alt=""/></a></td> + </tr> + <tr> + <td><p class="indextitle"><a href="pk-authors.html" class="indextitle">Who develops<br/>PackageKit?</a></p></td> +diff --git a/docs/html/pk-authors.html b/docs/html/pk-authors.html +index 08289ad..607a7a4 100644 +--- a/docs/html/pk-authors.html ++++ b/docs/html/pk-authors.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">Who develops PackageKit?</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +@@ -22,7 +22,7 @@ + <table cellpadding="10"> + <tr> + <td> +- <img src="img/author-hughsie.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-hughsie.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Richard Hughes</h2> +@@ -48,7 +48,7 @@ + + <tr> + <td> +- <img src="img/author-kenvandine.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-kenvandine.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Ken VanDine</h2> +@@ -66,7 +66,7 @@ + + <tr> + <td> +- <img src="img/author-btimothy.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-btimothy.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Boyd Timothy</h2> +@@ -84,7 +84,7 @@ + + <tr> + <td> +- <img src="img/author-rnorwood.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-rnorwood.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Robin Norwood</h2> +@@ -101,7 +101,7 @@ + + <tr> + <td> +- <img src="img/author-tomparker.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-tomparker.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Tom Parker</h2> +@@ -118,7 +118,7 @@ + + <tr> + <td> +- <img src="img/author-timlau.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-timlau.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Tim Lauridsen</h2> +@@ -139,7 +139,7 @@ + + <tr> + <td> +- <img src="img/author-lmacken.png" alt="[img]"/> ++ <img src="img/author-lmacken.png" alt=""/> + </td> + <td> + <h2>Luke Macken</h2> +@@ -154,7 +154,7 @@ + + <tr> + <td> +- <img src="img/author-grzegorzdabrowski.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-grzegorzdabrowski.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Grzegorz Dąbrowski</h2> +@@ -173,7 +173,7 @@ + + <tr> + <td> +- <img src="img/author-caglar.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-caglar.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>S.Çağlar Onur</h2> +@@ -195,7 +195,7 @@ + + <tr> + <td> +- <img src="img/author-elliot.png" alt="[img]"/> ++ <img src="img/author-elliot.png" alt=""/> + </td> + <td> + <h2>Elliot Peele</h2> +@@ -210,7 +210,7 @@ + + <tr> + <td> +- <img src="img/author-jbowes.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-jbowes.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>James Bowes</h2> +@@ -227,7 +227,7 @@ + + <tr> + <td> +- <img src="img/author-unknown.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-unknown.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Thomas Wood</h2> +@@ -247,7 +247,7 @@ + + <tr> + <td> +- <img src="img/author-unknown.png" alt="[img]"/><!-- image should be 120px wide --> ++ <img src="img/author-unknown.png" alt=""/><!-- image should be 120px wide --> + </td> + <td> + <h2>Scott Reeves</h2> +diff --git a/docs/html/pk-bugs.html b/docs/html/pk-bugs.html +index 89f7c48..2ee12ea 100644 +--- a/docs/html/pk-bugs.html ++++ b/docs/html/pk-bugs.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">Reporting Bugs</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html +index 6f796b8..0cdc85c 100644 +--- a/docs/html/pk-download.html ++++ b/docs/html/pk-download.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">Where can I download it?</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +diff --git a/docs/html/pk-faq.html b/docs/html/pk-faq.html +index a25e2b7..efa8344 100644 +--- a/docs/html/pk-faq.html ++++ b/docs/html/pk-faq.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><center><img src="img/packagekit.png" alt="[img]"/></center></td> ++ <td><center><img src="img/packagekit.png" alt=""/></center></td> + <td width="95%" valign="middle"><p class="title">Frequently Asked Questions</p></td> +- <td><center><img src="img/packagekit.png" alt="[img]"/></center></td> ++ <td><center><img src="img/packagekit.png" alt=""/></center></td> + </tr> + </table> + +@@ -22,6 +22,7 @@ + <h2>Table Of Contents</h2> + <ul> + <li><a href="#how-complete">How complete are the backends?</a></li> ++<li><a href="#run-as-root">When run as root, gpk-application and pkcon do not work!</a></li> + <li><a href="#session-system">Why is there a session service and and a system service?</a></li> + <li><a href="#session-methods">How do I use PackageKit in my application?</a></li> + <li><a href="#rawhide-updates">Why don't I get update details with Fedora Rawhide?</a></li> +@@ -565,6 +566,19 @@ + </table> + + <hr> ++<h3><a name="run-as-root">When run as root, <code>gpk-application</code> and <code>pkcon</code> do not work!</a></h3> ++<p> ++GTK+ tools should not be run as the root user, <b>PERIOD</b>. ++Any GTK+ program run as the root user is a massive security hole -- GTK+ just isn't designed with ++this in mind. ++There are <b>numerous</b> attack vectors when running as root, and programs shouldn't do such ++insane and insecure things. ++</p> ++<p> ++Please see <a href="http://www.gtk.org/setuid.html">the GTK+ explanation</a> for more rationale. ++</p> ++ ++<hr> + <h3><a name="session-system">Why is there a session service <b>and</b> and a system service?</a></h3> + <p> + PackageKit runs a process <code>packagekitd</code> that is a daemon that runs per-system. +diff --git a/docs/html/pk-help.html b/docs/html/pk-help.html +index 5b44d50..5bc7827 100644 +--- a/docs/html/pk-help.html ++++ b/docs/html/pk-help.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">How can I help?</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +@@ -72,9 +72,9 @@ as for instructions! + <b>0.2.2</b> - To be released June 2008 + </p> + <ul> +-<li>Multiple package install and remove from pkcon <i>(0%)</i></li> ++<li>Network proxy server support <i>(70%)</i></li> ++<li>Multiple package install and remove from pkcon <i>(80%)</i></li> + <li>NetworkManager integration so we can detect GPRS (and modem) connections. <i>(10%)</i></li> +-<li>Filter for source packages. <i>(0%)</i></li> + </ul> + <p> + <b>0.2.3</b> - To be released July 2008 +@@ -84,6 +84,12 @@ as for instructions! + <li>Multiple package installs from gpk-application <i>(0%)</i></li> + <li>Ignoring packages from the update viewer per-session <i>(10%)</i></li> + </ul> ++<p> ++<b>0.3.0</b> - To be released December 2008 ++</p> ++<ul> ++<li>More composite types <code>s</code> to <code>as</code> <i>(0%)</i></li> ++</ul> + + <p>Back to the <a href="index.html">main page</a></p> + +diff --git a/docs/html/pk-intro.html b/docs/html/pk-intro.html +index c42be21..64f72fc 100644 +--- a/docs/html/pk-intro.html ++++ b/docs/html/pk-intro.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">What is PackageKit?</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +diff --git a/docs/html/pk-screenshots.html b/docs/html/pk-screenshots.html +index 78bd01f..5c7d4fa 100644 +--- a/docs/html/pk-screenshots.html ++++ b/docs/html/pk-screenshots.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><center><img src="img/packagekit.png" alt="[img]"/></center></td> ++ <td><center><img src="img/packagekit.png" alt=""/></center></td> + <td width="95%" valign="middle"><p class="title">Screenshots</p></td> +- <td><center><img src="img/packagekit.png" alt="[img]"/></center></td> ++ <td><center><img src="img/packagekit.png" alt=""/></center></td> + </tr> + </table> + +@@ -26,77 +26,77 @@ + + <h1><a name="gnome">GNOME Screenshots</a></h1> + +-<center><img src="img/gpk-application-search.png" alt="[img]"/></center> ++<center><img src="img/gpk-application-search.png" alt=""/></center> + <p class="caption">Add/Remove Software search</p> + +-<center><img src="img/gpk-application-groups.png" alt="[img]"/></center> ++<center><img src="img/gpk-application-groups.png" alt=""/></center> + <p class="caption">Add/Remove Software groups</p> + +-<center><img src="img/gpk-log.png" alt="[img]"/></center> ++<center><img src="img/gpk-log.png" alt=""/></center> + <p class="caption">Transaction viewer</p> + +-<center><img src="img/gpk-updates-overview.png" alt="[img]"/></center> ++<center><img src="img/gpk-updates-overview.png" alt=""/></center> + <p class="caption">Update viewer overview</p> + +-<center><img src="img/gpk-updates.png" alt="[img]"/></center> ++<center><img src="img/gpk-updates.png" alt=""/></center> + <p class="caption">Update viewer</p> + +-<center><img src="img/gpk-prefs.png" alt="[img]"/></center> ++<center><img src="img/gpk-prefs.png" alt=""/></center> + <p class="caption">Auto update preferences</p> + +-<center><img src="img/gpk-progress.png" alt="[img]"/></center> ++<center><img src="img/gpk-progress.png" alt=""/></center> + <p class="caption">Progress dialog</p> + +-<center><img src="img/gpk-added-deps.png" alt="[img]"/></center> ++<center><img src="img/gpk-added-deps.png" alt=""/></center> + <p class="caption">Added check warning</p> + +-<center><img src="img/gpk-eula.png" alt="[img]"/></center> ++<center><img src="img/gpk-eula.png" alt=""/></center> + <p class="caption">EULA dialog</p> + +-<center><img src="img/gpk-remove-confirm.png" alt="[img]"/></center> ++<center><img src="img/gpk-remove-confirm.png" alt=""/></center> + <p class="caption">Remove check warning</p> + +-<center><img src="img/gpk-repo-auth.png" alt="[img]"/></center> ++<center><img src="img/gpk-repo-auth.png" alt=""/></center> + <p class="caption">Repository authentication</p> + +-<center><img src="img/gpk-repo.png" alt="[img]"/></center> ++<center><img src="img/gpk-repo.png" alt=""/></center> + <p class="caption">Repository viewer</p> + +-<center><img src="img/gpk-backend-status.png" alt="[img]"/></center> ++<center><img src="img/gpk-backend-status.png" alt=""/></center> + <p class="caption">PackageKit backend status</p> + +-<center><img src="img/gpk-updates-warning.png" alt="[img]"/></center> ++<center><img src="img/gpk-updates-warning.png" alt=""/></center> + <p class="caption">Libnotify updates warning</p> + +-<center><img src="img/gpk-waiting.png" alt="[img]"/></center> ++<center><img src="img/gpk-waiting.png" alt=""/></center> + <p class="caption">Tasks waiting</p> + +-<center><img src="img/gpk-battery.png" alt="[img]"/></center> ++<center><img src="img/gpk-battery.png" alt=""/></center> + <p class="caption">Intergration with gnome-power-manager</p> + +-<center><img src="img/gpk-inhibit.png" alt="[img]"/></center> ++<center><img src="img/gpk-inhibit.png" alt=""/></center> + <p class="caption">Inhibit with gnome-power-manager</p> + +-<center><img src="img/gpk-require-restart.png" alt="[img]"/></center> ++<center><img src="img/gpk-require-restart.png" alt=""/></center> + <p class="caption">We sometimes need to do a restart</p> + +-<center><img src="img/gpk-auto-update.png" alt="[img]"/></center> ++<center><img src="img/gpk-auto-update.png" alt=""/></center> + <p class="caption">Auto update install dialog</p> + + <h1><a name="kde">KDE Screenshots</a></h1> + +-<center><img src="img/kpk-search.png" alt="[img]"/></center> ++<center><img src="img/kpk-search.png" alt=""/></center> + <p class="caption">KPackageKit Searching</p> + +-<center><img src="img/kpk-information.png" alt="[img]"/></center> ++<center><img src="img/kpk-information.png" alt=""/></center> + <p class="caption">KPackageKit Package Information</p> + +-<center><img src="img/pk-opensuse-updater.png" alt="[img]"/></center> ++<center><img src="img/pk-opensuse-updater.png" alt=""/></center> + <p class="caption">OpenSuse Updater</p> + + <h1><a name="moko">OpenMoko Screenshots</a></h1> + +-<center><img src="img/assassin.png" alt="[img]"/></center> ++<center><img src="img/assassin.png" alt=""/></center> + <p class="caption">Assassin</p> + + <p>Back to the <a href="index.html">main page</a></p> +diff --git a/docs/html/pk-using.html b/docs/html/pk-using.html +index cc455c7..b2b028e 100644 +--- a/docs/html/pk-using.html ++++ b/docs/html/pk-using.html +@@ -9,9 +9,9 @@ + + <table align="center" class="title"> + <tr> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + <td width="95%" valign="middle"><p class="title">How do I use PackageKit?</p></td> +- <td><img src="img/packagekit.png" alt="[img]"/></td> ++ <td><img src="img/packagekit.png" alt=""/></td> + </tr> + </table> + +diff --git a/docs/spec/pk-concepts.xml b/docs/spec/pk-concepts.xml +index 312c5a4..0b75b10 100644 +--- a/docs/spec/pk-concepts.xml ++++ b/docs/spec/pk-concepts.xml +@@ -127,6 +127,13 @@ + This allows the used to choose non-native packages if a multi-lib policy is allowed. + </entry> + </row> ++ <row> ++ <entry><literal>source</literal> or <literal>~source</literal></entry> ++ <entry> ++ The source filter will only return source packages. ++ These are typically useful when rebuilding other packages. ++ </entry> ++ </row> + </tbody> + </tgroup> + </informaltable> +diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in +index a6af99b..8f9bd57 100644 +--- a/etc/PackageKit.conf.in ++++ b/etc/PackageKit.conf.in +@@ -31,3 +31,13 @@ ShutdownTimeout=300 + # default=@defaultbackend@ + DefaultBackend=@defaultbackend@ + ++# Proxy settings, uncomment as required ++# ++# NOTE: PackageKit does not use these settings, they are passed to backends. ++# Backends may ignore these values, or they may be updated from the session. ++# ++# They are in the format username:password@server:port ++# ++# ProxyHTTP=username:password@server.lan:8080 ++# ProxyFTP=username:password@server.lan:21 ++ +diff --git a/libpackagekit/Makefile.am b/libpackagekit/Makefile.am +index 6b8c6b8..aeafe44 100644 +--- a/libpackagekit/Makefile.am ++++ b/libpackagekit/Makefile.am +@@ -37,6 +37,7 @@ libpackagekit_include_HEADERS = \ + pk-connection.h \ + pk-package-id.h \ + pk-package-ids.h \ ++ pk-package-item.h \ + pk-package-list.h \ + pk-enum.h \ + pk-common.h \ +@@ -59,6 +60,8 @@ libpackagekit_la_SOURCES = \ + pk-package-id.h \ + pk-package-ids.c \ + pk-package-ids.h \ ++ pk-package-item.c \ ++ pk-package-item.h \ + pk-package-list.c \ + pk-package-list.h \ + pk-enum.h \ +diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c +index b5b6ac3..5743dcb 100644 +--- a/libpackagekit/pk-enum.c ++++ b/libpackagekit/pk-enum.c +@@ -193,6 +193,8 @@ static PkEnumMatch enum_filter[] = { + {PK_FILTER_ENUM_NOT_NEWEST, "~newest"}, + {PK_FILTER_ENUM_ARCH, "arch"}, + {PK_FILTER_ENUM_NOT_ARCH, "~arch"}, ++ {PK_FILTER_ENUM_SOURCE, "source"}, ++ {PK_FILTER_ENUM_NOT_SOURCE, "~source"}, + {0, NULL} + }; + +diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h +index 33e8a91..e616b64 100644 +--- a/libpackagekit/pk-enum.h ++++ b/libpackagekit/pk-enum.h +@@ -182,7 +182,9 @@ typedef enum { + PK_FILTER_ENUM_NOT_NEWEST = 1 << 15, + PK_FILTER_ENUM_ARCH = 1 << 16, + PK_FILTER_ENUM_NOT_ARCH = 1 << 17, +- PK_FILTER_ENUM_UNKNOWN = 1 << 18 ++ PK_FILTER_ENUM_SOURCE = 1 << 18, ++ PK_FILTER_ENUM_NOT_SOURCE = 1 << 19, ++ PK_FILTER_ENUM_UNKNOWN = 1 << 20 + } PkFilterEnum; + + /** +diff --git a/libpackagekit/pk-package-item.c b/libpackagekit/pk-package-item.c +new file mode 100644 +index 0000000..87905dc +--- /dev/null ++++ b/libpackagekit/pk-package-item.c +@@ -0,0 +1,190 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2007-2008 Richard Hughes <richard@hughsie.com> ++ * ++ * Licensed under the GNU General Public License Version 2 ++ * ++ * 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, or ++ * (at your option) any later version. ++ * ++ * 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 General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ */ ++ ++/** ++ * SECTION:pk-package-item ++ * @short_description: A cached Package structure ++ * ++ * These provide a way to query and store a single package. ++ */ ++ ++#include "config.h" ++ ++#include <stdlib.h> ++#include <stdio.h> ++#include <time.h> ++#include <errno.h> ++ ++#include <string.h> ++#include <sys/time.h> ++#include <sys/types.h> ++#ifdef HAVE_UNISTD_H ++#include <unistd.h> ++#endif /* HAVE_UNISTD_H */ ++ ++#include <glib/gi18n.h> ++ ++#include "pk-debug.h" ++#include "pk-common.h" ++#include "pk-package-item.h" ++ ++/** ++ * pk_package_item_new: ++ **/ ++PkPackageItem * ++pk_package_item_new (PkInfoEnum info, const gchar *package_id, const gchar *summary) ++{ ++ PkPackageItem *item; ++ ++ g_return_val_if_fail (package_id != NULL, FALSE); ++ ++ pk_debug ("adding to cache item package %s, %s, %s", pk_info_enum_to_text (info), package_id, summary); ++ item = g_new0 (PkPackageItem, 1); ++ item->info = info; ++ item->package_id = g_strdup (package_id); ++ item->summary = g_strdup (summary); ++ return item; ++} ++ ++/** ++ * pk_package_item_free: ++ **/ ++gboolean ++pk_package_item_free (PkPackageItem *item) ++{ ++ if (item == NULL) { ++ return FALSE; ++ } ++ g_free (item->package_id); ++ g_free (item->summary); ++ g_free (item); ++ return TRUE; ++} ++ ++/** ++ * pk_package_item_equal: ++ * ++ * Only compares the package_id's and the info enum ++ **/ ++gboolean ++pk_package_item_equal (PkPackageItem *item1, PkPackageItem *item2) ++{ ++ if (item1 == NULL || item2 == NULL) { ++ return FALSE; ++ } ++ return (item1->info == item2->info && ++ pk_strequal (item1->package_id, item2->package_id)); ++} ++ ++/** ++ * pk_package_item_copy: ++ * ++ * Copy a PkPackageItem ++ **/ ++PkPackageItem * ++pk_package_item_copy (PkPackageItem *item) ++{ ++ g_return_val_if_fail (item != NULL, NULL); ++ return pk_package_item_new (item->info, item->package_id, item->summary); ++} ++ ++/*************************************************************************** ++ *** MAKE CHECK TESTS *** ++ ***************************************************************************/ ++#ifdef PK_BUILD_TESTS ++#include <libselftest.h> ++ ++void ++libst_package_item (LibSelfTest *test) ++{ ++ PkPackageItem *item1; ++ PkPackageItem *item2; ++ PkPackageItem *item3; ++ gboolean ret; ++ ++ if (libst_start (test, "PkPackageItem", CLASS_AUTO) == FALSE) { ++ return; ++ } ++ ++ /************************************************************/ ++ libst_title (test, "add entry"); ++ item1 = pk_package_item_new (PK_INFO_ENUM_INSTALLED, "gnome;1.23;i386;data", "GNOME!"); ++ if (item1 != NULL) { ++ libst_success (test, NULL); ++ } else { ++ libst_failed (test, NULL); ++ } ++ ++ /************************************************************/ ++ libst_title (test, "add entry"); ++ item2 = pk_package_item_new (PK_INFO_ENUM_INSTALLED, "gnome;1.23;i386;data", "GNOME foo!"); ++ if (item2 != NULL) { ++ libst_success (test, NULL); ++ } else { ++ libst_failed (test, NULL); ++ } ++ ++ /************************************************************/ ++ libst_title (test, "copy entry"); ++ item3 = pk_package_item_copy (item2); ++ if (item3 != NULL) { ++ libst_success (test, NULL); ++ } else { ++ libst_failed (test, NULL); ++ } ++ ++ /************************************************************/ ++ libst_title (test, "check equal"); ++ ret = pk_package_item_equal (item1, item3); ++ if (ret) { ++ libst_success (test, NULL); ++ } else { ++ libst_failed (test, NULL); ++ } ++ ++ pk_package_item_free (item2); ++ pk_package_item_free (item3); ++ ++ /************************************************************/ ++ libst_title (test, "add entry"); ++ item2 = pk_package_item_new (PK_INFO_ENUM_INSTALLED, "gnome-do;1.23;i386;data", "GNOME doo!"); ++ if (item2 != NULL) { ++ libst_success (test, NULL); ++ } else { ++ libst_failed (test, NULL); ++ } ++ ++ /************************************************************/ ++ libst_title (test, "check !equal"); ++ ret = pk_package_item_equal (item1, item2); ++ if (!ret) { ++ libst_success (test, NULL); ++ } else { ++ libst_failed (test, NULL); ++ } ++ ++ pk_package_item_free (item1); ++ pk_package_item_free (item2); ++ ++ libst_end (test); ++} ++#endif ++ +diff --git a/libpackagekit/pk-package-item.h b/libpackagekit/pk-package-item.h +new file mode 100644 +index 0000000..c41a6ea +--- /dev/null ++++ b/libpackagekit/pk-package-item.h +@@ -0,0 +1,48 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com> ++ * ++ * Licensed under the GNU General Public License Version 2 ++ * ++ * 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, or ++ * (at your option) any later version. ++ * ++ * 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 General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ */ ++ ++#ifndef __PK_PACKAGE_ITEM_H ++#define __PK_PACKAGE_ITEM_H ++ ++#include <glib-object.h> ++#include <pk-enum.h> ++ ++/** ++ * PkPackageItem: ++ * ++ * A cached store for the complete Package object ++ */ ++typedef struct { ++ PkInfoEnum info; ++ gchar *package_id; ++ gchar *summary; ++} PkPackageItem; ++ ++PkPackageItem *pk_package_item_new (PkInfoEnum info, ++ const gchar *package_id, ++ const gchar *summary); ++gboolean pk_package_item_free (PkPackageItem *item); ++PkPackageItem *pk_package_item_copy (PkPackageItem *item); ++gboolean pk_package_item_equal (PkPackageItem *item1, ++ PkPackageItem *item2); ++ ++#endif /* __PK_PACKAGE_ITEM_H */ ++ +diff --git a/libpackagekit/pk-package-list.c b/libpackagekit/pk-package-list.c +index b0a1a71..5d95e1b 100644 +--- a/libpackagekit/pk-package-list.c ++++ b/libpackagekit/pk-package-list.c +@@ -45,6 +45,7 @@ + #include "pk-debug.h" + #include "pk-common.h" + #include "pk-package-id.h" ++#include "pk-package-item.h" + #include "pk-package-list.h" + + static void pk_package_list_class_init (PkPackageListClass *klass); +@@ -77,16 +78,42 @@ pk_package_list_add (PkPackageList *plist, PkInfoEnum info, const gchar *package + g_return_val_if_fail (package_id != NULL, FALSE); + + pk_debug ("adding to cache array package %s, %s, %s", pk_info_enum_to_text (info), package_id, summary); +- item = g_new0 (PkPackageItem, 1); +- item->info = info; +- item->package_id = g_strdup (package_id); +- item->summary = g_strdup (summary); ++ item = pk_package_item_new (info, package_id, summary); + g_ptr_array_add (plist->priv->array, item); + + return TRUE; + } + + /** ++ * pk_package_list_add_item: ++ * ++ * Makes a deep copy, and adds to the array ++ **/ ++gboolean ++pk_package_list_add_item (PkPackageList *plist, PkPackageItem *item) ++{ ++ gboolean ret; ++ PkPackageItem *item_new; ++ ++ g_return_val_if_fail (PK_IS_PACKAGE_LIST (plist), FALSE); ++ g_return_val_if_fail (item != NULL, FALSE); ++ ++ ret = pk_package_list_contains_item (plist, item); ++ if (ret) { ++ pk_debug ("already added item"); ++ return FALSE; ++ } ++ ++ pk_debug ("adding to cache array package %s, %s, %s", ++ pk_info_enum_to_text (item->info), item->package_id, item->summary); ++ ++ item_new = pk_package_item_copy (item); ++ g_ptr_array_add (plist->priv->array, item_new); ++ ++ return TRUE; ++} ++ ++/** + * pk_package_list_get_string: + **/ + gchar * +@@ -152,9 +179,7 @@ pk_package_list_clear (PkPackageList *plist) + + while (plist->priv->array->len > 0) { + item = g_ptr_array_index (plist->priv->array, 0); +- g_free (item->package_id); +- g_free (item->summary); +- g_free (item); ++ pk_package_item_free (item); + g_ptr_array_remove_index_fast (plist->priv->array, 0); + } + return TRUE; +@@ -186,6 +211,31 @@ pk_package_list_contains (PkPackageList *plist, const gchar *package_id) + } + + /** ++ * pk_package_list_contains_item: ++ **/ ++gboolean ++pk_package_list_contains_item (PkPackageList *plist, PkPackageItem *item) ++{ ++ PkPackageItem *item_temp; ++ guint i; ++ guint length; ++ gboolean ret = FALSE; ++ ++ g_return_val_if_fail (PK_IS_PACKAGE_LIST (plist), FALSE); ++ g_return_val_if_fail (item != NULL, FALSE); ++ ++ length = plist->priv->array->len; ++ for (i=0; i<length; i++) { ++ item_temp = g_ptr_array_index (plist->priv->array, i); ++ ret = pk_package_item_equal (item_temp, item); ++ if (ret) { ++ break; ++ } ++ } ++ return ret; ++} ++ ++/** + * pk_package_list_class_init: + * @klass: The PkPackageListClass + **/ +diff --git a/libpackagekit/pk-package-list.h b/libpackagekit/pk-package-list.h +index 9178f77..9734af4 100644 +--- a/libpackagekit/pk-package-list.h ++++ b/libpackagekit/pk-package-list.h +@@ -25,6 +25,8 @@ + #include <glib-object.h> + #include <pk-enum.h> + ++#include "pk-package-item.h" ++ + G_BEGIN_DECLS + + #define PK_TYPE_PACKAGE_LIST (pk_package_list_get_type ()) +@@ -49,26 +51,18 @@ struct _PkPackageListClass + GObjectClass parent_class; + }; + +-/** +- * PkPackageItem: +- * +- * A cached store for the complete Package object +- */ +-typedef struct +-{ +- PkInfoEnum info; +- gchar *package_id; +- gchar *summary; +-} PkPackageItem; +- + GType pk_package_list_get_type (void) G_GNUC_CONST; + PkPackageList *pk_package_list_new (void); + gboolean pk_package_list_add (PkPackageList *plist, + PkInfoEnum info, + const gchar *package_id, + const gchar *summary); ++gboolean pk_package_list_add_item (PkPackageList *plist, ++ PkPackageItem *item); + gboolean pk_package_list_contains (PkPackageList *plist, + const gchar *package_id); ++gboolean pk_package_list_contains_item (PkPackageList *plist, ++ PkPackageItem *item); + gchar *pk_package_list_get_string (PkPackageList *plist) + G_GNUC_WARN_UNUSED_RESULT; + guint pk_package_list_get_size (PkPackageList *plist); +diff --git a/libpackagekit/pk-self-test.c b/libpackagekit/pk-self-test.c +index 62e225b..bf151fb 100644 +--- a/libpackagekit/pk-self-test.c ++++ b/libpackagekit/pk-self-test.c +@@ -29,6 +29,7 @@ + /* prototypes */ + void libst_package_id (LibSelfTest *test); + void libst_package_ids (LibSelfTest *test); ++void libst_package_item (LibSelfTest *test); + void libst_package_list (LibSelfTest *test); + void libst_enum (LibSelfTest *test); + void libst_common (LibSelfTest *test); +@@ -51,6 +52,7 @@ main (int argc, char **argv) + libst_common (&test); + libst_package_id (&test); + libst_package_ids (&test); ++ libst_package_item (&test); + libst_package_list (&test); + libst_enum (&test); + libst_extra (&test); +diff --git a/python/packagekit/daemonBackend.py b/python/packagekit/daemonBackend.py +index 3711f01..5253b39 100644 +--- a/python/packagekit/daemonBackend.py ++++ b/python/packagekit/daemonBackend.py +@@ -789,6 +789,21 @@ class PackageKitBaseBackend(dbus.service.Object): + self.Finished(EXIT_FAILED) + + @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE, ++ in_signature='ss', out_signature='') ++ def SetProxy(self, proxy_http, proxy_ftp): ++ ''' ++ Set the proxy ++ ''' ++ pklog.info("SetProxy(%s, %s)" % (proxy_http, proxy_ftp)) ++ self.doSetProxy(proxy_http, proxy_ftp) ++ ++ def doSetProxy(self, proxy_http, proxy_ftp): ++ ''' ++ Should be replaced in the corresponding backend sub class ++ ''' ++ # do not use Finished() in this method ++ ++ @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE, + in_signature='s', out_signature='') + def InstallPublicKey(self, keyurl): + ''' +diff --git a/src/pk-backend-dbus.c b/src/pk-backend-dbus.c +index b06e584..4c6837a 100644 +--- a/src/pk-backend-dbus.c ++++ b/src/pk-backend-dbus.c +@@ -123,16 +123,6 @@ pk_backend_dbus_sub_percentage_changed_cb (DBusGProxy *proxy, guint sub_percenta + } + + /** +- * pk_backend_dbus_no_percentage_updates_cb: +- **/ +-static void +-pk_backend_dbus_no_percentage_updates_cb (DBusGProxy *proxy, PkBackendDbus *backend_dbus) +-{ +- pk_debug ("got signal"); +- pk_backend_no_percentage_updates (backend_dbus->priv->backend); +-} +- +-/** + * pk_backend_dbus_package_cb: + **/ + static void +@@ -325,8 +315,6 @@ pk_backend_dbus_remove_callbacks (PkBackendDbus *backend_dbus) + G_CALLBACK (pk_backend_dbus_percentage_changed_cb), backend_dbus); + dbus_g_proxy_disconnect_signal (proxy, "SubPercentageChanged", + G_CALLBACK (pk_backend_dbus_sub_percentage_changed_cb), backend_dbus); +- dbus_g_proxy_disconnect_signal (proxy, "NoPercentageChanged", +- G_CALLBACK (pk_backend_dbus_no_percentage_updates_cb), backend_dbus); + dbus_g_proxy_disconnect_signal (proxy, "Package", + G_CALLBACK (pk_backend_dbus_package_cb), backend_dbus); + dbus_g_proxy_disconnect_signal (proxy, "Details", +@@ -353,6 +341,31 @@ pk_backend_dbus_remove_callbacks (PkBackendDbus *backend_dbus) + } + + /** ++ * pk_backend_dbus_set_proxy: ++ **/ ++static gboolean ++pk_backend_dbus_set_proxy (PkBackendDbus *backend_dbus, const gchar *proxy_http, const gchar *proxy_ftp) ++{ ++ gboolean ret; ++ GError *error = NULL; ++ ++ g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE); ++ g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE); ++ ++ /* new sync method call */ ++ pk_backend_dbus_time_reset (backend_dbus); ++ ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SetProxy", &error, ++ G_TYPE_STRING, proxy_http, ++ G_TYPE_STRING, proxy_ftp, ++ G_TYPE_INVALID, G_TYPE_INVALID); ++ if (error != NULL) { ++ pk_warning ("%s", error->message); ++ g_error_free (error); ++ } ++ return ret; ++} ++ ++/** + * pk_backend_dbus_set_name: + **/ + gboolean +@@ -385,7 +398,6 @@ pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service) + G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_add_signal (proxy, "SubPercentageChanged", + G_TYPE_UINT, G_TYPE_INVALID); +- dbus_g_proxy_add_signal (proxy, "NoPercentageChanged", G_TYPE_INVALID); + dbus_g_proxy_add_signal (proxy, "Package", + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID); + dbus_g_proxy_add_signal (proxy, "Details", +@@ -424,8 +436,6 @@ pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service) + G_CALLBACK (pk_backend_dbus_percentage_changed_cb), backend_dbus, NULL); + dbus_g_proxy_connect_signal (proxy, "SubPercentageChanged", + G_CALLBACK (pk_backend_dbus_sub_percentage_changed_cb), backend_dbus, NULL); +- dbus_g_proxy_connect_signal (proxy, "NoPercentageChanged", +- G_CALLBACK (pk_backend_dbus_no_percentage_updates_cb), backend_dbus, NULL); + dbus_g_proxy_connect_signal (proxy, "Package", + G_CALLBACK (pk_backend_dbus_package_cb), backend_dbus, NULL); + dbus_g_proxy_connect_signal (proxy, "Details", +@@ -465,6 +475,18 @@ pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service) + pk_backend_finished (backend_dbus->priv->backend); + g_error_free (error); + } ++ ++ /* set the proxy */ ++ if (ret) { ++ gchar *proxy_http; ++ gchar *proxy_ftp; ++ proxy_http = pk_backend_get_proxy_http (backend_dbus->priv->backend); ++ proxy_ftp = pk_backend_get_proxy_http (backend_dbus->priv->backend); ++ pk_backend_dbus_set_proxy (backend_dbus, proxy_http, proxy_ftp); ++ g_free (proxy_http); ++ g_free (proxy_ftp); ++ } ++ + if (ret) { + pk_backend_dbus_time_check (backend_dbus); + } +diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h +index 2213fed..2bffaff 100644 +--- a/src/pk-backend-internal.h ++++ b/src/pk-backend-internal.h +@@ -59,6 +59,9 @@ gboolean pk_backend_reset (PkBackend *backend); + gboolean pk_backend_set_name (PkBackend *backend, + const gchar *name) + G_GNUC_WARN_UNUSED_RESULT; ++gboolean pk_backend_set_proxy (PkBackend *backend, ++ const gchar *proxy_http, ++ const gchar *proxy_ftp); + gchar *pk_backend_get_name (PkBackend *backend) + G_GNUC_WARN_UNUSED_RESULT; + gboolean pk_backend_get_backend_detail (PkBackend *backend, +diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c +index f9e8b68..f9c9f12 100644 +--- a/src/pk-backend-spawn.c ++++ b/src/pk-backend-spawn.c +@@ -313,7 +313,7 @@ pk_backend_spawn_parse_stdout (PkBackendSpawn *backend_spawn, const gchar *line) + ret = FALSE; + goto out; + } +- pk_backend_no_percentage_updates (backend_spawn->priv->backend); ++ pk_backend_set_percentage (backend_spawn->priv->backend, PK_BACKEND_PERCENTAGE_INVALID); + } else if (pk_strequal (command, "repo-signature-required")) { + + if (size != 9+99) { +@@ -440,6 +440,44 @@ pk_backend_spawn_helper_new (PkBackendSpawn *backend_spawn) + } + + /** ++ * pk_backend_spawn_get_envp: ++ * ++ * Return all the environment variables the script will need ++ **/ ++static gchar ** ++pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn) ++{ ++ gchar **envp; ++ gchar *value; ++ gchar *line; ++ GPtrArray *array; ++ ++ array = g_ptr_array_new (); ++ ++ /* http_proxy */ ++ value = pk_backend_get_proxy_http (backend_spawn->priv->backend); ++ if (!pk_strzero (value)) { ++ line = g_strdup_printf ("%s=%s", "http_proxy", value); ++ pk_debug ("setting evp '%s'", line); ++ g_ptr_array_add (array, line); ++ } ++ g_free (value); ++ ++ /* ftp_proxy */ ++ value = pk_backend_get_proxy_ftp (backend_spawn->priv->backend); ++ if (!pk_strzero (value)) { ++ line = g_strdup_printf ("%s=%s", "ftp_proxy", value); ++ pk_debug ("setting evp '%s'", line); ++ g_ptr_array_add (array, line); ++ } ++ g_free (value); ++ ++ envp = pk_ptr_array_to_argv (array); ++ g_ptr_array_free (array, TRUE); ++ return envp; ++} ++ ++/** + * pk_backend_spawn_helper_va_list: + **/ + static gboolean +@@ -448,6 +486,7 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe + gboolean ret; + gchar *filename; + gchar **argv; ++ gchar **envp; + + g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE); + +@@ -476,7 +515,8 @@ pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *exe + argv[0] = g_strdup (filename); + + pk_backend_spawn_helper_new (backend_spawn); +- ret = pk_spawn_argv (backend_spawn->priv->spawn, argv); ++ envp = pk_backend_spawn_get_envp (backend_spawn); ++ ret = pk_spawn_argv (backend_spawn->priv->spawn, argv, envp); + if (!ret) { + pk_backend_spawn_helper_delete (backend_spawn); + pk_backend_error_code (backend_spawn->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, +diff --git a/src/pk-backend.c b/src/pk-backend.c +index 225c488..37ed024 100644 +--- a/src/pk-backend.c ++++ b/src/pk-backend.c +@@ -33,6 +33,7 @@ + #include <glib/gprintf.h> + #include <pk-network.h> + ++#include "pk-package-item.h" + #include "pk-debug.h" + #include "pk-common.h" + #include "pk-marshal.h" +@@ -44,13 +45,6 @@ + #define PK_BACKEND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_BACKEND, PkBackendPrivate)) + + /** +- * PK_BACKEND_PERCENTAGE_INVALID: +- * +- * The unknown percentage value +- */ +-#define PK_BACKEND_PERCENTAGE_INVALID 101 +- +-/** + * PK_BACKEND_PERCENTAGE_DEFAULT: + * + * The default percentage value, should never be emitted, but should be +@@ -84,12 +78,15 @@ struct _PkBackendPrivate + GHashTable *eulas; + gchar *name; + gchar *c_tid; ++ gchar *proxy_http; ++ gchar *proxy_ftp; + gboolean locked; + gboolean set_error; + gboolean set_signature; + gboolean set_eula; + gboolean has_sent_package; + PkNetwork *network; ++ PkPackageItem *last_package; + PkRoleEnum role; /* this never changes for the lifetime of a transaction */ + PkStatusEnum status; /* this changes */ + PkExitEnum exit; +@@ -592,6 +589,44 @@ out: + } + + /** ++ * pk_backend_set_proxy: ++ **/ ++gboolean ++pk_backend_set_proxy (PkBackend *backend, const gchar *proxy_http, const gchar *proxy_ftp) ++{ ++ g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE); ++ g_free (backend->priv->proxy_http); ++ g_free (backend->priv->proxy_ftp); ++ backend->priv->proxy_http = g_strdup (proxy_http); ++ backend->priv->proxy_ftp = g_strdup (proxy_ftp); ++ return TRUE; ++} ++ ++/** ++ * pk_backend_get_proxy_http: ++ * ++ * Return value: proxy string in the form username:password@server:port ++ **/ ++gchar * ++pk_backend_get_proxy_http (PkBackend *backend) ++{ ++ g_return_val_if_fail (PK_IS_BACKEND (backend), NULL); ++ return g_strdup (backend->priv->proxy_http); ++} ++ ++/** ++ * pk_backend_get_proxy_ftp: ++ * ++ * Return value: proxy string in the form username:password@server:port ++ **/ ++gchar * ++pk_backend_get_proxy_ftp (PkBackend *backend) ++{ ++ g_return_val_if_fail (PK_IS_BACKEND (backend), NULL); ++ return g_strdup (backend->priv->proxy_ftp); ++} ++ ++/** + * pk_backend_lock: + * + * Responsible for initialising the external backend object. +@@ -803,35 +838,6 @@ pk_backend_set_sub_percentage (PkBackend *backend, guint percentage) + } + + /** +- * pk_backend_no_percentage_updates: +- **/ +-gboolean +-pk_backend_no_percentage_updates (PkBackend *backend) +-{ +- g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE); +- g_return_val_if_fail (backend->priv->locked != FALSE, FALSE); +- +- /* have we already set an error? */ +- if (backend->priv->set_error) { +- pk_warning ("already set error, cannot process"); +- return FALSE; +- } +- +- /* set the same twice? */ +- if (backend->priv->last_percentage == PK_BACKEND_PERCENTAGE_INVALID) { +- pk_debug ("duplicate set of %i", PK_BACKEND_PERCENTAGE_INVALID); +- return FALSE; +- } +- +- /* invalidate previous percentage */ +- backend->priv->last_percentage = PK_BACKEND_PERCENTAGE_INVALID; +- +- /* emit the progress changed signal */ +- pk_backend_emit_progress_changed (backend); +- return TRUE; +-} +- +-/** + * pk_backend_set_status: + **/ + gboolean +@@ -901,11 +907,26 @@ gboolean + pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id, const gchar *summary) + { + gchar *summary_safe; ++ PkPackageItem *item; ++ gboolean ret; + + g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE); + g_return_val_if_fail (package_id != NULL, FALSE); + g_return_val_if_fail (backend->priv->locked != FALSE, FALSE); + ++ /* check against the old one */ ++ item = pk_package_item_new (info, package_id, summary); ++ ret = pk_package_item_equal (item, backend->priv->last_package); ++ if (ret) { ++ pk_package_item_free (item); ++ pk_debug ("skipping duplicate %s", package_id); ++ return FALSE; ++ } ++ /* update the 'last' package */ ++ pk_package_item_free (backend->priv->last_package); ++ backend->priv->last_package = pk_package_item_copy (item); ++ pk_package_item_free (item); ++ + /* have we already set an error? */ + if (backend->priv->set_error) { + pk_warning ("already set error, cannot process"); +@@ -1689,6 +1710,8 @@ pk_backend_finalize (GObject *object) + pk_debug ("backend finalise"); + + pk_backend_reset (backend); ++ g_free (backend->priv->proxy_http); ++ g_free (backend->priv->proxy_ftp); + g_free (backend->priv->name); + g_free (backend->priv->c_tid); + g_object_unref (backend->priv->time); +@@ -1818,6 +1841,7 @@ pk_backend_reset (PkBackend *backend) + + /* TODO: need to wait for Finished() if running */ + ++ pk_package_item_free (backend->priv->last_package); + backend->priv->set_error = FALSE; + backend->priv->set_signature = FALSE; + backend->priv->set_eula = FALSE; +@@ -1825,6 +1849,7 @@ pk_backend_reset (PkBackend *backend) + backend->priv->finished = FALSE; + backend->priv->has_sent_package = FALSE; + backend->priv->thread = NULL; ++ backend->priv->last_package = NULL; + backend->priv->status = PK_STATUS_ENUM_UNKNOWN; + backend->priv->exit = PK_EXIT_ENUM_UNKNOWN; + backend->priv->role = PK_ROLE_ENUM_UNKNOWN; +@@ -1855,8 +1880,11 @@ pk_backend_init (PkBackend *backend) + backend->priv->handle = NULL; + backend->priv->name = NULL; + backend->priv->c_tid = NULL; ++ backend->priv->proxy_http = NULL; ++ backend->priv->proxy_ftp = NULL; + backend->priv->file_changed_func = NULL; + backend->priv->file_changed_data = NULL; ++ backend->priv->last_package = NULL; + backend->priv->locked = FALSE; + backend->priv->signal_finished = 0; + backend->priv->signal_error_timeout = 0; +diff --git a/src/pk-backend.h b/src/pk-backend.h +index 95b7fa8..fb17e3c 100644 +--- a/src/pk-backend.h ++++ b/src/pk-backend.h +@@ -30,6 +30,13 @@ + + G_BEGIN_DECLS + ++/** ++ * PK_BACKEND_PERCENTAGE_INVALID: ++ * ++ * The unknown percentage value ++ */ ++#define PK_BACKEND_PERCENTAGE_INVALID 101 ++ + typedef struct _PkBackend PkBackend; + + /* set the state */ +@@ -51,7 +58,6 @@ gboolean pk_backend_set_sub_percentage (PkBackend *backend, + guint percentage); + gboolean pk_backend_set_exit_code (PkBackend *backend, + PkExitEnum exit); +-gboolean pk_backend_no_percentage_updates (PkBackend *backend); + gboolean pk_backend_set_transaction_data (PkBackend *backend, + const gchar *data); + +@@ -66,6 +72,8 @@ gboolean pk_backend_get_progress (PkBackend *backend, + guint *elapsed, + guint *remaining); + guint pk_backend_get_runtime (PkBackend *backend); ++gchar *pk_backend_get_proxy_ftp (PkBackend *backend); ++gchar *pk_backend_get_proxy_http (PkBackend *backend); + + /* signal helpers */ + gboolean pk_backend_finished (PkBackend *backend); +diff --git a/src/pk-engine.c b/src/pk-engine.c +index db81d36..028a0d0 100644 +--- a/src/pk-engine.c ++++ b/src/pk-engine.c +@@ -101,6 +101,7 @@ struct PkEnginePrivate + PkNetwork *network; + PkSecurity *security; + PkNotify *notify; ++ PkConf *conf; + PkFileMonitor *file_monitor; + PkRoleEnum actions; + PkGroupEnum groups; +@@ -579,10 +580,15 @@ pk_engine_init (PkEngine *engine) + DBusGConnection *connection; + gboolean ret; + gchar *filename; ++ gchar *proxy_http; ++ gchar *proxy_ftp; + + engine->priv = PK_ENGINE_GET_PRIVATE (engine); + engine->priv->restart_schedule = FALSE; + ++ /* use the config file */ ++ engine->priv->conf = pk_conf_new (); ++ + /* setup the backend backend */ + engine->priv->backend = pk_backend_new (); + g_signal_connect (engine->priv->backend, "finished", +@@ -639,6 +645,13 @@ pk_engine_init (PkEngine *engine) + G_CALLBACK (pk_engine_file_monitor_changed_cb), engine); + g_free (filename); + ++ /* set the proxy */ ++ proxy_http = pk_conf_get_string (engine->priv->conf, "ProxyHTTP"); ++ proxy_ftp = pk_conf_get_string (engine->priv->conf, "ProxyFTP"); ++ pk_backend_set_proxy (engine->priv->backend, proxy_http, proxy_ftp); ++ g_free (proxy_http); ++ g_free (proxy_ftp); ++ + engine->priv->transaction_list = pk_transaction_list_new (); + g_signal_connect (engine->priv->transaction_list, "changed", + G_CALLBACK (pk_engine_transaction_list_changed_cb), engine); +@@ -696,6 +709,7 @@ pk_engine_finalize (GObject *object) + g_object_unref (engine->priv->notify); + g_object_unref (engine->priv->backend); + g_object_unref (engine->priv->cache); ++ g_object_unref (engine->priv->conf); + + G_OBJECT_CLASS (pk_engine_parent_class)->finalize (object); + } +diff --git a/src/pk-network-unix.c b/src/pk-network-unix.c +index 11c23a2..74b266c 100644 +--- a/src/pk-network-unix.c ++++ b/src/pk-network-unix.c +@@ -138,6 +138,11 @@ pk_network_unix_get_network_state (PkNetworkUnix *network_unix) + continue; + } + ++ /* is loopback? */ ++ if (pk_strequal (sections[0], "lo")) { ++ continue; ++ } ++ + /* is correct parameters? */ + number_sections = g_strv_length (sections); + if (number_sections != 11) { +@@ -145,9 +150,8 @@ pk_network_unix_get_network_state (PkNetworkUnix *network_unix) + continue; + } + +- /* is MTU and gateway nonzero? */ +- if (!pk_strequal (sections[8], "0") && +- !pk_strequal (sections[2], "00000000")) { ++ /* is gateway nonzero? */ ++ if (!pk_strequal (sections[2], "00000000")) { + pk_debug ("interface %s is valid", sections[0]); + online = TRUE; + } +diff --git a/src/pk-network.c b/src/pk-network.c +index 9656958..0ad839e 100644 +--- a/src/pk-network.c ++++ b/src/pk-network.c +@@ -39,6 +39,7 @@ + #ifdef HAVE_UNISTD_H + #include <unistd.h> + #endif /* HAVE_UNISTD_H */ ++#include <libgbus.h> + + #include <glib/gi18n.h> + +@@ -67,6 +68,7 @@ struct _PkNetworkPrivate + PkNetworkNm *net_nm; + PkNetworkUnix *net_unix; + PkConf *conf; ++ LibGBus *nm_bus; + }; + + enum { +@@ -154,6 +156,7 @@ pk_network_class_init (PkNetworkClass *klass) + static void + pk_network_init (PkNetwork *network) + { ++ gboolean nm_alive; + network->priv = PK_NETWORK_GET_PRIVATE (network); + network->priv->conf = pk_conf_new (); + network->priv->net_nm = pk_network_nm_new (); +@@ -167,6 +170,17 @@ pk_network_init (PkNetwork *network) + network->priv->use_nm = pk_conf_get_bool (network->priv->conf, "UseNetworkManager"); + network->priv->use_unix = pk_conf_get_bool (network->priv->conf, "UseNetworkHeuristic"); + ++ /* check if NM is on the bus */ ++ network->priv->nm_bus = libgbus_new (); ++ libgbus_assign (network->priv->nm_bus, LIBGBUS_SYSTEM, "org.freedesktop.NetworkManager"); ++ nm_alive = libgbus_is_connected (network->priv->nm_bus); ++ ++ /* NetworkManager isn't up, so we can't use it */ ++ if (network->priv->use_nm && !nm_alive) { ++ pk_warning ("UseNetworkManager true, but org.freedesktop.NetworkManager not up"); ++ network->priv->use_nm = FALSE; ++ } ++ + #if !PK_BUILD_NETWORKMANAGER + /* check we can actually use the default */ + if (network->priv->use_nm) { +@@ -190,6 +204,7 @@ pk_network_finalize (GObject *object) + + g_return_if_fail (network->priv != NULL); + g_object_unref (network->priv->conf); ++ g_object_unref (network->priv->nm_bus); + g_object_unref (network->priv->net_nm); + g_object_unref (network->priv->net_unix); + G_OBJECT_CLASS (pk_network_parent_class)->finalize (object); +diff --git a/src/pk-spawn.c b/src/pk-spawn.c +index 9b415b1..c4622f9 100644 +--- a/src/pk-spawn.c ++++ b/src/pk-spawn.c +@@ -273,7 +273,7 @@ pk_spawn_kill (PkSpawn *spawn) + * + **/ + gboolean +-pk_spawn_argv (PkSpawn *spawn, gchar **argv) ++pk_spawn_argv (PkSpawn *spawn, gchar **argv, gchar **envp) + { + gboolean ret; + +@@ -284,7 +284,7 @@ pk_spawn_argv (PkSpawn *spawn, gchar **argv) + spawn->priv->finished = FALSE; + + /* create spawned object for tracking */ +- ret = g_spawn_async_with_pipes (NULL, argv, NULL, ++ ret = g_spawn_async_with_pipes (NULL, argv, envp, + G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, + NULL, NULL, &spawn->priv->child_pid, + NULL, /* stdin */ +@@ -484,6 +484,7 @@ libst_spawn (LibSelfTest *test) + gboolean ret; + gchar *path; + gchar **argv; ++ gchar **envp; + + if (libst_start (test, "PkSpawn", CLASS_AUTO) == FALSE) { + return; +@@ -496,7 +497,7 @@ libst_spawn (LibSelfTest *test) + libst_title (test, "make sure return error for missing file"); + mexit = BAD_EXIT; + argv = g_strsplit ("pk-spawn-test-xxx.sh", " ", 0); +- ret = pk_spawn_argv (spawn, argv); ++ ret = pk_spawn_argv (spawn, argv, NULL); + g_strfreev (argv); + if (ret == FALSE) { + libst_success (test, "failed to run invalid file"); +@@ -517,7 +518,7 @@ libst_spawn (LibSelfTest *test) + mexit = -1; + path = pk_test_get_data ("pk-spawn-test.sh"); + argv = g_strsplit (path, " ", 0); +- ret = pk_spawn_argv (spawn, argv); ++ ret = pk_spawn_argv (spawn, argv, NULL); + g_free (path); + g_strfreev (argv); + if (ret) { +@@ -558,11 +559,34 @@ libst_spawn (LibSelfTest *test) + new_spawn_object (test, &spawn); + + /************************************************************/ ++ libst_title (test, "make sure we set the proxy"); ++ mexit = -1; ++ path = pk_test_get_data ("pk-spawn-proxy.sh"); ++ argv = g_strsplit (path, " ", 0); ++ envp = g_strsplit ("http_proxy=username:password@server:port " ++ "ftp_proxy=username:password@server:port", " ", 0); ++ ret = pk_spawn_argv (spawn, argv, envp); ++ g_free (path); ++ g_strfreev (argv); ++ if (ret) { ++ libst_success (test, "ran correct file"); ++ } else { ++ libst_failed (test, "did not run helper"); ++ } ++ ++ /* wait for finished */ ++ libst_loopwait (test, 10000); ++ libst_loopcheck (test); ++ ++ /* get new object */ ++ new_spawn_object (test, &spawn); ++ ++ /************************************************************/ + libst_title (test, "make sure run correct helper, and kill it"); + mexit = BAD_EXIT; + path = pk_test_get_data ("pk-spawn-test.sh"); + argv = g_strsplit (path, " ", 0); +- ret = pk_spawn_argv (spawn, argv); ++ ret = pk_spawn_argv (spawn, argv, NULL); + g_free (path); + g_strfreev (argv); + if (ret) { +@@ -592,7 +616,7 @@ libst_spawn (LibSelfTest *test) + mexit = BAD_EXIT; + path = pk_test_get_data ("pk-spawn-test-sigquit.sh"); + argv = g_strsplit (path, " ", 0); +- ret = pk_spawn_argv (spawn, argv); ++ ret = pk_spawn_argv (spawn, argv, NULL); + g_free (path); + g_strfreev (argv); + if (ret) { +@@ -618,7 +642,7 @@ libst_spawn (LibSelfTest *test) + libst_title (test, "run lots of data for profiling"); + path = pk_test_get_data ("pk-spawn-test-profiling.sh"); + argv = g_strsplit (path, " ", 0); +- ret = pk_spawn_argv (spawn, argv); ++ ret = pk_spawn_argv (spawn, argv, NULL); + g_free (path); + g_strfreev (argv); + if (ret) { +diff --git a/src/pk-spawn.h b/src/pk-spawn.h +index 1b20fef..0e58859 100644 +--- a/src/pk-spawn.h ++++ b/src/pk-spawn.h +@@ -52,7 +52,8 @@ GType pk_spawn_get_type (void) G_GNUC_CONST; + PkSpawn *pk_spawn_new (void); + + gboolean pk_spawn_argv (PkSpawn *spawn, +- gchar **argv) ++ gchar **argv, ++ gchar **envp) + G_GNUC_WARN_UNUSED_RESULT; + gboolean pk_spawn_kill (PkSpawn *spawn); + diff --git a/packages/packagekit/files/pk-nodocs.patch b/packages/packagekit/files/pk-nodocs.patch new file mode 100644 index 0000000000..c775128867 --- /dev/null +++ b/packages/packagekit/files/pk-nodocs.patch @@ -0,0 +1,10 @@ +--- /tmp/Makefile.am 2008-05-31 12:17:08.492193028 +0200 ++++ git/Makefile.am 2008-05-31 12:17:18.884499290 +0200 +@@ -16,7 +16,6 @@ + client \ + backends \ + python \ +- docs \ + $(NULL) + + clean-local : diff --git a/packages/packagekit/packagekit_git.bb b/packages/packagekit/packagekit_git.bb index b2d7ea8886..5ed193a7cc 100644 --- a/packages/packagekit/packagekit_git.bb +++ b/packages/packagekit/packagekit_git.bb @@ -4,11 +4,13 @@ PRIORITY = "optional" LICENSE = "GPL" DEPENDS = "dbus (>= 1.1.1) dbus-glib glib-2.0 sqlite3 opkg intltool intltool-native (>= 0.37.1)" RDEPENDS_${PN} = "opkg" -PV = "0.1+git${SRCREV}" +PV = "0.2.1+git${SRCREV}" PR = "r8" SRC_URI = "git://anongit.freedesktop.org/git/packagekit;protocol=git \ - file://disable-docbook2man.patch;patch=1" + file://disable-docbook2man.patch;patch=1 \ + file://d1e096c3267c1c9492041382b954e9327bc8bbec.patch;patch=1 \ + file://pk-nodocs.patch;patch=1" S = "${WORKDIR}/git" diff --git a/packages/pkgconfig/pkgconfig-0.23/.mtn2git_empty b/packages/pkgconfig/pkgconfig-0.23/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/pkgconfig/pkgconfig-0.23/.mtn2git_empty diff --git a/packages/pkgconfig/pkgconfig-0.23/autofoo.patch b/packages/pkgconfig/pkgconfig-0.23/autofoo.patch new file mode 100644 index 0000000000..97895387f5 --- /dev/null +++ b/packages/pkgconfig/pkgconfig-0.23/autofoo.patch @@ -0,0 +1,526 @@ +--- + glib-1.2.10/acglib.m4 | 12 +- + glib-1.2.10/configure.in | 212 ++++++++++++++++++++++++++++++------------------ + 2 files changed, 140 insertions(+), 84 deletions(-) + +Index: pkg-config-0.23/glib-1.2.10/acglib.m4 +=================================================================== +--- pkg-config-0.23.orig/glib-1.2.10/acglib.m4 2008-01-16 22:52:24.000000000 +0000 ++++ pkg-config-0.23/glib-1.2.10/acglib.m4 2008-03-26 20:59:12.000000000 +0000 +@@ -10,7 +10,7 @@ + AC_DIVERT_POP()])])]) + + dnl GLIB_IF_VAR_EQ (ENV_VAR, VALUE [, EQUALS_ACTION] [, ELSE_ACTION]) +-AC_DEFUN(GLIB_IF_VAR_EQ,[ ++AC_DEFUN([GLIB_IF_VAR_EQ],[ + case "$[$1]" in + "[$2]"[)] + [$3] +@@ -21,7 +21,7 @@ + esac + ]) + dnl GLIB_STR_CONTAINS (SRC_STRING, SUB_STRING [, CONTAINS_ACTION] [, ELSE_ACTION]) +-AC_DEFUN(GLIB_STR_CONTAINS,[ ++AC_DEFUN([GLIB_STR_CONTAINS],[ + case "[$1]" in + *"[$2]"*[)] + [$3] +@@ -32,12 +32,12 @@ + esac + ]) + dnl GLIB_ADD_TO_VAR (ENV_VARIABLE, CHECK_STRING, ADD_STRING) +-AC_DEFUN(GLIB_ADD_TO_VAR,[ ++AC_DEFUN([GLIB_ADD_TO_VAR],[ + GLIB_STR_CONTAINS($[$1], [$2], [$1]="$[$1]", [$1]="$[$1] [$3]") + ]) + + dnl GLIB_SIZEOF (INCLUDES, TYPE, ALIAS [, CROSS-SIZE]) +-AC_DEFUN(GLIB_SIZEOF, ++AC_DEFUN([GLIB_SIZEOF], + [changequote(<<, >>)dnl + dnl The name to #define. + define(<<AC_TYPE_NAME>>, translit(glib_sizeof_$3, [a-z *], [A-Z_P]))dnl +@@ -62,7 +62,7 @@ + ]) + + dnl GLIB_BYTE_CONTENTS (INCLUDES, TYPE, ALIAS, N_BYTES, INITIALIZER) +-AC_DEFUN(GLIB_BYTE_CONTENTS, ++AC_DEFUN([GLIB_BYTE_CONTENTS], + [changequote(<<, >>)dnl + dnl The name to #define. + define(<<AC_TYPE_NAME>>, translit(glib_byte_contents_$3, [a-z *], [A-Z_P]))dnl +@@ -92,7 +92,7 @@ + ]) + + dnl GLIB_SYSDEFS (INCLUDES, DEFS_LIST, OFILE [, PREFIX]) +-AC_DEFUN(GLIB_SYSDEFS, ++AC_DEFUN([GLIB_SYSDEFS], + [glib_sysdefso="translit($3, [-_a-zA-Z0-9 *], [-_a-zA-Z0-9])" + glib_sysdef_msg=`echo $2 | sed 's/:[[^ ]]*//g'` + if test "x`(echo '\n') 2>/dev/null`" != 'x\n'; then +Index: pkg-config-0.23/glib-1.2.10/configure.in +=================================================================== +--- pkg-config-0.23.orig/glib-1.2.10/configure.in 2008-01-16 22:52:24.000000000 +0000 ++++ pkg-config-0.23/glib-1.2.10/configure.in 2008-03-26 20:59:12.000000000 +0000 +@@ -1,10 +1,11 @@ + dnl *********************************** + dnl *** include special GLib macros *** + dnl *********************************** +-builtin(include, acglib.m4)dnl ++dnl no need, just use aclocal -I . --CL ++dnl builtin(include, acglib.m4)dnl + + # require autoconf 2.13 +-AC_PREREQ(2.13) ++AC_PREREQ(2.53) + + # init autoconf (and check for presence of glist.c) + AC_INIT(glist.c) +@@ -13,11 +14,48 @@ + cflags_set=${CFLAGS+set} + + # we rewrite this file ++if test "x$cross_compiling" != "xyes"; then + rm -f glibconfig-sysdefs.h ++fi ++ ++# config defines ++ ++AH_TEMPLATE([ENABLE_MEM_CHECK], ++ [Define if enabling memory checking]) ++AH_TEMPLATE([ENABLE_MEM_PROFILE], []) ++AH_TEMPLATE([GLIB_BINARY_AGE], []) ++AH_TEMPLATE([GLIB_BYTE_CONTENTS_GMUTEX], []) ++AH_TEMPLATE([GLIB_INTERFACE_AGE], []) ++AH_TEMPLATE([GLIB_MAJOR_VERSION], []) ++AH_TEMPLATE([GLIB_MINOR_VERSION], []) ++AH_TEMPLATE([GLIB_MICRO_VERSION], []) ++AH_TEMPLATE([GLIB_SIZEOF_GMUTEX], []) ++AH_TEMPLATE([G_COMPILED_WITH_DEBUGGING], []) ++AH_TEMPLATE([G_HAVE_INLINE], []) ++AH_TEMPLATE([G_HAVE___INLINE], []) ++AH_TEMPLATE([G_HAVE___INLINE__], []) ++AH_TEMPLATE([G_THREAD_SOURCE], []) ++AH_TEMPLATE([G_VA_COPY], []) ++AH_TEMPLATE([G_VA_COPY_AS_ARRAY], []) ++AH_TEMPLATE([HAVE_BROKEN_WCTYPE], []) ++AH_TEMPLATE([HAVE_GETPWUID_R], []) ++AH_TEMPLATE([HAVE_GETPWUID_R_POSIX], []) ++AH_TEMPLATE([HAVE_PTHREAD_COND_TIMEDWAIT_POSIX], []) ++AH_TEMPLATE([HAVE_PTHREAD_GETSPECIFIC_POSIX], []) ++AH_TEMPLATE([HAVE_PTHREAD_MUTEX_TRYLOCK_POSIX], []) ++AH_TEMPLATE([HAVE_WCHAR_H], []) ++AH_TEMPLATE([HAVE_WCTYPE_H], []) ++AH_TEMPLATE([NO_FD_SET], []) ++AH_TEMPLATE([NO_SYS_ERRLIST], []) ++AH_TEMPLATE([NO_SYS_SIGLIST], []) ++AH_TEMPLATE([NO_SYS_SIGLIST_DECL], []) ++AH_TEMPLATE([REALLOC_0_WORKS], []) ++ + + dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they + dnl are available for $ac_help expansion (don't we all *love* autoconf?) +-GLIB_AC_DIVERT_BEFORE_HELP([ ++#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE) ++#dnl + # + # The following version number definitions apply to GLib, GModule and GThread + # as a whole, so if changes occoured in any of them, they are all +@@ -38,7 +76,7 @@ + GLIB_BINARY_AGE=10 + GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION + dnl +-]) ++#AC_DIVERT_POP()dnl + + AC_SUBST(GLIB_MAJOR_VERSION) + AC_SUBST(GLIB_MINOR_VERSION) +@@ -72,22 +110,20 @@ + AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE) + + dnl Initialize libtool +-AC_PROG_LIBTOOL ++AM_PROG_LIBTOOL + + dnl Initialize maintainer mode + AM_MAINTAINER_MODE + +-AC_CANONICAL_HOST +- + dnl figure debugging default, prior to $ac_help setup + dnl +-GLIB_AC_DIVERT_BEFORE_HELP([ ++#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl + if test `expr $GLIB_MINOR_VERSION \% 2` = 1 ; then + debug_default=yes + else + debug_default=minimum + fi +-]) dnl ++#AC_DIVERT_POP()dnl + + dnl declare --enable-* args and collect ac_help strings + AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default) +@@ -194,7 +230,9 @@ + CFLAGS=$glib_save_CFLAGS + AC_MSG_WARN( + [No ANSI prototypes found in library. (-std1 didn't work.)]) ++ , AC_MSG_WARN([Skipping test due to crosscompilation]) + ) ++ , AC_MSG_WARN([Skipping test due to crosscompilation]) + ) + LIBS=$glib_save_LIBS + +@@ -336,7 +374,7 @@ + if test $gtk_ok = yes; then + AC_MSG_RESULT([yes, found in sys/types.h]) + else +- AC_HEADER_EGREP(fd_set, sys/select.h, gtk_ok=yes) ++ AC_HEADER_EGREP(fd_mask, sys/select.h, gtk_ok=yes) + if test $gtk_ok = yes; then + AC_DEFINE(HAVE_SYS_SELECT_H) + AC_MSG_RESULT([yes, found in sys/select.h]) +@@ -409,7 +447,7 @@ + glib_cv_sane_realloc=no + ,) + ]) +-if test x$glib_cv_sane_realloc = xyes; then ++if test "x$glib_cv_sane_realloc" = "xyes"; then + AC_DEFINE(REALLOC_0_WORKS) + fi + AC_MSG_RESULT($glib_cv_sane_realloc) +@@ -487,7 +525,8 @@ + ]) + if test "x$glib_cv_va_copy" = "xyes"; then + AC_DEFINE(G_VA_COPY, va_copy) +-else if test "x$glib_cv___va_copy" = "xyes"; then ++else ++if test "x$glib_cv___va_copy" = "xyes"; then + AC_DEFINE(G_VA_COPY, __va_copy) + fi + fi +@@ -496,6 +535,7 @@ + fi + AC_MSG_RESULT($glib_cv_va_val_copy) + ++AC_MSG_WARN([hi mom]) + + dnl *********************** + dnl *** g_module checks *** +@@ -507,23 +547,27 @@ + G_MODULE_BROKEN_RTLD_GLOBAL=0 + G_MODULE_HAVE_DLERROR=0 + dnl *** dlopen() and dlsym() in system libraries ++AC_CHECK_FUNC(dlopen,[ ++ AC_CHECK_FUNC(dlsym,[ ++ G_MODULE_IMPL=G_MODULE_IMPL_DL ++ ], ++ )], ++) + if test -z "$G_MODULE_IMPL"; then +- AC_CHECK_FUNC(dlopen, +- [AC_CHECK_FUNC(dlsym, ++ AC_CHECK_FUNC(dlopen,[ ++ AC_CHECK_FUNC(dlsym,[ + G_MODULE_IMPL=G_MODULE_IMPL_DL +- ,)] +- ,) +- ++ ])], ++ ) + fi +- + dnl *** dlopen() and dlsym() in libdl + if test -z "$G_MODULE_IMPL"; then +- AC_CHECK_LIB(dl, dlopen, +- [AC_CHECK_LIB(dl, dlsym, ++ AC_CHECK_LIB(dl, dlopen,[ ++ AC_CHECK_LIB(dl, dlsym,[ + G_MODULE_LIBS=-ldl + G_MODULE_IMPL=G_MODULE_IMPL_DL +- ,)] +- ,) ++ ])] ++ ) + fi + dnl *** shl_load() in libdld (HP-UX) + if test -z "$G_MODULE_IMPL"; then +@@ -633,6 +677,7 @@ + AC_SUBST(G_MODULE_NEED_USCORE) + AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL) + AC_SUBST(GLIB_DEBUG_FLAGS) ++AC_MSG_WARN([hi mom]) + + + dnl *********************** +@@ -869,40 +914,50 @@ + fi + if test x"$have_threads" = xposix; then + LIBS="$LIBS $G_THREAD_LIBS" +- AC_MSG_CHECKING(whether pthread_getspecific is posix like) + # PCThreads has pthread_getspecific(pthread_key_t, void **); +- AC_TRY_COMPILE([#include <pthread.h>], +- [pthread_getspecific(0,NULL);], +- [AC_MSG_RESULT(no)], +- [AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_PTHREAD_GETSPECIFIC_POSIX)]) +- AC_MSG_CHECKING(whether pthread_mutex_trylock is posix like) ++ AC_CACHE_CHECK([whether pthread_getspecific is posix like], ++ [glib_cv_sys_pthread_getspecific_posix], ++ AC_TRY_COMPILE([#include <pthread.h>], ++ [pthread_getspecific(0,NULL);], ++ [glib_cv_sys_pthread_getspecific_posix=no], ++ [glib_cv_sys_pthread_getspecific_posix=yes]) ++ ) ++ if test x"$glib_cv_sys_pthread_getspecific_posix" = xyes; then ++ AC_DEFINE(HAVE_PTHREAD_GETSPECIFIC_POSIX) ++ fi + # DCE Threads return 1 as success, posix 0. what a mess. +- AC_TRY_RUN([#include <pthread.h> +- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +- int main () { +- return !pthread_mutex_trylock (&mutex); }], +- [AC_MSG_RESULT(no)], +- [AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_PTHREAD_MUTEX_TRYLOCK_POSIX)]) +- AC_MSG_CHECKING(whether pthread_cond_timedwait is posix like) ++ AC_CACHE_CHECK([whether pthread_mutex_trylock is posix like], ++ [glib_cv_sys_pthread_mutex_trylock_posix], ++ AC_TRY_RUN([#include <pthread.h> ++ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ int main () { ++ return !pthread_mutex_trylock (&mutex); }], ++ [glib_cv_sys_pthread_mutex_trylock_posix=no], ++ [glib_cv_sys_pthread_mutex_trylock_posix=yes]) ++ ) ++ if test x"$glib_cv_sys_pthread_mutex_trylock_posix" = xyes; then ++ AC_DEFINE(HAVE_PTHREAD_MUTEX_TRYLOCK_POSIX) ++ fi + # DCE Threads return -1 as failure, posix ETIMEDOUT. +- AC_TRY_RUN([#include <pthread.h> +- #include <sys/time.h> +- int main () { +- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +- pthread_cond_t cond = PTHREAD_COND_INITIALIZER; +- struct timeval tval; +- struct timespec tspec; +- gettimeofday (&tval, NULL); +- tspec.tv_sec = tval.tv_sec; +- tspec.tv_nsec = 0; +- pthread_mutex_lock (&mutex); +- return pthread_cond_timedwait (&cond,&mutex,&tspec) +- != -1;}], +- [AC_MSG_RESULT(no)], +- [AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_PTHREAD_COND_TIMEDWAIT_POSIX)]) ++ AC_CACHE_CHECK([whether pthread_cond_timedwait is posix like], ++ [glib_cv_sys_pthread_cond_timedwait_posix], ++ AC_TRY_RUN([#include <pthread.h> ++ int main () { ++ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++ pthread_cond_t cond = PTHREAD_COND_INITIALIZER; ++ struct timeval tval; ++ struct timespec tspec; ++ gettimeofday (&tval, NULL); ++ tspec.tv_sec = tval.tv_sec; ++ tspec.tv_nsec = 0; ++ return pthread_cond_timedwait (&cond,&mutex,&tspec) ++ != -1;}], ++ [glib_cv_sys_pthread_cond_timedwait_posix=no], ++ [glib_cv_sys_pthread_cond_timedwait_posix=yes]) ++ ) ++ if test x"$glib_cv_sys_pthread_cond_timedwait_posix" = xyes; then ++ AC_DEFINE(HAVE_PTHREAD_COND_TIMEDWAIT_POSIX) ++ fi + fi + LIBS="$glib_save_LIBS" + CFLAGS="$glib_save_CFLAGS" +@@ -946,13 +1001,14 @@ + dnl **************************************** + dnl *** GLib POLL* compatibility defines *** + dnl **************************************** ++if test x"$cross_compiling" != xyes; then + GLIB_SYSDEFS( + [#include <sys/types.h> + #include <sys/poll.h>], + POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32, + glibconfig-sysdefs.h, + =) +- ++fi + + dnl ****************************** + dnl *** output the whole stuff *** +@@ -1005,7 +1061,7 @@ + echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile + fi + +- cat >> $outfile <<_______EOF ++ cat >> $outfile <<EOF + + #ifdef __cplusplus + extern "C" { +@@ -1022,60 +1078,60 @@ + #define G_MINLONG $glib_ml + #define G_MAXLONG $glib_Ml + +-_______EOF ++EOF + + + ### this should always be true in a modern C/C++ compiler +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + typedef signed char gint8; + typedef unsigned char guint8; +-_______EOF ++EOF + + + if test -n "$gint16"; then +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + typedef signed $gint16 gint16; + typedef unsigned $gint16 guint16; +-_______EOF ++EOF + fi + + + if test -n "$gint32"; then +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + typedef signed $gint32 gint32; + typedef unsigned $gint32 guint32; +-_______EOF ++EOF + fi + + + if test -n "$gint64"; then +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + ${glib_warning_guard}#define G_HAVE_GINT64 1 + + ${glib_extension}typedef signed $gint64 gint64; + ${glib_extension}typedef unsigned $gint64 guint64; + + #define G_GINT64_CONSTANT(val) $gint64_constant +-_______EOF ++EOF + fi + + + if test -z "$glib_unknown_void_p"; then +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + + #define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p)) + #define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p)) + + #define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i)) + #define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u)) +-_______EOF ++EOF + else + echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile + fi + + + +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + $glib_atexit + $glib_memmove + $glib_defines +@@ -1087,11 +1143,11 @@ + #else /* !__cplusplus */ + $glib_inline + #endif /* !__cplusplus */ +-_______EOF ++EOF + + echo >>$outfile + if test x$g_mutex_has_default = xyes; then +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + $g_enable_threads_def G_THREADS_ENABLED + #define G_THREADS_IMPL_$g_threads_impl_def + typedef struct _GStaticMutex GStaticMutex; +@@ -1109,15 +1165,15 @@ + #define g_static_mutex_get_mutex(mutex) \ + (g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \ + g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex))) +-_______EOF ++EOF + else +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + $g_enable_threads_def G_THREADS_ENABLED + #define G_THREADS_IMPL_$g_threads_impl_def + typedef struct _GMutex* GStaticMutex; + #define G_STATIC_MUTEX_INIT NULL + #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex)) +-_______EOF ++EOF + fi + + echo >>$outfile +@@ -1126,15 +1182,15 @@ + g_bit_sizes="$g_bit_sizes 64" + fi + for bits in $g_bit_sizes; do +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + #define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val)) + #define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val)) + #define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val)) + #define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val)) +-_______EOF ++EOF + done + +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + #define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val)) + #define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val)) + #define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val)) +@@ -1145,14 +1201,14 @@ + #define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val)) + #define G_BYTE_ORDER $g_byte_order + +-_______EOF ++EOF + + if test -r glibconfig-sysdefs.h; then + cat glibconfig-sysdefs.h >>$outfile + fi + + +- cat >>$outfile <<_______EOF ++ cat >>$outfile <<EOF + + $glib_wc + +@@ -1162,7 +1218,7 @@ + #endif /* __cplusplus */ + + #endif /* GLIBCONFIG_H */ +-_______EOF ++EOF + + + if cmp -s $outfile glibconfig.h; then +Index: pkg-config-0.23/glib-1.2.10/glib.m4 +=================================================================== +--- pkg-config-0.23.orig/glib-1.2.10/glib.m4 2008-04-14 23:34:39.000000000 +0100 ++++ pkg-config-0.23/glib-1.2.10/glib.m4 2008-04-14 09:26:29.000000000 +0100 +@@ -5,7 +5,7 @@ + dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or + dnl gthread is specified in MODULES, pass to glib-config + dnl +-AC_DEFUN(AM_PATH_GLIB, ++AC_DEFUN([AM_PATH_GLIB], + [dnl + dnl Get the cflags and libraries from the glib-config script + dnl diff --git a/packages/pkgconfig/pkgconfig-0.23/glibconfig-sysdefs.h b/packages/pkgconfig/pkgconfig-0.23/glibconfig-sysdefs.h new file mode 100644 index 0000000000..1329e7f21c --- /dev/null +++ b/packages/pkgconfig/pkgconfig-0.23/glibconfig-sysdefs.h @@ -0,0 +1,6 @@ +#define GLIB_SYSDEF_POLLIN =1 +#define GLIB_SYSDEF_POLLOUT =4 +#define GLIB_SYSDEF_POLLPRI =2 +#define GLIB_SYSDEF_POLLERR =8 +#define GLIB_SYSDEF_POLLHUP =16 +#define GLIB_SYSDEF_POLLNVAL =32 diff --git a/packages/pkgconfig/pkgconfig-0.23/sysrootfix.patch b/packages/pkgconfig/pkgconfig-0.23/sysrootfix.patch new file mode 100644 index 0000000000..c5ee82e9aa --- /dev/null +++ b/packages/pkgconfig/pkgconfig-0.23/sysrootfix.patch @@ -0,0 +1,31 @@ +Index: pkg-config-0.23/pkg.c +=================================================================== +--- pkg-config-0.23.orig/pkg.c 2008-03-26 22:18:39.000000000 +0000 ++++ pkg-config-0.23/pkg.c 2008-03-26 22:31:11.000000000 +0000 +@@ -472,19 +472,15 @@ + while (tmp != NULL) + { + char *tmpstr = (char*) tmp->data; +- if (pcsysrootdir != NULL) ++ if (pcsysrootdir != NULL && tmpstr[0] == '-' && ++ (tmpstr[1] == 'I' || tmpstr[1] == 'L')) + { +- if (tmpstr[0] == '-' && +- (tmpstr[1] == 'I' || +- tmpstr[1] == 'L')) +- { +- g_string_append_c (str, '-'); +- g_string_append_c (str, tmpstr[1]); +- g_string_append (str, pcsysrootdir); +- g_string_append (str, tmpstr+2); +- } ++ g_string_append_c (str, '-'); ++ g_string_append_c (str, tmpstr[1]); ++ g_string_append (str, pcsysrootdir); ++ g_string_append (str, tmpstr+2); + } +- else ++ else + { + g_string_append (str, tmpstr); + } diff --git a/packages/pkgconfig/pkgconfig-sdk_0.23.bb b/packages/pkgconfig/pkgconfig-sdk_0.23.bb new file mode 100644 index 0000000000..8c40f04e10 --- /dev/null +++ b/packages/pkgconfig/pkgconfig-sdk_0.23.bb @@ -0,0 +1,11 @@ +require pkgconfig.inc +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/pkgconfig-${PV}" + +SRC_URI = "http://pkgconfig.freedesktop.org/releases/pkg-config-${PV}.tar.gz \ + file://autofoo.patch;patch=1 \ + file://sysrootfix.patch;patch=1 \ + file://glibconfig-sysdefs.h" + +S = "${WORKDIR}/pkg-config-${PV}/" +inherit sdk +DEPENDS = "" diff --git a/packages/pkgconfig/pkgconfig.inc b/packages/pkgconfig/pkgconfig.inc index a246c8750f..77c9e1c5a5 100644 --- a/packages/pkgconfig/pkgconfig.inc +++ b/packages/pkgconfig/pkgconfig.inc @@ -17,7 +17,7 @@ inherit autotools acpaths = "-I ." do_configure_prepend () { - install -m 0644 ${WORKDIR}/glibconfig-sysdefs.h glib-1.2.8/ + install -m 0644 ${WORKDIR}/glibconfig-sysdefs.h glib-1.2.*/ } do_stage_prepend() { diff --git a/packages/readline/readline_4.3.bb b/packages/readline/readline_4.3.bb index 6dfce726fe..a2420c57e4 100644 --- a/packages/readline/readline_4.3.bb +++ b/packages/readline/readline_4.3.bb @@ -10,7 +10,7 @@ RPROVIDES_${PN} += "readline" LEAD_SONAME = "libreadline.so" PR = "r3" -SRC_URI = "ftp://ftp.cwru.edu/pub/bash/readline-${PV}.tar.gz \ +SRC_URI = "${GNU_MIRROR}/readline/readline-${PV}.tar.gz \ file://shlink-termcap.patch;patch=1 \ file://acinclude.m4" S = "${WORKDIR}/readline-${PV}" diff --git a/packages/stage-manager/files/stage-manager-ipkg b/packages/stage-manager/files/stage-manager-ipkg new file mode 100755 index 0000000000..7bcf85a5fa --- /dev/null +++ b/packages/stage-manager/files/stage-manager-ipkg @@ -0,0 +1,1186 @@ +#!/bin/sh +# ipkg - the itsy package management system +# +# Copyright (C) 2001 Carl D. Worth +# +# 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, or (at your option) +# any later version. +# +# 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. + +set -e + +# Uncomment for debugging +#set -x + +# By default do not do globbing. Any command wanting globbing should +# explicitly enable it first and disable it afterwards. +set -o noglob + +ipkg_srcs() { + local srcre="$1" + sed -ne "s/^src[[:space:]]\+$srcre[[:space:]]\+//p" < $IPKG_CONF +} + +ipkg_src_names() { + sed -ne "s/^src[[:space:]]\+\([^[:space:]]\+\).*/\1/p" < $IPKG_CONF +} + +ipkg_src_byname() { + local src="$1" + ipkg_srcs $src | head -1 +} + +ipkg_dests() { + local destre=`echo $1 | ipkg_protect_slashes` + sed -ne "/^dest[[:space:]]\+$destre/{ +s/^dest[[:space:]]\+[^[:space:]]\+[[:space:]]\+// +s/^/`echo $IPKG_OFFLINE_ROOT | ipkg_protect_slashes`/ +p +}" < $IPKG_CONF +} + +ipkg_dest_names() { + sed -ne "s/^dest[[:space:]]\+\([^[:space:]]\+\).*/\1/p" < $IPKG_CONF +} + +ipkg_dests_all() { + ipkg_dests '.*' +} + +ipkg_state_dirs() { + ipkg_dests_all | sed "s|\$|/$IPKG_DIR_PREFIX|" +} + +ipkg_dest_default() { + ipkg_dests_all | head -1 +} + +ipkg_dest_default_name() { + ipkg_dest_names | head -1 +} + +ipkg_dest_byname() { + local dest="$1" + ipkg_dests $dest | head -1 +} + +ipkg_option() { + local option="$1" + sed -ne "s/^option[[:space:]]\+$option[[:space:]]\+//p" < $IPKG_CONF +} + +ipkg_load_configuration() { + if [ -z "$IPKG_CONF_DIR" ]; then + IPKG_CONF_DIR=/etc + fi + + if [ -z "$IPKG_CONF" ]; then + IPKG_CONF=$IPKG_CONF_DIR/ipkg.conf + fi + + if [ -z "$IPKG_OFFLINE_ROOT" ]; then + IPKG_OFFLINE_ROOT=`ipkg_option offline_root` + fi + # Export IPKG_OFFLINE_ROOT for use by update-alternatives + export IPKG_OFFLINE_ROOT + if [ -n "$DEST_NAME" ]; then + IPKG_ROOT=`ipkg_dest_byname $DEST_NAME` + if [ -z "$IPKG_ROOT" ]; then + if [ -d "$IPKG_OFFLINE_ROOT$DEST_NAME" ]; then + IPKG_ROOT="$IPKG_OFFLINE_ROOT$DEST_NAME"; + else + echo "ipkg: invalid destination specification: $DEST_NAME +Valid destinations are directories or one of the dest names from $IPKG_CONF:" >&2 + ipkg_dest_names >&2 + return 1 + fi + fi + else + IPKG_ROOT=`ipkg_dest_default` + fi + + # Global ipkg state directories + IPKG_DIR_PREFIX=usr/lib/ipkg + IPKG_LISTS_DIR=$IPKG_OFFLINE_ROOT/$IPKG_DIR_PREFIX/lists + IPKG_PENDING_DIR=$IPKG_OFFLINE_ROOT/$IPKG_DIR_PREFIX/pending + IPKG_TMP=`mktemp -d` + + if [ ! -d "$IPKG_TMP" ]; then + echo "Error, could not create a temp directory" + return 1 + fi + + # Destination specific ipkg meta-data directory + IPKG_STATE_DIR=$IPKG_ROOT/$IPKG_DIR_PREFIX + + # Proxy Support + IPKG_PROXY_USERNAME=`ipkg_option proxy_username` + IPKG_PROXY_PASSWORD=`ipkg_option proxy_password` + IPKG_HTTP_PROXY=`ipkg_option http_proxy` + IPKG_FTP_PROXY=`ipkg_option ftp_proxy` + IPKG_NO_PROXY=`ipkg_option no_proxy` + if [ -n "$IPKG_HTTP_PROXY" ]; then + export http_proxy="$IPKG_HTTP_PROXY" + fi + + if [ -n "$IPKG_FTP_PROXY" ]; then + export ftp_proxy="$IPKG_FTP_PROXY" + fi + + if [ -n "$IPKG_NO_PROXY" ]; then + export no_proxy="$IPKG_NO_PROXY" + fi + + IPKG_STATUS_FIELDS='\(Package\|Status\|Essential\|Version\|Conffiles\|Root\)' +} + +ipkg_usage() { + [ $# -gt 0 ] && echo "ipkg: $*" + echo " +usage: ipkg [options...] sub-command [arguments...] +where sub-command is one of: + +Package Manipulation: + update Update list of available packages + upgrade Upgrade all installed packages to latest version + install <pkg> Download and install <pkg> (and dependencies) + install <file.ipk> Install package <file.ipk> + install <file.deb> Install package <file.deb> + remove <pkg> Remove package <pkg> + +Informational Commands: + list List available packages and descriptions + files <pkg> List all files belonging to <pkg> + search <file> Search for a packaging providing <file> + info [pkg [<field>]] Display all/some info fields for <pkg> or all + status [pkg [<field>]] Display all/some status fields for <pkg> or all + depends <pkg> Print uninstalled package dependencies for <pkg> + +Options: + -d <dest_name> Use <dest_name> as the the root directory for + -dest <dest_name> package installation, removal, upgrading. + <dest_name> should be a defined dest name from the + configuration file, (but can also be a directory + name in a pinch). + -o <offline_root> Use <offline_root> as the root for offline installation. + -offline <offline_root> + +Force Options (use when ipkg is too smart for its own good): + -force-depends Make dependency checks warnings instead of errors + -force-defaults Use default options for questions asked by ipkg. + (no prompts). Note that this will not prevent + package installation scripts from prompting. +" >&2 + exit 1 +} + +ipkg_dir_part() { + local dir=`echo $1 | sed -ne 's/\(.*\/\).*/\1/p'` + if [ -z "$dir" ]; then + dir="./" + fi + echo $dir +} + +ipkg_file_part() { + echo $1 | sed 's/.*\///' +} + +ipkg_protect_slashes() { + sed -e 's/\//\\\//g' +} + +ipkg_download() { + local src="$1" + local dest="$2" + + local src_file=`ipkg_file_part $src` + local dest_dir=`ipkg_dir_part $dest` + if [ -z "$dest_dir" ]; then + dest_dir="$IPKG_TMP" + fi + + local dest_file=`ipkg_file_part $dest` + if [ -z "$dest_file" ]; then + dest_file="$src_file" + fi + + # Proxy support + local proxyuser="" + local proxypassword="" + local proxyoption="" + + if [ -n "$IPKG_PROXY_USERNAME" ]; then + proxyuser="--proxy-user=\"$IPKG_PROXY_USERNAME\"" + proxypassword="--proxy-passwd=\"$IPKG_PROXY_PASSWORD\"" + fi + + if [ -n "$IPKG_PROXY_HTTP" -o -n "$IPKG_PROXY_FTP" ]; then + proxyoption="--proxy=on" + fi + + echo "Downloading $src ..." + rm -f $IPKG_TMP/$src_file + case "$src" in + http://* | ftp://*) + if ! wget --passive-ftp -nd $proxyoption $proxyuser $proxypassword -P $IPKG_TMP $src; then + echo "ipkg_download: ERROR: Failed to retrieve $src, returning $err" + return 1 + fi + mv $IPKG_TMP/$src_file $dest_dir/$dest_file 2>/dev/null + ;; + file:/* ) + ln -s `echo $src | sed 's/^file://'` $dest_dir/$dest_file 2>/dev/null + ;; + *) + echo "DEBUG: $src" + ;; + esac + + echo "Done." + return 0 +} + +ipkg_update() { + if [ ! -e "$IPKG_LISTS_DIR" ]; then + mkdir -p $IPKG_LISTS_DIR + fi + + local err= + for src_name in `ipkg_src_names`; do + local src=`ipkg_src_byname $src_name` + if ! ipkg_download $src/Packages $IPKG_LISTS_DIR/$src_name; then + echo "ipkg_update: Error downloading $src/Packages to $IPKG_LISTS_DIR/$src_name" >&2 + err=t + else + echo "Updated list of available packages in $IPKG_LISTS_DIR/$src_name" + fi + done + + [ -n "$err" ] && return 1 + + return 0 +} + +ipkg_list() { + for src in `ipkg_src_names`; do + if ipkg_require_list $src; then +# black magic... +sed -ne " +/^Package:/{ +s/^Package:[[:space:]]*\<\([a-z0-9.+-]*$1[a-z0-9.+-]*\).*/\1/ +h +} +/^Description:/{ +s/^Description:[[:space:]]*\(.*\)/\1/ +H +g +s/\\ +/ - / +p +} +" $IPKG_LISTS_DIR/$src + fi + done +} + +ipkg_extract_paragraph() { + local pkg="$1" + sed -ne "/Package:[[:space:]]*$pkg[[:space:]]*\$/,/^\$/p" +} + +ipkg_extract_field() { + local field="$1" +# blacker magic... + sed -ne " +: TOP +/^$field:/{ +p +n +b FIELD +} +d +: FIELD +/^$/b TOP +/^[^[:space:]]/b TOP +p +n +b FIELD +" +} + +ipkg_extract_value() { + sed -e "s/^[^:]*:[[:space:]]*//" +} + +ipkg_require_list() { + [ $# -lt 1 ] && return 1 + local src="$1" + if [ ! -f "$IPKG_LISTS_DIR/$src" ]; then + echo "ERROR: File not found: $IPKG_LISTS_DIR/$src" >&2 + echo " You probably want to run \`ipkg update'" >&2 + return 1 + fi + return 0 +} + +ipkg_info() { + for src in `ipkg_src_names`; do + if ipkg_require_list $src; then + case $# in + 0) + cat $IPKG_LISTS_DIR/$src + ;; + 1) + ipkg_extract_paragraph $1 < $IPKG_LISTS_DIR/$src + ;; + *) + ipkg_extract_paragraph $1 < $IPKG_LISTS_DIR/$src | ipkg_extract_field $2 + ;; + esac + fi + done +} + +ipkg_status_sd() { + [ $# -lt 1 ] && return 0 + sd="$1" + shift + if [ -f $sd/status ]; then + case $# in + 0) + cat $sd/status + ;; + 1) + ipkg_extract_paragraph $1 < $sd/status + ;; + *) + ipkg_extract_paragraph $1 < $sd/status | ipkg_extract_field $2 + ;; + esac + fi + return 0 +} + +ipkg_status_all() { + for sd in `ipkg_state_dirs`; do + ipkg_status_sd $sd $* + done +} + +ipkg_status() { + if [ -n "$DEST_NAME" ]; then + ipkg_status_sd $IPKG_STATE_DIR $* + else + ipkg_status_all $* + fi +} + +ipkg_status_matching_sd() { + local sd="$1" + local re="$2" + if [ -f $sd/status ]; then + sed -ne " +: TOP +/^Package:/{ +s/^Package:[[:space:]]*// +s/[[:space:]]*$// +h +} +/$re/{ +g +p +b NEXT +} +d +: NEXT +/^$/b TOP +n +b NEXT +" < $sd/status + fi + return 0 +} + +ipkg_status_matching_all() { + for sd in `ipkg_state_dirs`; do + ipkg_status_matching_sd $sd $* + done +} + +ipkg_status_matching() { + if [ -n "$DEST_NAME" ]; then + ipkg_status_matching_sd $IPKG_STATE_DIR $* + else + ipkg_status_matching_all $* + fi +} + +ipkg_status_installed_sd() { + local sd="$1" + local pkg="$2" + ipkg_status_sd $sd $pkg Status | grep -q "Status: install ok installed" +} + +ipkg_status_installed_all() { + local ret=1 + for sd in `ipkg_state_dirs`; do + if `ipkg_status_installed_sd $sd $*`; then + ret=0 + fi + done + return $ret +} + +ipkg_status_mentioned_sd() { + local sd="$1" + local pkg="$2" + [ -n "`ipkg_status_sd $sd $pkg Status`" ] +} + +ipkg_files() { + local pkg="$1" + if [ -n "$DEST_NAME" ]; then + dests=$IPKG_ROOT + else + dests=`ipkg_dests_all` + fi + for dest in $dests; do + if [ -f $dest/$IPKG_DIR_PREFIX/info/$pkg.list ]; then + dest_sed=`echo $dest | ipkg_protect_slashes` + sed -e "s/^/$dest_sed/" < $dest/$IPKG_DIR_PREFIX/info/$pkg.list + fi + done +} + +ipkg_search() { + local pattern="$1" + + for dest_name in `ipkg_dest_names`; do + dest=`ipkg_dest_byname $dest_name` + dest_sed=`echo $dest | ipkg_protect_slashes` + + set +o noglob + local list_files=`ls -1 $dest/$IPKG_DIR_PREFIX/info/*.list 2>/dev/null` + set -o noglob + for file in $list_files; do + if sed "s/^/$dest_sed/" $file | grep -q $pattern; then + local pkg=`echo $file | sed "s/^.*\/\(.*\)\.list/\1/"` + [ "$dest_name" != `ipkg_dest_default_name` ] && pkg="$pkg ($dest_name)" + sed "s/^/$dest_sed/" $file | grep $pattern | sed "s/^/$pkg: /" + fi + done + done +} + +ipkg_status_remove_sd() { + local sd="$1" + local pkg="$2" + + if [ ! -f $sd/status ]; then + mkdir -p $sd + touch $sd/status + fi + sed -ne "/Package:[[:space:]]*$pkg[[:space:]]*\$/,/^\$/!p" < $sd/status > $sd/status.new + mv $sd/status.new $sd/status +} + +ipkg_status_remove_all() { + for sd in `ipkg_state_dirs`; do + ipkg_status_remove_sd $sd $* + done +} + +ipkg_status_remove() { + if [ -n "$DEST_NAME" ]; then + ipkg_status_remove_sd $IPKG_STATE_DIR $* + else + ipkg_status_remove_all $* + fi +} + +ipkg_status_update_sd() { + local sd="$1" + local pkg="$2" + + ipkg_status_remove_sd $sd $pkg + ipkg_extract_field "$IPKG_STATUS_FIELDS" >> $sd/status + echo "" >> $sd/status +} + +ipkg_status_update() { + ipkg_status_update_sd $IPKG_STATE_DIR $* +} + +ipkg_unsatisfied_dependences() { + local pkg=$1 + local deps=`ipkg_get_depends $pkg` + local remaining_deps= + for dep in $deps; do + local installed=`ipkg_get_installed $dep` + if [ "$installed" != "installed" ] ; then + remaining_deps="$remaining_deps $dep" + fi + done + ## echo "ipkg_unsatisfied_dependences pkg=$pkg $remaining_deps" > /dev/console + echo $remaining_deps +} + +ipkg_safe_pkg_name() { + local pkg=$1 + local spkg=`echo pkg_$pkg | sed -e y/-+./___/` + echo $spkg +} + +ipkg_set_depends() { + local pkg=$1; shift + local new_deps="$*" + pkg=`ipkg_safe_pkg_name $pkg` + ## setvar ${pkg}_depends "$new_deps" + echo $new_deps > $IPKG_TMP/${pkg}.depends +} + +ipkg_get_depends() { + local pkg=$1 + pkg=`ipkg_safe_pkg_name $pkg` + cat $IPKG_TMP/${pkg}.depends + ## eval "echo \$${pkg}_depends" +} + +ipkg_set_installed() { + local pkg=$1 + pkg=`ipkg_safe_pkg_name $pkg` + echo installed > $IPKG_TMP/${pkg}.installed + ## setvar ${pkg}_installed "installed" +} + +ipkg_set_uninstalled() { + local pkg=$1 + pkg=`ipkg_safe_pkg_name $pkg` + ### echo ipkg_set_uninstalled $pkg > /dev/console + echo uninstalled > $IPKG_TMP/${pkg}.installed + ## setvar ${pkg}_installed "uninstalled" +} + +ipkg_get_installed() { + local pkg=$1 + pkg=`ipkg_safe_pkg_name $pkg` + if [ -f $IPKG_TMP/${pkg}.installed ]; then + cat $IPKG_TMP/${pkg}.installed + fi + ## eval "echo \$${pkg}_installed" +} + +ipkg_depends() { + local new_pkgs="$*" + local all_deps= + local installed_pkgs=`ipkg_status_matching_all 'Status:.*[[:space:]]installed'` + for pkg in $installed_pkgs; do + ipkg_set_installed $pkg + done + while [ -n "$new_pkgs" ]; do + all_deps="$all_deps $new_pkgs" + local new_deps= + for pkg in $new_pkgs; do + if echo $pkg | grep -q '[^a-z0-9.+-]'; then + echo "ipkg_depends: ERROR: Package name $pkg contains illegal characters (should be [a-z0-9.+-])" >&2 + return 1 + fi + # TODO: Fix this. For now I am ignoring versions and alternations in dependencies. + new_deps="$new_deps "`ipkg_info $pkg '\(Pre-\)\?Depends' | ipkg_extract_value | sed -e 's/([^)]*)//g +s/\(|[[:space:]]*[a-z0-9.+-]\+[[:space:]]*\)\+//g +s/,/ /g +s/ \+/ /g'` + ipkg_set_depends $pkg $new_deps + done + + new_deps=`echo $new_deps | sed -e 's/[[:space:]]\+/\\ +/g' | sort | uniq` + + local maybe_new_pkgs= + for pkg in $new_deps; do + if ! echo $installed_pkgs | grep -q "\<$pkg\>"; then + maybe_new_pkgs="$maybe_new_pkgs $pkg" + fi + done + + new_pkgs= + for pkg in $maybe_new_pkgs; do + if ! echo $all_deps | grep -q "\<$pkg\>"; then + if [ -z "`ipkg_info $pkg`" ]; then + echo "ipkg_depends: Warning: $pkg mentioned in dependency but no package found in $IPKG_LISTS_DIR" >&2 + ipkg_set_installed $pkg + else + new_pkgs="$new_pkgs $pkg" + ipkg_set_uninstalled $pkg + fi + else + ipkg_set_uninstalled $pkg + fi + done + done + + echo $all_deps +} + +ipkg_get_install_dest() { + local dest="$1" + shift + local sd=$dest/$IPKG_DIR_PREFIX + local info_dir=$sd/info + + local requested_pkgs="$*" + local pkgs=`ipkg_depends $*` + + mkdir -p $info_dir + for pkg in $pkgs; do + if ! ipkg_status_mentioned_sd $sd $pkg; then + echo "Package: $pkg +Status: install ok not-installed" | ipkg_status_update_sd $sd $pkg + fi + done + ## mark the packages that we were directly requested to install as uninstalled + for pkg in $requested_pkgs; do ipkg_set_uninstalled $pkg; done + + local new_pkgs= + local pkgs_installed=0 + while [ -n "pkgs" ]; do + curcheck=0 + ## echo "pkgs to install: {$pkgs}" > /dev/console + for pkg in $pkgs; do + curcheck=`expr $curcheck + 1` + local is_installed=`ipkg_get_installed $pkg` + if [ "$is_installed" = "installed" ]; then + echo "$pkg is installed" > /dev/console + continue + fi + + local remaining_deps=`ipkg_unsatisfied_dependences $pkg` + if [ -n "$remaining_deps" ]; then + new_pkgs="$new_pkgs $pkg" + ### echo "Dependences not satisfied for $pkg: $remaining_deps" + if [ $curcheck -ne `echo $pkgs|wc -w` ]; then + continue + fi + fi + + local filename= + for src in `ipkg_src_names`; do + if ipkg_require_list $src; then + filename=`ipkg_extract_paragraph $pkg < $IPKG_LISTS_DIR/$src | ipkg_extract_field Filename | ipkg_extract_value` + [ -n "$filename" ] && break + fi + done + + if [ -z "$filename" ]; then + echo "ipkg_get_install: ERROR: Cannot find package $pkg in $IPKG_LISTS_DIR" + echo "ipkg_get_install: Check the spelling and maybe run \`ipkg update'." + ipkg_status_remove_sd $sd $pkg + return 1; + fi + + echo "" + local tmp_pkg_file="$IPKG_TMP/"`ipkg_file_part $filename` + if ! ipkg_download `ipkg_src_byname $src`/$filename $tmp_pkg_file; then + echo "ipkg_get_install: Perhaps you need to run \`ipkg update'?" + return 1 + fi + + if ! ipkg_install_file_dest $dest $tmp_pkg_file; then + echo "ipkg_get_install: ERROR: Failed to install $tmp_pkg_file" + echo "ipkg_get_install: I'll leave it there for you to try a manual installation" + return 1 + fi + + ipkg_set_installed $pkg + pkgs_installed=`expr $pkgs_installed + 1` + rm $tmp_pkg_file + done + ### echo "Installed $pkgs_installed package(s) this round" + if [ $pkgs_installed -eq 0 ]; then + if [ -z "$new_pkgs" ]; then + break + fi + fi + pkgs_installed=0 + pkgs="$new_pkgs" + new_pkgs= + curcheck=0 + done +} + +ipkg_get_install() { + ipkg_get_install_dest $IPKG_ROOT $* +} + +ipkg_install_file_dest() { + local dest="$1" + local filename="$2" + local sd=$dest/$IPKG_DIR_PREFIX + local info_dir=$sd/info + + if [ ! -f "$filename" ]; then + echo "ipkg_install_file: ERROR: File $filename not found" + return 1 + fi + + local pkg=`ipkg_file_part $filename | sed 's/\([a-z0-9.+-]\+\)_.*/\1/'` + local ext=`echo $filename | sed 's/.*\.//'` + local pkg_extract_stdout + #if [ "$ext" = "ipk" ]; then + # pkg_extract_stdout="tar -xzOf" + #elif [ "$ext" = "deb" ]; then + pkg_extract_stdout="ar p" + #else + # echo "ipkg_install_file: ERROR: File $filename has unknown extension $ext (not .ipk or .deb)" + # return 1 + #fi + + # Check dependencies + local depends=`ipkg_depends $pkg | sed -e "s/\<$pkg\>//"` + + # Don't worry about deps that are scheduled for installation + local missing_deps= + for dep in $depends; do + if ! ipkg_status_all $dep | grep -q 'Status:[[:space:]]install'; then + missing_deps="$missing_deps $dep" + fi + done + + if [ ! -z "$missing_deps" ]; then + if [ -n "$FORCE_DEPENDS" ]; then + echo "ipkg_install_file: Warning: $pkg depends on the following uninstalled programs: $missing_deps" + else + echo "ipkg_install_file: ERROR: $pkg depends on the following uninstalled programs: + $missing_deps" + echo "ipkg_install_file: You may want to use \`ipkg install' to install these." + return 1 + fi + fi + + mkdir -p $IPKG_TMP/$pkg/control + mkdir -p $IPKG_TMP/$pkg/data + mkdir -p $info_dir + + if ! $pkg_extract_stdout $filename control.tar.gz | (cd $IPKG_TMP/$pkg/control; tar -xzf - ) ; then + echo "ipkg_install_file: ERROR unpacking control.tar.gz from $filename" + return 1 + fi + + if [ -n "$IPKG_OFFLINE_ROOT" ]; then + if grep -q '^InstallsOffline:[[:space:]]*no' $IPKG_TMP/$pkg/control/control; then + echo "*** Warning: Package $pkg may not be installed in offline mode" + echo "*** Warning: Scheduling $filename for pending installation (installing into $IPKG_PENDING_DIR)" + echo "Package: $pkg +Status: install ok pending" | ipkg_status_update_sd $sd $pkg + mkdir -p $IPKG_PENDING_DIR + cp $filename $IPKG_PENDING_DIR + rm -r $IPKG_TMP/$pkg/control + rm -r $IPKG_TMP/$pkg/data + rmdir $IPKG_TMP/$pkg + return 0 + fi + fi + + + echo -n "Unpacking $pkg..." + set +o noglob + for file in $IPKG_TMP/$pkg/control/*; do + local base_file=`ipkg_file_part $file` + mv $file $info_dir/$pkg.$base_file + done + set -o noglob + rm -r $IPKG_TMP/$pkg/control + + if ! $pkg_extract_stdout $filename ./data.tar.gz | (cd $IPKG_TMP/$pkg/data; tar -xzf - ) ; then + echo "ipkg_install_file: ERROR unpacking data.tar.gz from $filename" + return 1 + fi + echo "Done." + + echo -n "Configuring $pkg..." + export PKG_ROOT=$dest + if [ -x "$info_dir/$pkg.preinst" ]; then + if ! $info_dir/$pkg.preinst install; then + echo "$info_dir/$pkg.preinst failed. Aborting installation of $pkg" + rm -rf $IPKG_TMP/$pkg/data + rmdir $IPKG_TMP/$pkg + return 1 + fi + fi + + local old_conffiles=`ipkg_status_sd $sd $pkg Conffiles | ipkg_extract_value` + local new_conffiles= + if [ -f "$info_dir/$pkg.conffiles" ]; then + for conffile in `cat $info_dir/$pkg.conffiles`; do + if [ -f "$dest/$conffile" ] && ! echo " $old_conffiles " | grep -q " $conffile "`md5sum $dest/$conffile | sed 's/ .*//'`; then + local use_maintainers_conffile= + if [ -z "$FORCE_DEFAULTS" ]; then + while true; do + echo -n "Configuration file \`$conffile' + ==> File on system created by you or by a script. + ==> File also in package provided by package maintainer. + What would you like to do about it ? Your options are: + Y or I : install the package maintainer's version + N or O : keep your currently-installed version + D : show the differences between the versions (if diff is installed) + The default action is to keep your current version. +*** `ipkg_file_part $conffile` (Y/I/N/O/D) [default=N] ? " + read response + case "$response" in + [YyIi] | [Yy][Ee][Ss]) + use_maintainers_conffile=t + break + ;; + [Dd]) + echo " +diff -u $dest/$conffile $IPKG_TMP/$pkg/data/$conffile" + diff -u $dest/$conffile $IPKG_TMP/$pkg/data/$conffile || true + echo "[Press ENTER to continue]" + read junk + ;; + *) + break + ;; + esac + done + fi + if [ -n "$use_maintainers_conffile" ]; then + local md5sum=`md5sum $IPKG_TMP/$pkg/data/$conffile | sed 's/ .*//'` + new_conffiles="$new_conffiles $conffile $md5sum" + else + new_conffiles="$new_conffiles $conffile <custom>" + rm $IPKG_TMP/$pkg/data/$conffile + fi + else + md5sum=`md5sum $IPKG_TMP/$pkg/data/$conffile | sed 's/ .*//'` + new_conffiles="$new_conffiles $conffile $md5sum" + fi + done + fi + + local owd=`pwd` + (cd $IPKG_TMP/$pkg/data/; tar cf - . | (cd $owd; cd $dest; tar xf -)) + rm -rf $IPKG_TMP/$pkg/data + rmdir $IPKG_TMP/$pkg + $pkg_extract_stdout $filename ./data.tar.gz | tar tzf - | sed -e 's/^\.//' > $info_dir/$pkg.list + + if [ -x "$info_dir/$pkg.postinst" ]; then + $info_dir/$pkg.postinst configure + fi + + if [ -n "$new_conffiles" ]; then + new_conffiles='Conffiles: '`echo $new_conffiles | ipkg_protect_slashes` + fi + local sed_safe_root=`echo $dest | sed -e "s/^${IPKG_OFFLINE_ROOT}//" | ipkg_protect_slashes` + sed -e "s/\(Package:.*\)/\1\\ +Status: install ok installed\\ +Root: ${sed_safe_root}\\ +${new_conffiles}/" $info_dir/$pkg.control | ipkg_status_update_sd $sd $pkg + + rm -f $info_dir/$pkg.control + rm -f $info_dir/$pkg.conffiles + rm -f $info_dir/$pkg.preinst + rm -f $info_dir/$pkg.postinst + + echo "Done." +} + +ipkg_install_file() { + ipkg_install_file_dest $IPKG_ROOT $* +} + +ipkg_install() { + + while [ $# -gt 0 ]; do + local pkg="$1" + shift + + case "$pkg" in + http://* | ftp://*) + local tmp_pkg_file="$IPKG_TMP/"`ipkg_file_part $pkg` + if ipkg_download $pkg $tmp_pkg_file; then + ipkg_install_file $tmp_pkg_file + rm $tmp_pkg_file + fi + ;; + file:/*.ipk | file://*.deb) + local ipkg_filename="`echo $pkg|sed 's/^file://'`" + ipkg_install_file $ipkg_filename + ;; + *.ipk | *.deb) + if [ -f "$pkg" ]; then + ipkg_install_file $pkg + else + echo "File not found $pkg" >&2 + fi + ;; + *) + ipkg_get_install $pkg || true + ;; + esac + done +} + +ipkg_install_pending() { + [ -n "$IPKG_OFFLINE_ROOT" ] && return 0 + + if [ -d "$IPKG_PENDING_DIR" ]; then + set +o noglob + local pending=`ls -1d $IPKG_PENDING_DIR/*.ipk 2> /dev/null` || true + set -o noglob + if [ -n "$pending" ]; then + echo "The following packages in $IPKG_PENDING_DIR will now be installed:" + echo $pending + for filename in $pending; do + if ipkg_install_file $filename; then + rm $filename + fi + done + fi + fi + return 0 +} + +ipkg_install_wanted() { + local wanted=`ipkg_status_matching 'Status:[[:space:]]*install.*not-installed'` + + if [ -n "$wanted" ]; then + echo "The following package were previously requested but have not been installed:" + echo $wanted + + if [ -n "$FORCE_DEFAULTS" ]; then + echo "Installing them now." + else + echo -n "Install them now [Y/n] ? " + read response + case "$response" in + [Nn] | [Nn][Oo]) + return 0 + ;; + esac + fi + + ipkg_install $wanted + fi + + return 0 +} + +ipkg_upgrade_pkg() { + local pkg="$1" + local avail_ver=`ipkg_info $pkg Version | ipkg_extract_value | head -1` + + is_installed= + for dest_name in `ipkg_dest_names`; do + local dest=`ipkg_dest_byname $dest_name` + local sd=$dest/$IPKG_DIR_PREFIX + local inst_ver=`ipkg_status_sd $sd $pkg Version | ipkg_extract_value` + if [ -n "$inst_ver" ]; then + is_installed=t + + if [ -z "$avail_ver" ]; then + echo "Assuming locally installed package $pkg ($inst_ver) is up to date" + return 0 + fi + + if [ "$avail_ver" = "$inst_ver" ]; then + echo "Package $pkg ($inst_ver) installed in $dest_name is up to date" + elif ipkg-compare-versions $avail_ver '>>' $inst_ver; then + echo "Upgrading $pkg ($dest_name) from $inst_ver to $avail_ver" + ipkg_get_install_dest $dest $pkg + else + echo "Not downgrading package $pkg from $inst_ver to $avail_ver" + fi + fi + done + + if [ -z "$is_installed" ]; then + echo "Package $pkg does not appear to be installed" + return 0 + fi + +} + +ipkg_upgrade() { + if [ $# -lt 1 ]; then + local pkgs=`ipkg_status_matching 'Status:.*[[:space:]]installed'` + else + pkgs="$*" + fi + + for pkg in $pkgs; do + ipkg_upgrade_pkg $pkg + done +} + +ipkg_remove_pkg_dest() { + local dest="$1" + local pkg="$2" + local sd=$dest/$IPKG_DIR_PREFIX + local info_dir=$sd/info + + if ! ipkg_status_installed_sd $sd $pkg; then + echo "ipkg_remove: Package $pkg does not appear to be installed in $dest" + if ipkg_status_mentioned_sd $sd $pkg; then + echo "Purging mention of $pkg from the ipkg database" + ipkg_status_remove_sd $sd $pkg + fi + return 1 + fi + + echo "ipkg_remove: Removing $pkg... " + + local files=`cat $info_dir/$pkg.list` + + export PKG_ROOT=$dest + if [ -x "$info_dir/$pkg.prerm" ]; then + $info_dir/$pkg.prerm remove + fi + + local conffiles=`ipkg_status_sd $sd $pkg Conffiles | ipkg_extract_value` + + local dirs_to_remove= + for file in $files; do + if [ -d "$dest/$file" ]; then + dirs_to_remove="$dirs_to_remove $dest/$file" + else + if echo " $conffiles " | grep -q " $file "; then + if echo " $conffiles " | grep -q " $file "`md5sum $dest/$file | sed 's/ .*//'`; then + rm -f $dest/$file + fi + else + rm -f $dest/$file + fi + fi + done + + local removed_a_dir=t + while [ -n "$removed_a_dir" ]; do + removed_a_dir= + local new_dirs_to_remove= + for dir in $dirs_to_remove; do + if rmdir $dir >/dev/null 2>&1; then + removed_a_dir=t + else + new_dirs_to_remove="$new_dirs_to_remove $dir" + fi + done + dirs_to_remove="$new_dirs_to_remove" + done + + if [ -n "$dirs_to_remove" ]; then + echo "ipkg_remove: Warning: Not removing the following directories since they are not empty:" >&2 + echo "$dirs_to_remove" | sed -e 's/\/[/]\+/\//g' >&2 + fi + + if [ -x "$info_dir/$pkg.postrm" ]; then + $info_dir/$pkg.postrm remove + fi + + ipkg_status_remove_sd $sd $pkg + set +o noglob + rm -f $info_dir/$pkg.* + set -o noglob + + echo "Done." +} + +ipkg_remove_pkg() { + local pkg="$1" + for dest in `ipkg_dests_all`; do + local sd=$dest/$IPKG_DIR_PREFIX + if ipkg_status_mentioned_sd $sd $pkg; then + ipkg_remove_pkg_dest $dest $pkg + fi + done +} + +ipkg_remove() { + while [ $# -gt 0 ]; do + local pkg="$1" + shift + if [ -n "$DEST_NAME" ]; then + ipkg_remove_pkg_dest $IPKG_ROOT $pkg + else + ipkg_remove_pkg $pkg + fi + done +} + +ipkg_list_installed() { + echo `ipkg_status_matching 'Status:.*[[:space:]]installed'` +} +########### +# ipkg main +########### + +# Parse options +while [ $# -gt 0 ]; do + arg="$1" + case $arg in + -d | -dest) + [ $# -gt 1 ] || ipkg_usage "option $arg requires an argument" + DEST_NAME="$2" + shift + ;; + -o | -offline) + [ $# -gt 1 ] || ipkg_usage "option $arg requires an argument" + IPKG_OFFLINE_ROOT="$2" + shift + ;; + -force-depends) + FORCE_DEPENDS=t + ;; + -force-defaults) + FORCE_DEFAULTS=t + ;; + -f) + [ $# -gt 1 ] || ipkg_usage "option $arg requires an argument" + IPKG_CONF="$2" + shift + ;; + -*) + ipkg_usage "unknown option $arg" + ;; + *) + break + ;; + esac + shift +done + +[ $# -lt 1 ] && ipkg_usage "ipkg must have one sub-command argument" +cmd="$1" +shift + +ipkg_load_configuration + +case "$cmd" in +update|upgrade|list|info|status|install_pending|list_installed) + ;; +install|depends|remove|files|search) + [ $# -lt 1 ] && ipkg_usage "ERROR: the \`\`$cmd'' command requires an argument" + ;; +*) + echo "ERROR: unknown sub-command \`$cmd'" + ipkg_usage + ;; +esac + +# Only install pending if we have an interactive sub-command +case "$cmd" in +upgrade|install) + ipkg_install_pending + ipkg_install_wanted + ;; +esac + +ipkg_$cmd $* +rm -rf $IPKG_TMP diff --git a/packages/stage-manager/files/stage-manager-ipkg-build b/packages/stage-manager/files/stage-manager-ipkg-build new file mode 100755 index 0000000000..77367ac35a --- /dev/null +++ b/packages/stage-manager/files/stage-manager-ipkg-build @@ -0,0 +1,246 @@ +#!/bin/sh + +# ipkg-build -- construct a .ipk from a directory +# Carl Worth <cworth@east.isi.edu> +# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001 +# 2003-04-25 rea@sr.unh.edu +# Updated to work on Familiar Pre0.7rc1, with busybox tar. +# Note it Requires: binutils-ar (since the busybox ar can't create) +# For UID debugging it needs a better "find". +set -e + +version=1.0 + +ipkg_extract_value() { + sed -e "s/^[^:]*:[[:space:]]*//" +} + +required_field() { + field=$1 + + value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value` + if [ -z "$value" ]; then + echo "*** Error: $CONTROL/control is missing field $field" >&2 + return 1 + fi + echo $value + return 0 +} + +disallowed_field() { + field=$1 + + value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value` + if [ -n "$value" ]; then + echo "*** Error: $CONTROL/control contains disallowed field $field" >&2 + return 1 + fi + echo $value + return 0 +} + +pkg_appears_sane() { + local pkg_dir=$1 + + local owd=`pwd` + cd $pkg_dir + + PKG_ERROR=0 + + tilde_files=`find . -name '*~'` + if [ -n "$tilde_files" ]; then + if [ "$noclean" = "1" ]; then + echo "*** Warning: The following files have names ending in '~'. +You probably want to remove them: " >&2 + ls -ld $tilde_files + echo >&2 + else + echo "*** Removing the following files: $tilde_files" + rm -f "$tilde_files" + fi + fi + + large_uid_files=`find . -uid +99 || true` + + if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then + echo "*** Warning: The following files have a UID greater than 99. +You probably want to chown these to a system user: " >&2 + ls -ld $large_uid_files + echo >&2 + fi + + + if [ ! -f "$CONTROL/control" ]; then + echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2 + cd $owd + return 1 + fi + + pkg=`required_field Package` + [ "$?" -ne 0 ] && PKG_ERROR=1 + + version=`required_field Version | sed 's/Version://; s/^.://g;'` + [ "$?" -ne 0 ] && PKG_ERROR=1 + + arch=`required_field Architecture` + [ "$?" -ne 0 ] && PKG_ERROR=1 + + required_field Maintainer >/dev/null + [ "$?" -ne 0 ] && PKG_ERROR=1 + + required_field Description >/dev/null + [ "$?" -ne 0 ] && PKG_ERROR=1 + + section=`required_field Section` + [ "$?" -ne 0 ] && PKG_ERROR=1 + if [ -z "$section" ]; then + echo "The Section field should have one of the following values:" >&2 + echo "admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11" >&2 + fi + + priority=`required_field Priority` + [ "$?" -ne 0 ] && PKG_ERROR=1 + if [ -z "$priority" ]; then + echo "The Priority field should have one of the following values:" >&2 + echo "required, important, standard, optional, extra." >&2 + echo "If you don't know which priority value you should be using, then use \`optional'" >&2 + fi + + source=`required_field Source` + [ "$?" -ne 0 ] && PKG_ERROR=1 + if [ -z "$source" ]; then + echo "The Source field contain the URL's or filenames of the source code and any patches" + echo "used to build this package. Either gnu-style tarballs or Debian source packages " + echo "are acceptable. Relative filenames may be used if they are distributed in the same" + echo "directory as the .ipk file." + fi + + disallowed_filename=`disallowed_field Filename` + [ "$?" -ne 0 ] && PKG_ERROR=1 + + if echo $pkg | grep '[^a-z0-9.+-]'; then + echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2 + PKG_ERROR=1; + fi + + local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'` + if [ -n "$bad_fields" ]; then + bad_fields=`echo $bad_fields` + echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2 + echo " $bad_fields" >&2 + echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2 + PKG_ERROR=1 + fi + + for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do + if [ -f $script -a ! -x $script ]; then + echo "*** Error: package script $script is not executable" >&2 + PKG_ERROR=1 + fi + done + + if [ -f $CONTROL/conffiles ]; then + for cf in `cat $CONTROL/conffiles`; do + if [ ! -f ./$cf ]; then + echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2 + PKG_ERROR=1 + fi + done + fi + + cd $owd + return $PKG_ERROR +} + +### +# ipkg-build "main" +### +ogargs="" +outer=ar +noclean=0 +usage="Usage: $0 [-c] [-C] [-o owner] [-g group] <pkg_directory> [<destination_directory>]" +while getopts "cg:ho:v" opt; do + case $opt in + o ) owner=$OPTARG + ogargs="--owner=$owner" + ;; + g ) group=$OPTARG + ogargs="$ogargs --group=$group" + ;; + c ) outer=tar + ;; + C ) noclean=1 + ;; + v ) echo $version + exit 0 + ;; + h ) echo $usage >&2 ;; + \? ) echo $usage >&2 + esac +done + + +shift $(($OPTIND - 1)) + +# continue on to process additional arguments + +case $# in +1) + dest_dir=$PWD + ;; +2) + dest_dir=$2 + if [ "$dest_dir" = "." -o "$dest_dir" = "./" ] ; then + dest_dir=$PWD + fi + ;; +*) + echo $usage >&2 + exit 1 + ;; +esac + +pkg_dir=$1 + +if [ ! -d $pkg_dir ]; then + echo "*** Error: Directory $pkg_dir does not exist" >&2 + exit 1 +fi + +# CONTROL is second so that it takes precedence +CONTROL= +[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN +[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL +if [ -z "$CONTROL" ]; then + echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2 + exit 1 +fi + +if ! pkg_appears_sane $pkg_dir; then + echo >&2 + echo "ipkg-build: Please fix the above errors and try again." >&2 + exit 1 +fi + +tmp_dir=$dest_dir/IPKG_BUILD.$$ +mkdir $tmp_dir + +echo $CONTROL > $tmp_dir/tarX +( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -czf $tmp_dir/data.tar.gz . ) +( cd $pkg_dir/$CONTROL && tar $ogargs -czf $tmp_dir/control.tar.gz . ) +rm $tmp_dir/tarX + +echo "2.0" > $tmp_dir/debian-binary + +pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk +rm -f $pkg_file +if [ "$outer" = "ar" ] ; then + ( cd $tmp_dir && ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz ) +else + ( cd $tmp_dir && tar -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz ) +fi + +rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz +rmdir $tmp_dir + +echo "Packaged contents of $pkg_dir into $pkg_file" diff --git a/packages/stage-manager/stagemanager-native_0.0.1.bb b/packages/stage-manager/stagemanager-native_0.0.1.bb index 355e1d95bb..cfa14498e4 100644 --- a/packages/stage-manager/stagemanager-native_0.0.1.bb +++ b/packages/stage-manager/stagemanager-native_0.0.1.bb @@ -1,7 +1,9 @@ DESCRIPTION = "Helper script for packaged-staging.bbclass" -PR = "r8" +PR = "r9" -SRC_URI = "file://stage-manager" +SRC_URI = "file://stage-manager \ + file://stage-manager-ipkg \ + file://stage-manager-ipkg-build " LICENSE = "GPLv2" PACKAGE_ARCH = "all" @@ -10,11 +12,14 @@ inherit native DEPENDS = " " PACKAGE_DEPENDS = " " +PATCHDEPENDENCY = "" INHIBIT_DEFAULT_DEPS = "1" do_install() { install -d ${STAGING_BINDIR} install -m 0755 ${WORKDIR}/stage-manager ${STAGING_BINDIR} + install -m 0755 ${WORKDIR}/stage-manager-ipkg ${STAGING_BINDIR} + install -m 0755 ${WORKDIR}/stage-manager-ipkg-build ${STAGING_BINDIR} } do_stage() { diff --git a/packages/tasks/task-sdk-host.bb b/packages/tasks/task-sdk-host.bb index d238b46144..a8ac3706c4 100644 --- a/packages/tasks/task-sdk-host.bb +++ b/packages/tasks/task-sdk-host.bb @@ -3,7 +3,7 @@ # DESCRIPTION = "Host packages for the standalone SDK or external toolchain" -PR = "r1" +PR = "r2" LICENSE = "MIT" ALLOW_EMPTY = "1" @@ -15,10 +15,6 @@ RDEPENDS_${PN} = "\ binutils-cross-sdk \ gcc-cross-sdk \ gdb-cross-sdk \ - g++ \ - cpp \ - libgcc \ - libgcc-dev \ - libstdc++ \ - libstdc++-dev \ + pkgconfig-sdk \ + opkg-sdk \ " diff --git a/packages/uclibc/bfin-uclibc_svn.bb b/packages/uclibc/bfin-uclibc_svn.bb index fdb1329968..5e71ddb490 100644 --- a/packages/uclibc/bfin-uclibc_svn.bb +++ b/packages/uclibc/bfin-uclibc_svn.bb @@ -7,7 +7,7 @@ # on whether the base patches apply to the selected (SRCDATE) svn release. # UCLIBC_BASE ?= "0.9.29" -PR = "r0" +PR = "r1" PV = "${UCLIBC_BASE}+svnr${SRCREV}" require uclibc.inc diff --git a/packages/uclibc/uclibc.inc b/packages/uclibc/uclibc.inc index 07e49ac5cb..861568c06e 100644 --- a/packages/uclibc/uclibc.inc +++ b/packages/uclibc/uclibc.inc @@ -23,6 +23,7 @@ PROVIDES += "virtual/libc virtual/${TARGET_PREFIX}libc-for-gcc" PROVIDES += "${@['virtual/libiconv', ''][bb.data.getVar('USE_NLS', d, 1) != 'yes']}" DEPENDS = "virtual/${TARGET_PREFIX}binutils \ virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers ncurses-native" +RDEPENDS_${PN}-dev = "linux-libc-headers-dev" # Blackfin needs a wrapper around ld DEPENDS_append_bfin = " elf2flt " diff --git a/packages/uclibc/uclibc_0.9.26.bb b/packages/uclibc/uclibc_0.9.26.bb index b9027c9939..865d373a43 100644 --- a/packages/uclibc/uclibc_0.9.26.bb +++ b/packages/uclibc/uclibc_0.9.26.bb @@ -1,4 +1,4 @@ -PR = "r8" +PR = "r9" require uclibc.inc diff --git a/packages/uclibc/uclibc_0.9.27.bb b/packages/uclibc/uclibc_0.9.27.bb index 856f70f2fc..d1686f5772 100644 --- a/packages/uclibc/uclibc_0.9.27.bb +++ b/packages/uclibc/uclibc_0.9.27.bb @@ -1,5 +1,5 @@ DEFAULT_PREFERENCE = "1" -PR = "r8" +PR = "r9" require uclibc.inc diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb index 64dcaaab1f..eb3bb50083 100644 --- a/packages/uclibc/uclibc_0.9.28.bb +++ b/packages/uclibc/uclibc_0.9.28.bb @@ -1,5 +1,5 @@ DEFAULT_PREFERENCE = "1" -PR = "r12" +PR = "r13" require uclibc.inc diff --git a/packages/uclibc/uclibc_0.9.29.bb b/packages/uclibc/uclibc_0.9.29.bb index 49280277db..4565f7dbb4 100644 --- a/packages/uclibc/uclibc_0.9.29.bb +++ b/packages/uclibc/uclibc_0.9.29.bb @@ -7,7 +7,8 @@ # on whether the base patches apply to the selected (SRCDATE) svn release. # UCLIBC_BASE ?= "0.9.29" -PR = "r18" +PR = "r19" +DEFAULT_PREFERENCE = "3" require uclibc.inc diff --git a/packages/uclibc/uclibc_svn.bb b/packages/uclibc/uclibc_svn.bb index 92181b2815..a357808745 100644 --- a/packages/uclibc/uclibc_svn.bb +++ b/packages/uclibc/uclibc_svn.bb @@ -8,8 +8,7 @@ # UCLIBC_BASE ?= "0.9.29" PV = "${UCLIBC_BASE}+svnr${SRCREV}" -PR = "r9" -DEFAULT_PREFERENCE = "2" +PR = "r10" #DEFAULT_PREFERENCE is 0 (empty), releases have a preference of 1 so take # precedence. diff --git a/packages/util-linux/files/swapargs.h b/packages/util-linux/files/swapargs.h index e960eef05f..52fd10411b 100644 --- a/packages/util-linux/files/swapargs.h +++ b/packages/util-linux/files/swapargs.h @@ -1,3 +1,2 @@ #define SWAPON_HAS_TWO_ARGS -#include <asm/page.h> #include <sys/swap.h> diff --git a/packages/util-linux/files/util-linux-2.12r-cramfs-1.patch b/packages/util-linux/files/util-linux-2.12r-cramfs-1.patch new file mode 100644 index 0000000000..1771bdc528 --- /dev/null +++ b/packages/util-linux/files/util-linux-2.12r-cramfs-1.patch @@ -0,0 +1,87 @@ +Submitted by: Jeremy Utley <jeremy@linuxfromscratch.org> +Date: 2004-12-25 +Initial Package Version: 2.12p (should apply to versions back to at least k) +Upstream Status: Not Submitted - Test Version +Origin: Alexander Patrakov, adapted from debian build of cramfs utilities +Description: Util-Linux fails in cramfs compilation due to changes in the +linux-libc-headers package 2.6.9 and after. This patch is a proper fix to the +problem, but may in fact not be accepted upstream. + + +Index: util-linux-2.12r/disk-utils/fsck.cramfs.c +=================================================================== +--- util-linux-2.12r.orig/disk-utils/fsck.cramfs.c 2008-05-16 00:34:36.000000000 -0700 ++++ util-linux-2.12r/disk-utils/fsck.cramfs.c 2008-05-16 09:39:50.000000000 -0700 +@@ -76,8 +76,7 @@ + + #define PAD_SIZE 512 + +-#include <asm/page.h> +-#define PAGE_CACHE_SIZE (4096) ++#define PAGE_CACHE_SIZE page_size + + /* Guarantee access to at least 8kB at a time */ + #define ROMBUFFER_BITS 13 +@@ -87,11 +86,13 @@ + static unsigned long read_buffer_block = ~0UL; + + /* Uncompressing data structures... */ +-static char outbuffer[PAGE_CACHE_SIZE*2]; ++static char *outbuffer; + z_stream stream; + + #endif /* INCLUDE_FS_TESTS */ + ++static size_t page_size; ++ + /* Input status of 0 to print help and exit without an error. */ + static void usage(int status) + { +@@ -456,9 +457,17 @@ + int c; /* for getopt */ + int start = 0; + ++ page_size = sysconf(_SC_PAGESIZE); ++ + if (argc) + progname = argv[0]; + ++ outbuffer = malloc(page_size * 2); ++ if (!outbuffer) { ++ fprintf(stderr, _("failed to allocate outbuffer\n")); ++ exit(8); ++ } ++ + /* command line options */ + while ((c = getopt(argc, argv, "hx:v")) != EOF) { + switch (c) { +Index: util-linux-2.12r/disk-utils/mkfs.cramfs.c +=================================================================== +--- util-linux-2.12r.orig/disk-utils/mkfs.cramfs.c 2004-12-11 06:56:01.000000000 -0800 ++++ util-linux-2.12r/disk-utils/mkfs.cramfs.c 2008-05-16 09:38:06.000000000 -0700 +@@ -46,16 +46,8 @@ + static const char *progname = "mkcramfs"; + static int verbose = 0; + +-#ifdef __ia64__ +-#define PAGE_CACHE_SIZE (16384) +-#elif defined __alpha__ +-#define PAGE_CACHE_SIZE (8192) +-#else +-#define PAGE_CACHE_SIZE (4096) +-#endif +- + /* The kernel assumes PAGE_CACHE_SIZE as block size. */ +-static unsigned int blksize = PAGE_CACHE_SIZE; /* settable via -b option */ ++static unsigned int blksize; /* settable via -b option */ + static long total_blocks = 0, total_nodes = 1; /* pre-count the root node */ + static int image_length = 0; + +@@ -730,6 +722,7 @@ + u32 crc = crc32(0L, Z_NULL, 0); + int c; + ++ blksize = sysconf(_SC_PAGESIZE); + total_blocks = 0; + + if (argc) { diff --git a/packages/util-linux/util-linux_2.12r.bb b/packages/util-linux/util-linux_2.12r.bb index 7f8c3dd9f8..ece7b8b729 100644 --- a/packages/util-linux/util-linux_2.12r.bb +++ b/packages/util-linux/util-linux_2.12r.bb @@ -4,5 +4,6 @@ SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1" SRC_URI += "file://glibc-fix.patch;patch=1" SRC_URI += "file://glibc-umount2.patch;patch=1" SRC_URI += "file://fdiskbsdlabel-avr32.patch;patch=1" +SRC_URI += "file://util-linux-2.12r-cramfs-1.patch;patch=1" -PR = "r13" +PR = "r14" diff --git a/packages/vnc/libvncserver/clientlogger.patch b/packages/vnc/libvncserver/clientlogger.patch new file mode 100644 index 0000000000..a3ce38ed7a --- /dev/null +++ b/packages/vnc/libvncserver/clientlogger.patch @@ -0,0 +1,398 @@ +diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c +index 6e87f69..35aab36 100644 +--- a/libvncclient/rfbproto.c ++++ b/libvncclient/rfbproto.c +@@ -136,6 +136,7 @@ static void FillRectangle(rfbClient* client, int x, int y, int w, int h, uint32_ + case 32: FILL_RECT(32); break; + default: + rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); ++ client->ClientLogger(client, "Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); + } + } + +@@ -157,6 +158,7 @@ static void CopyRectangle(rfbClient* client, uint8_t* buffer, int x, int y, int + case 32: COPY_RECT(32); break; + default: + rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); ++ client->ClientLogger(client, "Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); + } + } + +@@ -200,6 +202,7 @@ static void CopyRectangleFromRectangle(rfbClient* client, int src_x, int src_y, + case 32: COPY_RECT_FROM_RECT(32); break; + default: + rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); ++ client->ClientLogger(client, "Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); + } + } + +@@ -360,12 +363,14 @@ ConnectToRFBServer(rfbClient* client,const char *hostname, int port) + + if (!rec->file) { + rfbClientLog("Could not open %s.\n",client->serverHost); ++ client->ClientLogger(client, "Could not open %s.\n",client->serverHost); + return FALSE; + } + setbuf(rec->file,NULL); + fread(buffer,1,strlen(magic),rec->file); + if (strncmp(buffer,magic,strlen(magic))) { +- rfbClientLog("File %s was not recorded by vncrec.\n",client->serverHost); ++ rfbClientLog(client, "File %s was not recorded by vncrec.\n",client->serverHost); ++ client->ClientLogger(client, "File %s was not recorded by vncrec.\n",client->serverHost); + fclose(rec->file); + return FALSE; + } +@@ -375,6 +380,7 @@ ConnectToRFBServer(rfbClient* client,const char *hostname, int port) + + if (!StringToIPAddr(hostname, &host)) { + rfbClientLog("Couldn't convert '%s' to host address\n", hostname); ++ client->ClientLogger(client, "Couldn't convert '%s' to host address\n", hostname); + return FALSE; + } + +@@ -382,6 +388,7 @@ ConnectToRFBServer(rfbClient* client,const char *hostname, int port) + + if (client->sock < 0) { + rfbClientLog("Unable to connect to VNC server\n"); ++ client->ClientLogger(client, "Unable to connect to VNC server\n"); + return FALSE; + } + +@@ -403,6 +410,7 @@ rfbHandleAuthResult(rfbClient* client) + switch (authResult) { + case rfbVncAuthOK: + rfbClientLog("VNC authentication succeeded\n"); ++ client->ClientLogger(client, "VNC authentication succeeded\n"); + return TRUE; + break; + case rfbVncAuthFailed: +@@ -415,18 +423,23 @@ rfbHandleAuthResult(rfbClient* client) + if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return FALSE; } + reason[reasonLen]=0; + rfbClientLog("VNC connection failed: %s\n",reason); ++ client->ClientLogger(client, "VNC connection failed: %s\n",reason); + free(reason); + return FALSE; + } + rfbClientLog("VNC authentication failed\n"); ++ client->ClientLogger(client, "VNC authentication failed\n"); + return FALSE; + case rfbVncAuthTooMany: + rfbClientLog("VNC authentication failed - too many tries\n"); ++ client->ClientLogger(client, "VNC authentication failed - too many tries\n"); + return FALSE; + } + + rfbClientLog("Unknown VNC authentication result: %d\n", + (int)authResult); ++ client->ClientLogger(client, "Unknown VNC authentication result: %d\n", ++ (int)authResult); + return FALSE; + } + +@@ -462,6 +475,7 @@ InitialiseRFBConnection(rfbClient* client) + + if (sscanf(pv,rfbProtocolVersionFormat,&major,&minor) != 2) { + rfbClientLog("Not a valid VNC server (%s)\n",pv); ++ client->ClientLogger(client, "Not a valid VNC server (%s)\n",pv); + return FALSE; + } + +@@ -477,12 +491,14 @@ InitialiseRFBConnection(rfbClient* client) + /* UltraVNC uses minor codes 4 and 6 for the server */ + if (major==3 && (minor==4 || minor==6)) { + rfbClientLog("UltraVNC server detected, enabling UltraVNC specific messages\n",pv); ++ client->ClientLogger(client, "UltraVNC server detected, enabling UltraVNC specific messages\n",pv); + DefaultSupportedMessagesUltraVNC(client); + } + + /* TightVNC uses minor codes 5 for the server */ + if (major==3 && minor==5) { + rfbClientLog("TightVNC server detected, enabling TightVNC specific messages\n",pv); ++ client->ClientLogger(client, "TightVNC server detected, enabling TightVNC specific messages\n",pv); + DefaultSupportedMessagesTightVNC(client); + } + +@@ -492,6 +508,8 @@ InitialiseRFBConnection(rfbClient* client) + + rfbClientLog("VNC server supports protocol version %d.%d (viewer %d.%d)\n", + major, minor, rfbProtocolMajorVersion, rfbProtocolMinorVersion); ++ client->ClientLogger(client, "VNC server supports protocol version %d.%d (viewer %d.%d)\n", ++ major, minor, rfbProtocolMajorVersion, rfbProtocolMinorVersion); + + sprintf(pv,rfbProtocolVersionFormat,client->major,client->minor); + +@@ -511,6 +529,7 @@ InitialiseRFBConnection(rfbClient* client) + if (count==0) + { + rfbClientLog("List of security types is ZERO, expecting an error to follow\n"); ++ client->ClientLogger(client, "List of security types is ZERO, expecting an error to follow\n"); + + /* we have an error following */ + if (!ReadFromRFBServer(client, (char *)&reasonLen, 4)) return FALSE; +@@ -519,21 +538,25 @@ InitialiseRFBConnection(rfbClient* client) + if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return FALSE; } + reason[reasonLen]=0; + rfbClientLog("VNC connection failed: %s\n",reason); ++ client->ClientLogger(client, "VNC connection failed: %s\n",reason); + free(reason); + return FALSE; + } + + rfbClientLog("We have %d security types to read\n", count); ++ client->ClientLogger(client, "We have %d security types to read\n", count); + /* now, we have a list of available security types to read ( uint8_t[] ) */ + for (loop=0;loop<count;loop++) + { + if (!ReadFromRFBServer(client, (char *)&tAuth, 1)) return FALSE; + rfbClientLog("%d) Received security type %d\n", loop, tAuth); ++ client->ClientLogger(client, "%d) Received security type %d\n", loop, tAuth); + if ((flag==0) && ((tAuth==rfbVncAuth) || (tAuth==rfbNoAuth))) + { + flag++; + authScheme=tAuth; + rfbClientLog("Selecting security type %d (%d/%d in the list)\n", authScheme, loop, count); ++ client->ClientLogger(client, "Selecting security type %d (%d/%d in the list)\n", authScheme, loop, count); + /* send back a single byte indicating which security type to use */ + if (!WriteToRFBServer(client, (char *)&tAuth, 1)) return FALSE; + +@@ -547,6 +570,7 @@ InitialiseRFBConnection(rfbClient* client) + } + + rfbClientLog("Selected Security Scheme %d\n", authScheme); ++ client->ClientLogger(client, "Selected Security Scheme %d\n", authScheme); + + switch (authScheme) { + +@@ -559,11 +583,13 @@ InitialiseRFBConnection(rfbClient* client) + if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return FALSE; } + reason[reasonLen]=0; + rfbClientLog("VNC connection failed: %s\n", reason); ++ client->ClientLogger(client, "VNC connection failed: %s\n", reason); + free(reason); + return FALSE; + + case rfbNoAuth: + rfbClientLog("No authentication needed\n"); ++ client->ClientLogger(client, "No authentication needed\n"); + + /* 3.8 and upwards sends a Security Result for rfbNoAuth */ + if (client->major==3 && client->minor > 7) +@@ -580,6 +606,7 @@ InitialiseRFBConnection(rfbClient* client) + + if ((!passwd) || (strlen(passwd) == 0)) { + rfbClientLog("Reading password failed\n"); ++ client->ClientLogger(client, "Reading password failed\n"); + return FALSE; + } + if (strlen(passwd) > 8) { +@@ -604,6 +631,8 @@ InitialiseRFBConnection(rfbClient* client) + default: + rfbClientLog("Unknown authentication scheme from VNC server: %d\n", + (int)authScheme); ++ client->ClientLogger(client, "Unknown authentication scheme from VNC server: %d\n", ++ (int)authScheme); + return FALSE; + } + +@@ -624,6 +653,8 @@ InitialiseRFBConnection(rfbClient* client) + if (!client->desktopName) { + rfbClientLog("Error allocating memory for desktop name, %lu bytes\n", + (unsigned long)client->si.nameLength); ++ client->ClientLogger(client, "Error allocating memory for desktop name, %lu bytes\n", ++ (unsigned long)client->si.nameLength); + return FALSE; + } + +@@ -632,11 +663,15 @@ InitialiseRFBConnection(rfbClient* client) + client->desktopName[client->si.nameLength] = 0; + + rfbClientLog("Desktop name \"%s\"\n",client->desktopName); ++ client->ClientLogger(client, "Desktop name \"%s\"\n",client->desktopName); + + rfbClientLog("Connected to VNC server, using protocol version %d.%d\n", + client->major, client->minor); ++ client->ClientLogger(client, "Connected to VNC server, using protocol version %d.%d\n", ++ client->major, client->minor); + + rfbClientLog("VNC server default format:\n"); ++ client->ClientLogger(client, "VNC server default format:\n"); + PrintPixelFormat(&client->si.format); + + return TRUE; +@@ -729,6 +764,7 @@ SetFormatAndEncodings(rfbClient* client) + encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRRE); + } else { + rfbClientLog("Unknown encoding '%.*s'\n",encStrLen,encStr); ++ client->ClientLogger(client, "Unknown encoding '%.*s'\n",encStrLen,encStr); + } + + encStr = nextEncStr; +@@ -752,6 +788,7 @@ SetFormatAndEncodings(rfbClient* client) + if (!tunnelSpecified) { + */ + rfbClientLog("Same machine: preferring raw encoding\n"); ++ client->ClientLogger(client, "Same machine: preferring raw encoding\n"); + encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRaw); + /* + } else { +@@ -1157,6 +1194,7 @@ HandleRFBServerMessage(rfbClient* client) + client->MallocFrameBuffer(client); + SendFramebufferUpdateRequest(client, 0, 0, rect.r.w, rect.r.h, FALSE); + rfbClientLog("Got new framebuffer size: %dx%d\n", rect.r.w, rect.r.h); ++ client->ClientLogger(client, "Got new framebuffer size: %dx%d\n", rect.r.w, rect.r.h); + continue; + } + +@@ -1170,12 +1208,18 @@ HandleRFBServerMessage(rfbClient* client) + /* currently ignored by this library */ + + rfbClientLog("client2server supported messages (bit flags)\n"); ++ client->ClientLogger(client, "client2server supported messages (bit flags)\n"); + for (loop=0;loop<32;loop+=8) + rfbClientLog("%02X: %04x %04x %04x %04x - %04x %04x %04x %04x\n", loop, + client->supportedMessages.client2server[loop], client->supportedMessages.client2server[loop+1], + client->supportedMessages.client2server[loop+2], client->supportedMessages.client2server[loop+3], + client->supportedMessages.client2server[loop+4], client->supportedMessages.client2server[loop+5], + client->supportedMessages.client2server[loop+6], client->supportedMessages.client2server[loop+7]); ++ client->ClientLogger(client, "%02X: %04x %04x %04x %04x - %04x %04x %04x %04x\n", loop, ++ client->supportedMessages.client2server[loop], client->supportedMessages.client2server[loop+1], ++ client->supportedMessages.client2server[loop+2], client->supportedMessages.client2server[loop+3], ++ client->supportedMessages.client2server[loop+4], client->supportedMessages.client2server[loop+5], ++ client->supportedMessages.client2server[loop+6], client->supportedMessages.client2server[loop+7]); + + rfbClientLog("server2client supported messages (bit flags)\n"); + for (loop=0;loop<32;loop+=8) +@@ -1184,6 +1228,11 @@ HandleRFBServerMessage(rfbClient* client) + client->supportedMessages.server2client[loop+2], client->supportedMessages.server2client[loop+3], + client->supportedMessages.server2client[loop+4], client->supportedMessages.server2client[loop+5], + client->supportedMessages.server2client[loop+6], client->supportedMessages.server2client[loop+7]); ++ client->ClientLogger(client, "%02X: %04x %04x %04x %04x - %04x %04x %04x %04x\n", loop, ++ client->supportedMessages.server2client[loop], client->supportedMessages.server2client[loop+1], ++ client->supportedMessages.server2client[loop+2], client->supportedMessages.server2client[loop+3], ++ client->supportedMessages.server2client[loop+4], client->supportedMessages.server2client[loop+5], ++ client->supportedMessages.server2client[loop+6], client->supportedMessages.server2client[loop+7]); + continue; + } + +@@ -1214,6 +1263,7 @@ HandleRFBServerMessage(rfbClient* client) + } + buffer[rect.r.w]=0; /* null terminate, just in case */ + rfbClientLog("Connected to Server \"%s\"\n", buffer); ++ client->ClientLogger(client, "Connected to Server \"%s\"\n", buffer); + free(buffer); + continue; + } +@@ -1226,6 +1276,8 @@ HandleRFBServerMessage(rfbClient* client) + { + rfbClientLog("Rect too large: %dx%d at (%d, %d)\n", + rect.r.w, rect.r.h, rect.r.x, rect.r.y); ++ client->ClientLogger(client, "Rect too large: %dx%d at (%d, %d)\n", ++ rect.r.w, rect.r.h, rect.r.x, rect.r.y); + return FALSE; + } + +@@ -1477,6 +1529,8 @@ HandleRFBServerMessage(rfbClient* client) + if(!handled) { + rfbClientLog("Unknown rect encoding %d\n", + (int)rect.encoding); ++ client->ClientLogger(client, "Unknown rect encoding %d\n", ++ (int)rect.encoding); + return FALSE; + } + } +@@ -1536,16 +1590,19 @@ HandleRFBServerMessage(rfbClient* client) + switch(msg.tc.length) { + case rfbTextChatOpen: + rfbClientLog("Received TextChat Open\n"); ++ client->ClientLogger(client, "Received TextChat Open\n"); + if (client->HandleTextChat!=NULL) + client->HandleTextChat(client, (int)rfbTextChatOpen, NULL); + break; + case rfbTextChatClose: + rfbClientLog("Received TextChat Close\n"); ++ client->ClientLogger(client, "Received TextChat Close\n"); + if (client->HandleTextChat!=NULL) + client->HandleTextChat(client, (int)rfbTextChatClose, NULL); + break; + case rfbTextChatFinished: + rfbClientLog("Received TextChat Finished\n"); ++ client->ClientLogger(client, "Received TextChat Finished\n"); + if (client->HandleTextChat!=NULL) + client->HandleTextChat(client, (int)rfbTextChatFinished, NULL); + break; +@@ -1559,6 +1616,7 @@ HandleRFBServerMessage(rfbClient* client) + /* Null Terminate <just in case> */ + buffer[msg.tc.length]=0; + rfbClientLog("Received TextChat \"%s\"\n", buffer); ++ client->ClientLogger(client, "Received TextChat \"%s\"\n", buffer); + if (client->HandleTextChat!=NULL) + client->HandleTextChat(client, (int)msg.tc.length, buffer); + free(buffer); +@@ -1577,6 +1635,7 @@ HandleRFBServerMessage(rfbClient* client) + client->MallocFrameBuffer(client); + SendFramebufferUpdateRequest(client, 0, 0, client->width, client->height, FALSE); + rfbClientLog("Got new framebuffer size: %dx%d\n", client->width, client->height); ++ client->ClientLogger(client, "Got new framebuffer size: %dx%d\n", client->width, client->height); + break; + } + +@@ -1590,6 +1649,7 @@ HandleRFBServerMessage(rfbClient* client) + client->MallocFrameBuffer(client); + SendFramebufferUpdateRequest(client, 0, 0, client->width, client->height, FALSE); + rfbClientLog("Got new framebuffer size: %dx%d\n", client->width, client->height); ++ client->ClientLogger(client, "Got new framebuffer size: %dx%d\n", client->width, client->height); + break; + } + +@@ -1606,6 +1666,8 @@ HandleRFBServerMessage(rfbClient* client) + char buffer[256]; + rfbClientLog("Unknown message type %d from VNC server\n",msg.type); + ReadFromRFBServer(client, buffer, 256); ++ client->ClientLogger(client, "Unknown message type %d from VNC server\n",msg.type); ++ ReadFromRFBServer(client, buffer, 256); + return FALSE; + } + } +diff --git a/libvncclient/sockets.c b/libvncclient/sockets.c +index 7f350e2..43823ce 100644 +--- a/libvncclient/sockets.c ++++ b/libvncclient/sockets.c +@@ -144,6 +144,7 @@ ReadFromRFBServer(rfbClient* client, char *out, unsigned int n) + } else { + if (errorMessageOnReadFailure) { + rfbClientLog("VNC server closed connection\n"); ++ client->ClientLogger(client, "VNC server closed connection\n"); + } + return FALSE; + } +@@ -176,6 +177,7 @@ ReadFromRFBServer(rfbClient* client, char *out, unsigned int n) + } else { + if (errorMessageOnReadFailure) { + rfbClientLog("VNC server closed connection\n"); ++ client->ClientLogger(client, "VNC server closed connection\n"); + } + return FALSE; + } +diff --git a/rfb/rfbclient.h b/rfb/rfbclient.h +index 975a66a..ee3bdc8 100644 +--- a/rfb/rfbclient.h ++++ b/rfb/rfbclient.h +@@ -115,6 +115,8 @@ typedef void (*BellProc)(struct _rfbClient* client); + typedef void (*GotCursorShapeProc)(struct _rfbClient* client, int xhot, int yhot, int width, int height, int bytesPerPixel); + typedef void (*GotCopyRectProc)(struct _rfbClient* client, int src_x, int src_y, int w, int h, int dest_x, int dest_y); + ++typedef void (*ClientLoggerProc)(struct _rfbClient* client, const char *format, ...); ++ + typedef struct _rfbClient { + uint8_t* frameBuffer; + int width, height; +@@ -237,6 +239,8 @@ typedef struct _rfbClient { + GotCursorShapeProc GotCursorShape; + GotCopyRectProc GotCopyRect; + ++ ClientLoggerProc ClientLogger; ++ + /* Which messages are supported by the server + * This is a *guess* for most servers. + * (If we can even detect the type of server) diff --git a/packages/vnc/libvncserver_0.9.1.bb b/packages/vnc/libvncserver_0.9.1.bb index c079fdeb15..a6027e7918 100644 --- a/packages/vnc/libvncserver_0.9.1.bb +++ b/packages/vnc/libvncserver_0.9.1.bb @@ -5,12 +5,13 @@ SECTION = "libs" PRIORITY = "optional" LICENSE = "GPLv2" DEPENDS = "zlib jpeg" -PR = "r0" +PR = "r1" DEFAULT_PREFERENCE = "-1" SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz \ - file://configure_ac.patch" + file://configure_ac.patch \ + file://clientlogger.patch;patch=1" S = "${WORKDIR}/LibVNCServer-${PV}" # => create libvncserver only @@ -20,6 +21,3 @@ inherit autotools do_stage() { autotools_stage_all } - - - diff --git a/packages/xfce/xfce4-panel.inc b/packages/xfce/xfce4-panel.inc index dbd1baef60..6ad71fcf82 100644 --- a/packages/xfce/xfce4-panel.inc +++ b/packages/xfce/xfce4-panel.inc @@ -20,6 +20,7 @@ do_install() { } PACKAGES += "${PN}-plugins ${PN}-mcs-plugins" -FILES_${PN}-plugins += "${libdir}/xfce4/panel-plugins/*.so*" +FILES_${PN}-plugins += "${libdir}/xfce4/panel-plugins/*.so* \ + ${datadir}/xfce4/panel-plugins/*.desktop" FILES_${PN}-mcs-plugins += "${libdir}/xfce4/mcs-plugins/" FILES_${PN}-dbg += "${libdir}/xfce4/mcs-plugins/.debug" diff --git a/packages/xfce/xfdesktop.inc b/packages/xfce/xfdesktop.inc index 50a4f488cc..bd5bb7223c 100644 --- a/packages/xfce/xfdesktop.inc +++ b/packages/xfce/xfdesktop.inc @@ -11,5 +11,7 @@ PACKAGES += "xfdesktop-backdrops ${PN}-mcs-plugins" FILES_xfdesktop-backdrops="${datadir}/xfce4/backdrops/*" FILES_${PN}-mcs-plugins += "${libdir}/xfce4/mcs-plugins/*.so" -FILES_${PN} += "${libdir}/xfce4/panel-plugins/*.so" +FILES_${PN} += "${libdir}/xfce4/panel-plugins/*.so \ + ${libdir}/xfce4/panel-plugins/xfce4-menu-plugin \ + ${datadir}/xfce4/panel-plugins/*.desktop" FILES_${PN}-dbg += "/usr/libexec/xfce4/panel-plugins/.debug" diff --git a/packages/xfce/xfwm4.inc b/packages/xfce/xfwm4.inc index e7e5bc1862..e443a841ae 100644 --- a/packages/xfce/xfwm4.inc +++ b/packages/xfce/xfwm4.inc @@ -14,10 +14,6 @@ RDEPENDS = "xfwm4-theme-default" EXTRA_OECONF += " --enable-startup-notification" -do_configure_append() { - sed -i s:/usr/include/xfce4::g mcs-plugin/Makefile -} - PACKAGES_DYNAMIC = "xfwm4-theme-*" python populate_packages_prepend () { diff --git a/packages/xkeyboard-config/.mtn2git_empty b/packages/xkeyboard-config/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/xkeyboard-config/.mtn2git_empty diff --git a/packages/xkeyboard-config/xkeyboard-config_1.3.bb b/packages/xkeyboard-config/xkeyboard-config_1.3.bb new file mode 100644 index 0000000000..f69e63c824 --- /dev/null +++ b/packages/xkeyboard-config/xkeyboard-config_1.3.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "Common X11 Keyboard layouts" +LICENSE = "MIT" +DEPENDS = "intltool xkbcomp-native" +RDEPENDS = "xkbcomp" + +SRC_URI = "http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-${PV}.tar.bz2" + +inherit autotools + +do_stage() { + autotools_stage_all +} + +do_install_append () { + install -d ${D}/usr/share/X11/xkb/compiled +} diff --git a/packages/zeroconf/files/zeroconf-limits.h.patch b/packages/zeroconf/files/zeroconf-limits.h.patch new file mode 100644 index 0000000000..46ba208fa5 --- /dev/null +++ b/packages/zeroconf/files/zeroconf-limits.h.patch @@ -0,0 +1,21 @@ +In newer glibc after this commit. + +http://sourceware.org/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/linux/bits/socket.h.diff?r1=1.60&r2=1.61&cvsroot=glibc + + +do not include limits.h indirectly through sockets.h so we would need to include limits.h explicitely. + +-Khem + +Index: zeroconf-0.9/zeroconf.c +=================================================================== +--- zeroconf-0.9.orig/zeroconf.c 2008-05-27 16:56:05.000000000 -0700 ++++ zeroconf-0.9/zeroconf.c 2008-05-27 16:56:20.000000000 -0700 +@@ -33,6 +33,7 @@ + #include <net/if_arp.h> + #include <sys/time.h> + #include <signal.h> ++#include <limits.h> + + #include "delay.h" + diff --git a/packages/zeroconf/zeroconf_0.9.bb b/packages/zeroconf/zeroconf_0.9.bb index c8f7ddfa3a..5c42237888 100644 --- a/packages/zeroconf/zeroconf_0.9.bb +++ b/packages/zeroconf/zeroconf_0.9.bb @@ -5,10 +5,11 @@ LICENSE = "GPL" SECTION = "net" PRIORITY = "optional" -PR = "r0" +PR = "r1" SRC_URI = "http://www.progsoc.org/~wildfire/zeroconf/download/${PN}-${PV}.tar.gz \ file://zeroconf-default \ + file://zeroconf-limits.h.patch;patch=1 \ file://debian-zeroconf" do_install () { diff --git a/packages/zlib/files/autotools.patch b/packages/zlib/files/autotools.patch index d1dc8dd8d4..166e7669ad 100644 --- a/packages/zlib/files/autotools.patch +++ b/packages/zlib/files/autotools.patch @@ -464,7 +464,7 @@ diff -Naur zlib-1.2.3/configure zlib-1.2.3new/configure diff -Naur zlib-1.2.3/configure.ac zlib-1.2.3new/configure.ac --- zlib-1.2.3/configure.ac 1970-01-01 01:00:00.000000000 +0100 +++ zlib-1.2.3new/configure.ac 2006-08-07 20:38:31.612402750 +0200 -@@ -0,0 +1,14 @@ +@@ -0,0 +1,17 @@ +AC_INIT(zlib,1.2.3) +AC_CONFIG_SRCDIR(adler32.c) +AM_INIT_AUTOMAKE(zlibs,1.2.3) @@ -476,13 +476,16 @@ diff -Naur zlib-1.2.3/configure.ac zlib-1.2.3new/configure.ac + +AC_HEADER_STDC + -+AC_CONFIG_FILES([Makefile]) ++AC_CONFIG_FILES([ ++Makefile ++zlib.pc ++]) + +AC_OUTPUT diff -Naur zlib-1.2.3/Makefile.am zlib-1.2.3new/Makefile.am --- zlib-1.2.3/Makefile.am 2006/10/14 05:35:40 1.1 +++ zlib-1.2.3new/Makefile.am 2006/10/14 05:36:49 -@@ -0,0 +1,8 @@ +@@ -0,0 +1,11 @@ +lib_LTLIBRARIES = libz.la + +libz_la_SOURCES = adler32.c compress.c crc32.c gzio.c uncompr.c deflate.c \ @@ -491,6 +494,9 @@ diff -Naur zlib-1.2.3/Makefile.am zlib-1.2.3new/Makefile.am +libz_la_LDFLAGS = -version-number 1:2:3 + +include_HEADERS = zconf.h zlib.h ++ ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = zlib.pc diff -Naur zlib-1.2.3/Makefile.in zlib-1.2.3new/Makefile.in --- zlib-1.2.3/Makefile.in 2005-07-18 04:25:21.000000000 +0200 +++ zlib-1.2.3new/Makefile.in 1970-01-01 01:00:00.000000000 +0100 @@ -649,3 +655,18 @@ diff -Naur zlib-1.2.3/Makefile.in zlib-1.2.3new/Makefile.in -trees.o: deflate.h zutil.h zlib.h zconf.h trees.h -uncompr.o: zlib.h zconf.h -zutil.o: zutil.h zlib.h zconf.h +diff -Naur zlib-1.2.3/zlib.pc.in zlib-1.2.3New/zlib.pc.in +--- zlib-1.2.3/zlib.pc.in 1970-01-01 01:00:00.000000000 +0100 ++++ zlib-1.2.3New/zlib.pc.in 2006-12-07 10:55:45.000000000 +0100 +@@ -0,0 +1,10 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: zlib ++Description: Standard (de)compression library ++Version: @VERSION@ ++Libs: -L${libdir} -lz ++Cflags: -I${includedir} + diff --git a/packages/zlib/zlib-sdk.inc b/packages/zlib/zlib-sdk.inc new file mode 100644 index 0000000000..a5901300ee --- /dev/null +++ b/packages/zlib/zlib-sdk.inc @@ -0,0 +1,9 @@ +ZLIB_EXTRA = "" +inherit sdk + +do_stage() { + install -d ${STAGING_INCDIR} + install -m 0644 zlib.h ${STAGING_INCDIR}/zlib.h + install -m 0644 zconf.h ${STAGING_INCDIR}/zconf.h + oe_libinstall -a -so libz ${STAGING_LIBDIR} +} diff --git a/packages/zlib/zlib-sdk_1.2.3.bb b/packages/zlib/zlib-sdk_1.2.3.bb new file mode 100644 index 0000000000..b6e15c3ae2 --- /dev/null +++ b/packages/zlib/zlib-sdk_1.2.3.bb @@ -0,0 +1,2 @@ +require zlib_${PV}.bb +require zlib-sdk.inc diff --git a/packages/zlib/zlib_1.2.3.bb b/packages/zlib/zlib_1.2.3.bb index 629ee83efb..87da072878 100644 --- a/packages/zlib/zlib_1.2.3.bb +++ b/packages/zlib/zlib_1.2.3.bb @@ -3,7 +3,7 @@ SECTION = "libs" PRIORITY = "required" HOMEPAGE = "http://www.gzip.org/zlib/" LICENSE = "zlib" -PR="r2" +PR="r3" SRC_URI = "http://www.zlib.net/zlib-1.2.3.tar.bz2 \ file://visibility.patch;patch=1 \ |