summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ipkg/ipkg-0.99.121/varargs.patch72
-rw-r--r--ipkg/ipkg-native_0.99.121.oe7
-rw-r--r--ipkg/ipkg_0.99.121.oe45
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
+}