summaryrefslogtreecommitdiffstats
path: root/main/uclibc++
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2009-08-20 14:17:19 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2009-08-20 16:58:04 +0000
commit32d225be6fb18e01f33546c64f3ba126fd3e9410 (patch)
tree78923a0a6e0281824ee7c88cc01f4848399cb8a4 /main/uclibc++
parent1444ddae645e1206190da7319a00413ffafd222b (diff)
downloadaports-32d225be6fb18e01f33546c64f3ba126fd3e9410.tar.bz2
aports-32d225be6fb18e01f33546c64f3ba126fd3e9410.tar.xz
main/uclibc++: import patches from openwrt
https://dev.openwrt.org/browser/packages/libs/uclibc%2B%2B/patches
Diffstat (limited to 'main/uclibc++')
-rw-r--r--main/uclibc++/001-path_to_make.patch30
-rw-r--r--main/uclibc++/002-path_to_bash.patch12
-rw-r--r--main/uclibc++/003-cp_command.patch19
-rw-r--r--main/uclibc++/004-ccache_fixes.patch24
-rw-r--r--main/uclibc++/005-wrapper.patch12
-rw-r--r--main/uclibc++/006-eabi_fix.patch42
-rw-r--r--main/uclibc++/007-numeric_limits.patch66
-rw-r--r--main/uclibc++/008-integer_width.patch314
-rw-r--r--main/uclibc++/900-dependent_exception.patch68
-rw-r--r--main/uclibc++/APKBUILD20
10 files changed, 606 insertions, 1 deletions
diff --git a/main/uclibc++/001-path_to_make.patch b/main/uclibc++/001-path_to_make.patch
new file mode 100644
index 00000000..840dac32
--- /dev/null
+++ b/main/uclibc++/001-path_to_make.patch
@@ -0,0 +1,30 @@
+diff -ur old/Makefile dev/Makefile
+--- old/Makefile Sat Oct 14 17:49:55 2006
++++ dev/Makefile Sat Oct 14 17:50:18 2006
+@@ -1,4 +1,3 @@
+-MAKE = make
+ SUBDIRS = bin include src
+
+ # User defines:
+@@ -43,10 +42,10 @@
+ #Menu configuration system
+
+ extra/config/conf:
+- make -C extra/config conf
++ $(MAKE) -C extra/config conf
+
+ extra/config/mconf:
+- make -C extra/config ncurses mconf
++ $(MAKE) -C extra/config ncurses mconf
+
+ menuconfig: extra/config/mconf
+ @./extra/config/mconf extra/Configs/Config.in
+@@ -71,7 +70,7 @@
+
+ include/system_configuration.h: .config
+ @if [ ! -x ./extra/config/conf ] ; then \
+- make -C extra/config conf; \
++ $(MAKE) -C extra/config conf; \
+ fi;
+ @./extra/config/conf -o extra/Configs/Config.in
+
diff --git a/main/uclibc++/002-path_to_bash.patch b/main/uclibc++/002-path_to_bash.patch
new file mode 100644
index 00000000..46b793b6
--- /dev/null
+++ b/main/uclibc++/002-path_to_bash.patch
@@ -0,0 +1,12 @@
+diff -ur old/bin/Makefile dev/bin/Makefile
+--- old/bin/Makefile Sat Oct 14 17:49:54 2006
++++ dev/bin/Makefile Sat Oct 14 17:57:33 2006
+@@ -13,7 +13,7 @@
+ $(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR)
+
+ $(WRAPPER):
+- echo "#!/bin/bash" > $(WRAPPER)
++ echo "#!/usr/bin/env bash" > $(WRAPPER)
+ echo "" >> $(WRAPPER)
+ echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $(WRAPPER)
+ echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $(WRAPPER)
diff --git a/main/uclibc++/003-cp_command.patch b/main/uclibc++/003-cp_command.patch
new file mode 100644
index 00000000..53d0ed7a
--- /dev/null
+++ b/main/uclibc++/003-cp_command.patch
@@ -0,0 +1,19 @@
+diff -ur old/src/Makefile dev/src/Makefile
+--- old/src/Makefile Sat Oct 14 17:49:54 2006
++++ dev/src/Makefile Sat Oct 14 18:02:30 2006
+@@ -25,12 +25,14 @@
+
+ all: libgcc_eh libsupc $(EXOBJS) $(ALLBIN)
+
++CP = cp -fPR
++
+ install:
+ $(INSTALL) -d $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
+ ifneq ($(BUILD_ONLY_STATIC_LIB),y)
+ $(INSTALL) -m 755 $(SHARED_FULLNAME) \
+ $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
+- cp -fa $(SHARED_MAJORNAME) $(LIBNAME).so $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
++ $(CP) $(SHARED_MAJORNAME) $(LIBNAME).so $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
+ endif
+ ifeq ($(BUILD_STATIC_LIB),y)
+ $(INSTALL) -m 644 $(LIBNAME).a $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
diff --git a/main/uclibc++/004-ccache_fixes.patch b/main/uclibc++/004-ccache_fixes.patch
new file mode 100644
index 00000000..10ceb792
--- /dev/null
+++ b/main/uclibc++/004-ccache_fixes.patch
@@ -0,0 +1,24 @@
+diff -ruN uClibc++-0.2.2-old/src/abi/libgcc_eh/Makefile uClibc++-0.2.2-new/src/abi/libgcc_eh/Makefile
+--- uClibc++-0.2.2-old/src/abi/libgcc_eh/Makefile 2007-06-04 00:51:13.000000000 +0200
++++ uClibc++-0.2.2-new/src/abi/libgcc_eh/Makefile 2007-09-03 21:51:07.000000000 +0200
+@@ -16,7 +16,7 @@
+ #
+ #else
+ # echo Binary
+- $(AR) x $(shell CC=$(CC) $(TOPDIR)/scripts/find_libgcc_eh.sh)
++ $(AR) x $(shell CC="$(CC)" $(TOPDIR)/scripts/find_libgcc_eh.sh)
+ #endif
+ #endif
+
+diff -ruN uClibc++-0.2.2-old/src/abi/libsupc/Makefile uClibc++-0.2.2-new/src/abi/libsupc/Makefile
+--- uClibc++-0.2.2-old/src/abi/libsupc/Makefile 2007-06-04 00:51:13.000000000 +0200
++++ uClibc++-0.2.2-new/src/abi/libsupc/Makefile 2007-09-03 21:51:17.000000000 +0200
+@@ -14,7 +14,7 @@
+ #
+ #else
+ # echo Binary
+- $(AR) x $(shell CC=$(CC) $(TOPDIR)/scripts/find_libsupc.sh)
++ $(AR) x $(shell CC="$(CC)" $(TOPDIR)/scripts/find_libsupc.sh)
+ $(RM) -f new_op*.o del_op*.o pure.o new_handler.o eh_alloc.o eh_globals.o
+ #
+ #endif
diff --git a/main/uclibc++/005-wrapper.patch b/main/uclibc++/005-wrapper.patch
new file mode 100644
index 00000000..b526a901
--- /dev/null
+++ b/main/uclibc++/005-wrapper.patch
@@ -0,0 +1,12 @@
+diff -ruN uClibc++-0.2.2-old/bin/Makefile uClibc++-0.2.2-new/bin/Makefile
+--- uClibc++-0.2.2-old/bin/Makefile 2007-09-23 13:46:10.000000000 +0200
++++ uClibc++-0.2.2-new/bin/Makefile 2007-09-23 13:47:03.000000000 +0200
+@@ -25,7 +25,7 @@
+ echo 'while [ -n "$$1" ]' >> $(WRAPPER)
+ echo 'do' >> $(WRAPPER)
+ echo ' WRAPPER_OPTIONS="$$WRAPPER_OPTIONS $$1"' >> $(WRAPPER)
+- echo ' if [ "$$1" = "-c" -o "$$1" = "-E" -o "$$1" = "-S" ]' >> $(WRAPPER)
++ echo ' if [ "$$1" = "-c" -o "$$1" = "-E" -o "$$1" = "-S" -o "$$1" = "-MF" ]' >> $(WRAPPER)
+ echo ' then' >> $(WRAPPER)
+ echo ' WRAPPER_INCLIB="N"' >> $(WRAPPER)
+ echo ' fi' >> $(WRAPPER)
diff --git a/main/uclibc++/006-eabi_fix.patch b/main/uclibc++/006-eabi_fix.patch
new file mode 100644
index 00000000..bc970a71
--- /dev/null
+++ b/main/uclibc++/006-eabi_fix.patch
@@ -0,0 +1,42 @@
+Index: uClibc++-0.2.2/include/typeinfo
+===================================================================
+--- uClibc++-0.2.2.orig/include/typeinfo 2008-02-13 00:37:04.000000000 +0100
++++ uClibc++-0.2.2/include/typeinfo 2008-02-13 00:37:34.000000000 +0100
+@@ -44,6 +44,7 @@
+ class __class_type_info;
+ } // namespace __cxxabiv1
+
++#ifndef __GXX_MERGED_TYPEINFO_NAMES
+ #if !__GXX_WEAK__
+ // If weak symbols are not supported, typeinfo names are not merged.
+ #define __GXX_MERGED_TYPEINFO_NAMES 0
+@@ -51,6 +52,7 @@
+ // On platforms that support weak symbols, typeinfo names are merged.
+ #define __GXX_MERGED_TYPEINFO_NAMES 1
+ #endif
++#endif
+
+ namespace std
+ {
+Index: uClibc++-0.2.2/include/unwind-cxx.h
+===================================================================
+--- uClibc++-0.2.2.orig/include/unwind-cxx.h 2008-02-13 00:38:04.000000000 +0100
++++ uClibc++-0.2.2/include/unwind-cxx.h 2008-02-13 00:40:32.000000000 +0100
+@@ -135,6 +135,7 @@
+
+ // This is the exception class we report -- "GNUCC++\0".
+ const _Unwind_Exception_Class __gxx_exception_class
++#ifndef __ARM_EABI_UNWINDER__
+ = ((((((((_Unwind_Exception_Class) 'G'
+ << 8 | (_Unwind_Exception_Class) 'N')
+ << 8 | (_Unwind_Exception_Class) 'U')
+@@ -143,6 +144,9 @@
+ << 8 | (_Unwind_Exception_Class) '+')
+ << 8 | (_Unwind_Exception_Class) '+')
+ << 8 | (_Unwind_Exception_Class) '\0');
++#else
++= "GNUC++";
++#endif
+
+ // GNU C++ personality routine, Version 0.
+ extern "C" _Unwind_Reason_Code __gxx_personality_v0
diff --git a/main/uclibc++/007-numeric_limits.patch b/main/uclibc++/007-numeric_limits.patch
new file mode 100644
index 00000000..1ed7d6c6
--- /dev/null
+++ b/main/uclibc++/007-numeric_limits.patch
@@ -0,0 +1,66 @@
+Index: uClibc++-0.2.2/include/limits
+===================================================================
+--- uClibc++-0.2.2/include/limits (revision 1877)
++++ uClibc++-0.2.2/include/limits (revision 1878)
+@@ -143,6 +143,53 @@
+ static T signaling_NaN();
+ };
+
++template <> class numeric_limits<bool> {
++public:
++ typedef bool T;
++ // General -- meaningful for all specializations.
++ static const bool is_specialized = true;
++ static T min(){
++ return false;
++ }
++ static T max(){
++ return true;
++ }
++ static const int radix = 2;
++ static const int digits = 1;
++ static const int digits10 = 0;
++ static const bool is_signed = false;
++ static const bool is_integer = true;
++ static const bool is_exact = true;
++ static const bool traps = false;
++ static const bool is_modulo = false;
++ static const bool is_bounded = true;
++
++ // Floating point specific.
++
++ static T epsilon(){
++ return 0;
++ }
++ static T round_error(){
++ return 0;
++ }
++ static const int min_exponent10 = 0;
++ static const int max_exponent10 = 0;
++ static const int min_exponent = 0;
++
++ static const int max_exponent = 0;
++ static const bool has_infinity = false;
++ static const bool has_quiet_NaN = false;
++ static const bool has_signaling_NaN = false;
++ static const bool is_iec559 = false;
++ static const bool has_denorm = false;
++ static const bool tinyness_before = false;
++ static const float_round_style round_style = round_indeterminate;
++ static T denorm_min();
++ static T infinity();
++ static T quiet_NaN();
++ static T signaling_NaN();
++};
++
+ template <> class numeric_limits<unsigned char> {
+ public:
+ typedef unsigned char T;
+@@ -567,6 +614,7 @@
+ };
+
+ template <> class numeric_limits<double> {
++public:
+ typedef double numeric_type;
+
+ static const bool is_specialized = true;
diff --git a/main/uclibc++/008-integer_width.patch b/main/uclibc++/008-integer_width.patch
new file mode 100644
index 00000000..c467e601
--- /dev/null
+++ b/main/uclibc++/008-integer_width.patch
@@ -0,0 +1,314 @@
+Index: uClibc++-0.2.2/include/ostream
+===================================================================
+--- uClibc++-0.2.2/include/ostream (revision 708)
++++ uClibc++-0.2.2/include/ostream (revision 709)
+@@ -129,6 +129,18 @@
+ return *this;
+ }
+
++ _UCXXEXPORT void printout(const char_type* s, streamsize n)
++ {
++ int extra = ios::width() - n;
++ if ((ios::flags()&ios::adjustfield) == ios::right)
++ while (extra-- > 0)
++ put(ios::fill());
++ write(s, n);
++ if ((ios::flags()&ios::adjustfield) == ios::left)
++ while (extra-- > 0)
++ put(ios::fill());
++ }
++
+ protected:
+ basic_ostream(const basic_ostream<charT,traits> &){ }
+ basic_ostream<charT,traits> & operator=(const basic_ostream<charT,traits> &){ return *this; }
+@@ -142,15 +154,15 @@
+ sentry s(*this);
+ if( basic_ios<charT,traits>::flags() & ios_base::boolalpha){
+ if(n){
+- write("true", 4);
++ printout("true", 4);
+ }else{
+- write("false", 5);
++ printout("false", 5);
+ }
+ }else{
+ if(n){
+- write("1", 1);
++ printout("1", 1);
+ }else{
+- write("0", 1);
++ printout("0", 1);
+ }
+ }
+ if(basic_ios<charT,traits>::flags() & ios_base::unitbuf){
+@@ -219,7 +231,7 @@
+ template <class charT, class traits> _UCXXEXPORT basic_ostream<charT,traits>& basic_ostream<charT, traits>::operator<<(void* p){
+ sentry s(*this);
+ char buffer[20];
+- write(buffer, snprintf(buffer, 20, "%p", p) );
++ printout(buffer, snprintf(buffer, 20, "%p", p) );
+ if(basic_ios<charT,traits>::flags() & ios_base::unitbuf){
+ flush();
+ }
+@@ -356,7 +368,7 @@
+ operator<<(basic_ostream<charT,traits>& out, const charT* c)
+ {
+ typename basic_ostream<charT,traits>::sentry s(out);
+- out.write(c, traits::length(c) );
++ out.printout(c, traits::length(c) );
+ return out;
+ }
+
+@@ -364,7 +376,7 @@
+ operator<<(basic_ostream<charT,traits>& out, const char* c)
+ {
+ typename basic_ostream<charT,traits>::sentry s(out);
+- out.write(c, char_traits<char>::length(c) );
++ out.printout(c, char_traits<char>::length(c) );
+ return out;
+ }
+
+@@ -373,7 +385,7 @@
+ operator<<(basic_ostream<char,traits>& out, const char* c)
+ {
+ typename basic_ostream<char,traits>::sentry s(out);
+- out.write(c, traits::length(c));
++ out.printout(c, traits::length(c));
+ return out;
+ }
+
+@@ -389,7 +401,7 @@
+ temp[i] = out.widen(c[i]);
+ }
+
+- out.write(temp, numChars);
++ out.printout(temp, numChars);
+ return out;
+ }
+ #endif
+@@ -399,7 +411,7 @@
+ operator<<(basic_ostream<char,traits>& out, const signed char* c)
+ {
+ typename basic_ostream<char,traits>::sentry s(out);
+- out.write(reinterpret_cast<const char *>(c), traits::length( reinterpret_cast<const char *>(c)));
++ out.printout(reinterpret_cast<const char *>(c), traits::length( reinterpret_cast<const char *>(c)));
+ return out;
+ }
+
+@@ -407,7 +419,7 @@
+ operator<<(basic_ostream<char,traits>& out, const unsigned char* c)
+ {
+ typename basic_ostream<char,traits>::sentry s(out);
+- out.write(reinterpret_cast<const char *>(c), traits::length( reinterpret_cast<const char *>(c)));
++ out.printout(reinterpret_cast<const char *>(c), traits::length( reinterpret_cast<const char *>(c)));
+ return out;
+ }
+
+Index: uClibc++-0.2.2/include/ostream_helpers
+===================================================================
+--- uClibc++-0.2.2/include/ostream_helpers (revision 708)
++++ uClibc++-0.2.2/include/ostream_helpers (revision 709)
+@@ -88,7 +88,7 @@
+ }
+ }
+
+- stream.write(buffer, snprintf(buffer, 20, formatString, n) );
++ stream.printout(buffer, snprintf(buffer, 20, formatString, n) );
+
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+@@ -135,7 +135,7 @@
+ }
+ }
+
+- stream.write(buffer, snprintf(buffer, 20, formatString, n));
++ stream.printout(buffer, snprintf(buffer, 20, formatString, n));
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+ }
+@@ -182,7 +182,7 @@
+ }
+ }
+
+- stream.write(buffer, snprintf(buffer, 27, formatString, n) );
++ stream.printout(buffer, snprintf(buffer, 27, formatString, n) );
+
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+@@ -228,7 +228,7 @@
+ }
+ }
+
+- stream.write(buffer, snprintf(buffer, 27, formatString, n) );
++ stream.printout(buffer, snprintf(buffer, 27, formatString, n) );
+
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+@@ -256,7 +256,7 @@
+ } else {
+ length = snprintf(buffer, 32, "%*.*g",static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
+ }
+- stream.write(buffer, length);
++ stream.printout(buffer, length);
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+ }
+@@ -280,7 +280,7 @@
+ } else {
+ length = snprintf(buffer, 32, "%*.*Lg", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
+ }
+- stream.write(buffer, length);
++ stream.printout(buffer, length);
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+ }
+@@ -295,25 +295,25 @@
+ {
+ wchar_t buffer[20];
+ if( stream.flags() & ios_base::dec){
+- stream.write(buffer, swprintf(buffer, 20, L"%ld", n));
++ stream.printout(buffer, swprintf(buffer, 20, L"%ld", n));
+ }else if( stream.flags() & ios_base::oct){
+ if( stream.flags() & ios_base::showbase){
+- stream.write(buffer, swprintf(buffer, 20, L"%#lo", n));
++ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n));
+ }else{
+- stream.write(buffer, swprintf(buffer, 20, L"%lo", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) );
+ }
+ }else if (stream.flags() & ios_base::hex){
+ if(stream.flags() & ios_base::showbase){
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 20, L"%#lX", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 20, L"%#lx", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) );
+ }
+ }else{
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 20, L"%lX", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 20, L"%lx", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) );
+ }
+ }
+ }
+@@ -329,25 +329,25 @@
+ {
+ wchar_t buffer[20];
+ if( stream.flags() & ios_base::dec){
+- stream.write(buffer, swprintf(buffer, 20, L"%lu", n));
++ stream.printout(buffer, swprintf(buffer, 20, L"%lu", n));
+ }else if( stream.flags() & ios_base::oct){
+ if( stream.flags() & ios_base::showbase){
+- stream.write(buffer, swprintf(buffer, 20, L"%#lo", n));
++ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n));
+ }else{
+- stream.write(buffer, swprintf(buffer, 20, L"%lo", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) );
+ }
+ }else if (stream.flags() & ios_base::hex){
+ if(stream.flags() & ios_base::showbase){
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 20, L"%#lX", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 20, L"%#lx", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) );
+ }
+ }else{
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 20, L"%lX", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 20, L"%lx", n) );
++ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) );
+ }
+ }
+ }
+@@ -365,25 +365,25 @@
+ {
+ wchar_t buffer[28];
+ if( stream.flags() & ios_base::dec){
+- stream.write(buffer, swprintf(buffer, 27, L"%lld", n));
++ stream.printout(buffer, swprintf(buffer, 27, L"%lld", n));
+ }else if( stream.flags() & ios_base::oct){
+ if( stream.flags() & ios_base::showbase){
+- stream.write(buffer, swprintf(buffer, 27, L"%#llo", n));
++ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n));
+ }else{
+- stream.write(buffer, swprintf(buffer, 27, L"%llo", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) );
+ }
+ }else if (stream.flags() & ios_base::hex){
+ if(stream.flags() & ios_base::showbase){
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 27, L"%#llX", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 27, L"%#llx", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) );
+ }
+ }else{
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 27, L"%llX", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 27, L"%llx", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) );
+ }
+ }
+ }
+@@ -399,25 +399,25 @@
+ {
+ wchar_t buffer[28];
+ if( stream.flags() & ios_base::dec){
+- stream.write(buffer, swprintf(buffer, 27, L"%llu", n));
++ stream.printout(buffer, swprintf(buffer, 27, L"%llu", n));
+ }else if( stream.flags() & ios_base::oct){
+ if( stream.flags() & ios_base::showbase){
+- stream.write(buffer, swprintf(buffer, 27, L"%#llo", n));
++ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n));
+ }else{
+- stream.write(buffer, swprintf(buffer, 27, L"%llo", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) );
+ }
+ }else if (stream.flags() & ios_base::hex){
+ if(stream.flags() & ios_base::showbase){
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 27, L"%#llX", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 27, L"%#llx", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) );
+ }
+ }else{
+ if(stream.flags() & ios_base::uppercase){
+- stream.write(buffer, swprintf(buffer, 27, L"%llX", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) );
+ }else{
+- stream.write(buffer, swprintf(buffer, 27, L"%llx", n) );
++ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) );
+ }
+ }
+ }
+@@ -447,7 +447,7 @@
+ } else {
+ swprintf(format_string, 32, L"%%%u.%ug", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+- stream.write(buffer, swprintf(buffer, 32, format_string, f) );
++ stream.printout(buffer, swprintf(buffer, 32, format_string, f) );
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+ }
+@@ -471,7 +471,7 @@
+ } else {
+ swprintf(format_string, 32, L"%%%u.%uLg", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+- stream.write(buffer, swprintf(buffer, 32, format_string, f) );
++ stream.printout(buffer, swprintf(buffer, 32, format_string, f) );
+ if(stream.flags() & ios_base::unitbuf){
+ stream.flush();
+ }
diff --git a/main/uclibc++/900-dependent_exception.patch b/main/uclibc++/900-dependent_exception.patch
new file mode 100644
index 00000000..3a5cb7db
--- /dev/null
+++ b/main/uclibc++/900-dependent_exception.patch
@@ -0,0 +1,68 @@
+--- a/src/eh_alloc.cpp 2007-06-03 23:51:13.000000000 +0100
++++ b/src/eh_alloc.cpp 2009-07-13 09:42:39.000000000 +0100
+@@ -42,4 +42,21 @@
+ free( (char *)(vptr) - sizeof(__cxa_exception) );
+ }
+
++#if __GNUC__ * 100 + __GNUC_MINOR__ >= 404
++extern "C" __cxa_dependent_exception* __cxa_allocate_dependent_exception() throw(){
++ __cxa_dependent_exception *retval;
++
++ retval = static_cast<__cxa_dependent_exception*>(malloc(sizeof(__cxa_dependent_exception)));
++ if(0 == retval){
++ std::terminate();
++ }
++ memset (retval, 0, sizeof(__cxa_dependent_exception));
++ return retval ;
++}
++
++extern "C" void __cxa_free_dependent_exception(__cxa_dependent_exception *vptr) throw(){
++ free( vptr );
++}
++#endif
++
+ }
+--- a/include/unwind-cxx.h 2009-07-13 10:01:11.000000000 +0100
++++ b/include/unwind-cxx.h 2009-07-13 10:14:08.000000000 +0100
+@@ -79,6 +79,41 @@
+ _Unwind_Exception unwindHeader;
+ };
+
++#if __GNUC__ * 100 + __GNUC_MINOR__ >= 404
++// A dependent C++ exception object consists of a wrapper around an unwind
++// object header with additional C++ specific information, containing a pointer
++// to a primary exception object.
++
++struct __cxa_dependent_exception
++{
++ // The primary exception this thing depends on.
++ void *primaryException;
++
++ // The C++ standard has entertaining rules wrt calling set_terminate
++ // and set_unexpected in the middle of the exception cleanup process.
++ std::unexpected_handler unexpectedHandler;
++ std::terminate_handler terminateHandler;
++
++ // The caught exception stack threads through here.
++ __cxa_exception *nextException;
++
++ // How many nested handlers have caught this exception. A negated
++ // value is a signal that this object has been rethrown.
++ int handlerCount;
++
++ // Cache parsed handler data from the personality routine Phase 1
++ // for Phase 2 and __cxa_call_unexpected.
++ int handlerSwitchValue;
++ const unsigned char *actionRecord;
++ const unsigned char *languageSpecificData;
++ _Unwind_Ptr catchTemp;
++ void *adjustedPtr;
++
++ // The generic exception header. Must be last.
++ _Unwind_Exception unwindHeader;
++};
++
++#endif
+ // Each thread in a C++ program has access to a __cxa_eh_globals object.
+ struct __cxa_eh_globals
+ {
diff --git a/main/uclibc++/APKBUILD b/main/uclibc++/APKBUILD
index e6545e48..d187f7cc 100644
--- a/main/uclibc++/APKBUILD
+++ b/main/uclibc++/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=uclibc++
pkgver=0.2.2
-pkgrel=3
+pkgrel=4
pkgdesc="Embedded C++ library"
url="http://cxx.uclibc.org/"
license='GPL-2'
@@ -9,6 +9,15 @@ depends=
makedepends=
subpackages="$pkgname-dev"
source="http://cxx.uclibc.org/src/uClibc++-$pkgver.tar.bz2
+ 001-path_to_make.patch
+ 002-path_to_bash.patch
+ 003-cp_command.patch
+ 004-ccache_fixes.patch
+ 005-wrapper.patch
+ 006-eabi_fix.patch
+ 007-numeric_limits.patch
+ 008-integer_width.patch
+ 900-dependent_exception.patch
associative_base.patch
uclibc++-gcc-4.3.patch
uclibc++config
@@ -42,6 +51,15 @@ dev() {
md5sums="1ceef3209cca88be8f1bd9de99735954 uClibc++-0.2.2.tar.bz2
+ce1016fb83c23c83486f35f4cd1b64ab 001-path_to_make.patch
+42954542f9f3c5dd6febb73d2db7f1d0 002-path_to_bash.patch
+8068b394de053ed94a742d1ed9657b99 003-cp_command.patch
+363dc1cd86052f44212c2f3ac15926da 004-ccache_fixes.patch
+3689f8d77984ca66554e14cacbeb796c 005-wrapper.patch
+99e625748c0e6d5fc7cef8484cbac587 006-eabi_fix.patch
+d335b8f1c9d4682a220a082a371277e4 007-numeric_limits.patch
+2c431d4ad46a244f2f50baf40b85f7d2 008-integer_width.patch
+4e9c416c2a107f7d814f938fa57901a5 900-dependent_exception.patch
5689baa3f3bf8488c0a5d27a690d30fa associative_base.patch
4c7b499e4697225378acef25f6364e9b uclibc++-gcc-4.3.patch
2f573c1e2a0c7a320ea4685cc3ce9e2a uclibc++config"