diff options
-rw-r--r-- | ipkg/ipkg-0.99.121/varargs.patch | 72 | ||||
-rw-r--r-- | ipkg/ipkg-native_0.99.121.oe | 7 | ||||
-rw-r--r-- | ipkg/ipkg_0.99.121.oe | 45 |
3 files changed, 124 insertions, 0 deletions
diff --git a/ipkg/ipkg-0.99.121/varargs.patch b/ipkg/ipkg-0.99.121/varargs.patch new file mode 100644 index 0000000000..cca6b2745d --- /dev/null +++ b/ipkg/ipkg-0.99.121/varargs.patch @@ -0,0 +1,72 @@ +--- C.old/sprintf_alloc.c 2004-01-13 15:51:48.000000000 -0700 ++++ C/sprintf_alloc.c 2004-05-20 16:47:25.240772176 -0700 +@@ -20,12 +20,12 @@ + + #include "sprintf_alloc.h" + +-static int vsprintf_alloc(char **str, const char *fmt, va_list ap); +- + int sprintf_alloc(char **str, const char *fmt, ...) + { + int ret; + va_list ap; ++ char *new_str; ++ int n, size = 100; + + if (!str) { + fprintf(stderr, "Null string pointer passed to sprintf_alloc\n"); +@@ -35,29 +35,27 @@ + fprintf(stderr, "Null fmt string passed to sprintf_alloc\n"); + return -1; + } +- va_start(ap, fmt); +- ret = vsprintf_alloc(str, fmt, ap); +- va_end(ap); + +- return ret; +-} ++ /* On x86_64 systems, any strings over 100 were segfaulting. ++ It seems that the ap needs to be reinitalized before every ++ use of the v*printf() functions. I pulled the functionality out ++ of vsprintf_alloc and combined it all here instead. ++ */ ++ ++ ++ /* ripped more or less straight out of PRINTF(3) */ ++ ++ if ((new_str = malloc(size)) == NULL) ++ return -1; + +-/* ripped more or less straight out of PRINTF(3) */ +-static int vsprintf_alloc(char **str, const char *fmt, va_list ap) +-{ +- char *new_str; +- /* Guess we need no more than 100 bytes. */ +- int n, size = 100; +- +- if ((new_str = malloc (size)) == NULL) +- return -1; + *str = new_str; +- while (1) { +- /* Try to print in the allocated space. */ +- n = vsnprintf (new_str, size, fmt, ap); +- /* If that worked, return the size. */ +- if (n > -1 && n < size) +- return n; ++ while(1) { ++ va_start(ap, fmt); ++ n = vsnprintf (new_str, size, fmt, ap); ++ va_end(ap); ++ /* If that worked, return the size. */ ++ if (n > -1 && n < size) ++ return n; + /* Else try again with more space. */ + if (n > -1) /* glibc 2.1 */ + size = n+1; /* precisely what is needed */ +@@ -71,4 +69,6 @@ + } + *str = new_str; + } ++ ++ return -1; /* Just to be correct - it probably won't get here */ + } diff --git a/ipkg/ipkg-native_0.99.121.oe b/ipkg/ipkg-native_0.99.121.oe new file mode 100644 index 0000000000..7f3daff942 --- /dev/null +++ b/ipkg/ipkg-native_0.99.121.oe @@ -0,0 +1,7 @@ +include ipkg_${PV}.oe +inherit native + +DEPENDS = "patcher-native libtool-native automake-native" +FILESDIR = "${@os.path.dirname(oe.data.getVar('FILE',d,1))}/ipkg-${PV}" +PROVIDES = "" + diff --git a/ipkg/ipkg_0.99.121.oe b/ipkg/ipkg_0.99.121.oe new file mode 100644 index 0000000000..335dc4e20d --- /dev/null +++ b/ipkg/ipkg_0.99.121.oe @@ -0,0 +1,45 @@ +DESCRIPTION = "Itsy Package Manager" +DESCRIPTION_libipkg = "Itsy Package Manager Library" +LICENSE = "GPL" +PROVIDES = "virtual/ipkg libipkg" +DEPENDS = "virtual/libc" +PR = "r1" + +PACKAGES =+ "libipkg-dev libipkg " +FILES_libipkg-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/*.so" +FILES_libipkg = "${libdir}" +AUTO_LIBNAME_PKGS = "libipkg" + +SRC_URI = "cvs://anoncvs:anoncvs@cvs.handhelds.org/cvs;module=familiar/dist/ipkg;tag=${@'V' + oe.data.getVar('PV',d,1).replace('.', '-')} \ + file://varargs.patch;patch=1" +S = "${WORKDIR}/ipkg/C" + +inherit autotools + +pkg_postinst_ipkg () { +#!/bin/sh +if [ "x$D" != "x" ]; then + install -d ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d + # this needs to happen after S35mountall so that /tmp is available + echo -e "#!/bin/sh\nipkg-cl configure\nrm -f \$0" > ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S36configure + chmod 755 ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S36configure +fi + +update-alternatives --install /usr/bin/ipkg ipkg /usr/bin/ipkg-cl 100 +} + +pkg_postrm_ipkg () { +#!/bin/sh +update-alternatives --remove ipkg /usr/bin/ipkg-cl +} + +do_stage() { + oe_libinstall -so libipkg ${STAGING_LIBDIR} + install -d ${STAGING_INCDIR}/replace/ + install -m 0644 replace/replace.h ${STAGING_INCDIR}/replace/ + install -d ${STAGING_INCDIR}/libipkg/ + for f in *.h + do + install -m 0644 $f ${STAGING_INCDIR}/libipkg/ + done +} |