diff -urN STLport-4.5.3/Makefile STLport-4.5.3-devel/Makefile --- STLport-4.5.3/Makefile Wed Dec 31 17:00:00 1969 +++ STLport-4.5.3-devel/Makefile Tue Jan 7 15:28:08 2003 @@ -0,0 +1,44 @@ +# Makefile to compile stlport with uClibc +# +# Copyright (C) 2002 Erik Andersen +# +# 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 + +ARCH:=i386 +PREFIX:=/usr/$(ARCH)-linux-uclibc +CROSS:= $(PREFIX)/../bin/$(ARCH)-linux-uclibc- +CC=$(CROSS)gcc +CXX=$(CROSS)g++ +AR = $(CROSS)ar +STRIP = $(CROSS)strip --remove-section=.comment --remove-section=.note --strip-unneeded +.EXPORT_ALL_VARIABLES: + +all: + rm -f lib/lib* + make -C src -f gcc-uClibc.mak all + (cd lib; rm -f libstdc++_debug.so; \ + ln -fs libstdc++.so.4.5 libstdc++.so; \ + ln -fs libstdc++.so.4.5 libstdc++.so.0;) + $(STRIP) lib/libstdc++.so.4.5; + +clean: + make -C src -f gcc-uClibc.mak clean + rm -rf lib/* + +install: + (cd lib; \ + cp -a libstdc++.a $(PREFIX)/lib; \ + cp -a libstdc++.so libstdc++.so.0 libstdc++.so.4.5 $(PREFIX)/lib;) + cp -a stlport $(PREFIX)/include/c++ diff -urN STLport-4.5.3/src/dll_main.cpp STLport-4.5.3-devel/src/dll_main.cpp --- STLport-4.5.3/src/dll_main.cpp Sat Feb 2 16:11:56 2002 +++ STLport-4.5.3-devel/src/dll_main.cpp Tue Jan 7 15:28:08 2003 @@ -52,7 +52,7 @@ # include # endif -# if defined (_STLP_UNIX) +# if defined (_STLP_UNIX) && defined (_STLP_PTHREADS) && ! defined (_STLP_USE_UCLIBC) # define _STLP_HAS_PERTHREAD_ALLOCATOR # include # endif diff -urN STLport-4.5.3/src/gcc-uClibc.mak STLport-4.5.3-devel/src/gcc-uClibc.mak --- STLport-4.5.3/src/gcc-uClibc.mak Wed Dec 31 17:00:00 1969 +++ STLport-4.5.3-devel/src/gcc-uClibc.mak Tue Jan 7 15:28:08 2003 @@ -0,0 +1,61 @@ +# +# Basename for libraries +# +LIB_BASENAME:=libstdc++ +LIB_SHAREDNAME:=$(LIB_BASENAME).so +LIB_SHAREDNAME_FULL:=$(LIB_SHAREDNAME).0 + +# +# guts for common stuff +# +# +LINK:=$(AR) -cr +#DYN_LINK:=$(CC) -fno-exceptions -lpthread -lm -shared -Wl,-soname=$(LIB_SHAREDNAME_FULL) -o +DYN_LINK:=$(CC) -fno-exceptions -shared -Wl,-soname=$(LIB_SHAREDNAME_FULL) -o + +OBJEXT=o +DYNEXT=so +STEXT=a +RM=rm -rf +PATH_SEP=/ +MKDIR=mkdir -p +COMP=GCC$(ARCH) +INSTALL_STEP = install_unix + +all: release_dynamic release_static +#all: all_dynamic all_static symbolic_links + +include common_macros.mak +STLDEBUG_NAME:=$(LIB_BASENAME).debug + +# Lets disable exception support, since this saves over 200k... +DEFINE_FLAGS:= -fno-exceptions +#DEFINE_FLAGS:= -D_STLP_NO_EXCEPTIONS -fno-exceptions -DSTL_NO_EXCEPTIONS + +#DEFINE_FLAGS+= -D_STLP_USE_UCLIBC -D_STLP_NO_WCHAR_T \ +# -DUSE_SPRINTF_INSTEAD -D_ISOC99_SOURCE + +WARNING_FLAGS:= -W -Wno-sign-compare -Wno-unused -Wno-uninitialized +INCLUDE_FLAGS = -I${STLPORT_DIR} +CXXFLAGS_COMMON = $(WARNING_FLAGS) $(DEFINE_FLAGS) $(INCLUDE_FLAGS) + +CXXFLAGS_RELEASE_static = $(CXXFLAGS_COMMON) -Os +CXXFLAGS_RELEASE_dynamic = $(CXXFLAGS_COMMON) -Os -fPIC + +CXXFLAGS_DEBUG_static = $(CXXFLAGS_COMMON) -O -g +CXXFLAGS_DEBUG_dynamic = $(CXXFLAGS_COMMON) -O -g -fPIC + +CXXFLAGS_STLDEBUG_static = $(CXXFLAGS_DEBUG_static) -D_STLP_DEBUG +CXXFLAGS_STLDEBUG_dynamic = $(CXXFLAGS_DEBUG_dynamic) -D_STLP_DEBUG -fPIC + +include common_percent_rules.mak +include common_rules.mak + + +#install: all +# cp -p $(LIB_TARGET) ${D_LIB_TARGET} ../lib + +#%.s: %.cpp +# $(CXX) $(CXXFLAGS) -O4 -S -pto $< -o $@ + + diff -urN STLport-4.5.3/src/num_put_float.cpp STLport-4.5.3-devel/src/num_put_float.cpp --- STLport-4.5.3/src/num_put_float.cpp Fri Jan 18 15:06:52 2002 +++ STLport-4.5.3-devel/src/num_put_float.cpp Tue Jan 7 15:28:08 2003 @@ -65,6 +65,12 @@ # endif +# if defined(_STLP_USE_UCLIBC) +# define __USE_ISOC99 1 +# include +# include +# endif + # include #if defined (_MSC_VER) || defined (__MINGW32__) || defined (__BORLANDC__) || defined (__DJGPP) || defined (_STLP_SCO_OPENSERVER) || defined (__NCR_SVR) @@ -209,7 +215,7 @@ #ifdef USE_SPRINTF_INSTEAD -#elif defined (__hpux) || defined (__DJGPP) || ( defined(_STLP_USE_GLIBC) && ! defined (__MSL__) ) +#elif defined (__hpux) || defined (__DJGPP) || ( defined(_STLP_USE_GLIBC) && ! defined (__MSL__) ) || defined (_STLP_USE_UCLIBC) # if defined (isfinite) inline bool _Stl_is_nan_or_inf(double x) { return !isfinite(x); } # else @@ -238,7 +244,7 @@ } inline bool _Stl_is_neg_inf(double x) { return _fpclass(x) == _FPCLASS_NINF; } inline bool _Stl_is_neg_nan(double x) { return _isnan(x) && _copysign(1., x) < 0 ; } -#elif defined(__MRC__) || defined(__SC__) //*TY 02/24/2000 - added support for MPW +#elif defined(__MRC__) || defined(__SC__) bool _Stl_is_nan_or_inf(double x) { return isnan(x) || !isfinite(x); } bool _Stl_is_inf(double x) { return !isfinite(x); } bool _Stl_is_neg_inf(double x) { return !isfinite(x) && signbit(x); } @@ -280,7 +286,7 @@ inline char* _Stl_qfcvtR(long double x, int n, int* pt, int* sign, char* buf) { return fcvtbuf(x, n, pt, sign, buf); } # endif -#elif defined (_STLP_USE_GLIBC) +#elif defined (_STLP_USE_GLIBC) || defined(_STLP_USE_UCLIBC) inline char* _Stl_ecvtR(double x, int n, int* pt, int* sign, char* buf) { return buf + ecvt_r(x, n, pt, sign, buf, NDIG+2); } inline char* _Stl_fcvtR(double x, int n, int* pt, int* sign, char* buf) diff -urN STLport-4.5.3/src/stdio_streambuf.cpp STLport-4.5.3-devel/src/stdio_streambuf.cpp --- STLport-4.5.3/src/stdio_streambuf.cpp Thu Jan 10 11:41:52 2002 +++ STLport-4.5.3-devel/src/stdio_streambuf.cpp Tue Jan 7 15:28:08 2003 @@ -82,7 +82,7 @@ _STLP_VENDOR_CSTD::fgetpos(_M_file, &pos); // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead // of a primitive type -#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) ) +#if defined(_STLP_USE_UCLIBC) || (defined(__GLIBC__) && defined(_STLP_USE_GLIBC) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) ) return pos_type((streamoff)pos.__pos); #elif defined(__ISCPP__) || defined(__MVS__) || (__OS400__) return pos_type(pos.__fpos_elem[ 0 ]); @@ -101,13 +101,16 @@ // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead // of a primitive type -#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) ) +#if (defined(__GLIBC__) && defined(_STLP_USE_GLIBC) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) ) fpos_t p; p.__pos = pos; memset( &(p.__state), 0, sizeof(p.__state) ); #elif defined(__MVS__) || (__OS400__) fpos_t p; p.__fpos_elem[0] = pos; +#elif defined(_STLP_USE_UCLIBC) + fpos_t p; + p.__pos = pos; #else fpos_t p(pos); #endif diff -urN STLport-4.5.3/stlport/config/_prolog.h STLport-4.5.3-devel/stlport/config/_prolog.h --- STLport-4.5.3/stlport/config/_prolog.h Sun Oct 28 13:26:44 2001 +++ STLport-4.5.3-devel/stlport/config/_prolog.h Tue Jan 7 15:28:08 2003 @@ -1,3 +1,8 @@ +/* Evil hack to make sure everything behaves itself */ +#define _STLP_USE_UCLIBC +//#define _STLP_NO_WCHAR_T +//#define _ISOC99_SOURCE +//#define USE_SPRINTF_INSTEAD #if defined (_STLP_MSVC) || defined (__ICL) || defined (__BORLANDC__) diff -urN STLport-4.5.3/stlport/config/stl_gcc.h STLport-4.5.3-devel/stlport/config/stl_gcc.h --- STLport-4.5.3/stlport/config/stl_gcc.h Thu Jan 10 11:41:58 2002 +++ STLport-4.5.3-devel/stlport/config/stl_gcc.h Tue Jan 7 15:28:08 2003 @@ -3,7 +3,7 @@ */ /* Systems having GLIBC installed have different traits */ -#if ! defined (_STLP_USE_GLIBC) && ( defined (__linux__) || defined (__CYGWIN__) ) +#if ! defined (_STLP_USE_GLIBC) && ! defined (_STLP_USE_UCLIBC) && ( defined (__linux__) || defined (__CYGWIN__) ) # define _STLP_USE_GLIBC #endif diff -urN STLport-4.5.3/stlport/cstdlib STLport-4.5.3-devel/stlport/cstdlib --- STLport-4.5.3/stlport/cstdlib Thu Aug 23 15:51:54 2001 +++ STLport-4.5.3-devel/stlport/cstdlib Tue Jan 7 15:28:08 2003 @@ -55,9 +55,11 @@ using _STLP_VENDOR_CSTD::atof; using _STLP_VENDOR_CSTD::atoi; using _STLP_VENDOR_CSTD::atol; +# ifndef _STLP_USE_UCLIBC using _STLP_VENDOR_CSTD::mblen; using _STLP_VENDOR_CSTD::mbstowcs; using _STLP_VENDOR_CSTD::mbtowc; +# endif using _STLP_VENDOR_CSTD::strtod; using _STLP_VENDOR_CSTD::strtol; using _STLP_VENDOR_CSTD::strtoul; diff -urN STLport-4.5.3/stlport/stl/_config.h STLport-4.5.3-devel/stlport/stl/_config.h --- STLport-4.5.3/stlport/stl/_config.h Fri Jan 18 15:08:36 2002 +++ STLport-4.5.3-devel/stlport/stl/_config.h Tue Jan 7 15:28:08 2003 @@ -26,6 +26,16 @@ #ifndef _STLP_CONFIG_H # define _STLP_CONFIG_H +/* Make the STLport headers provide uClibc support by default */ +#define _STLP_NO_EXCEPTIONS 1 +#define STL_NO_EXCEPTIONS 1 +#define _STLP_USE_UCLIBC 1 +//#define _STLP_NO_WCHAR_T 1 +#define _STLP_NO_LONG_DOUBLE 1 +#define USE_SPRINTF_INSTEAD 1 +#define _ISOC99_SOURCE 1 +#define _STLP_NO_ANACHRONISMS 1 + /* * Purpose of this file : * @@ -164,7 +174,7 @@ /* Operating system recognition (basic) */ # if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__Lynx__) # define _STLP_UNIX 1 -# if defined (__linux__) && ! defined (_STLP_USE_GLIBC) +# if defined (__linux__) && ! defined (_STLP_USE_GLIBC) && ! defined (_STLP_USE_UCLIBC) # define _STLP_USE_GLIBC 1 # endif # elif defined(macintosh) || defined (_MAC) diff -urN STLport-4.5.3/stlport/stl/_stdio_file.h STLport-4.5.3-devel/stlport/stl/_stdio_file.h --- STLport-4.5.3/stlport/stl/_stdio_file.h Fri Jan 18 15:07:00 2002 +++ STLport-4.5.3-devel/stlport/stl/_stdio_file.h Tue Jan 7 15:28:08 2003 @@ -634,6 +634,112 @@ } # define _STLP_FILE_I_O_IDENTICAL +#elif defined(_STLP_USE_UCLIBC) + +#if defined(__MASK_READING) + +inline int _FILE_fd(const FILE *__f) { return __f->__filedes; } + +// Returns a pointer to the beginning of the buffer. +inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->__bufstart; } + +// Returns the current read/write position within the buffer. +inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->__bufpos; } + +// Returns a pointer immediately past the end of the buffer. +inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->__bufend; } + +// Returns the number of characters remaining in the buffer, i.e. +// _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f). +inline ptrdiff_t _FILE_I_avail(const FILE *__f) + { return __f->__bufgetc_u - __f->__bufpos; } + +// Increments the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_preincr(FILE *__f) { return *(char*)(++__f->__bufpos); } + +// Increments the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_postincr(FILE *__f) { return *(char*)(__f->__bufpos++); } + +// Decrements the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_predecr(FILE *__f) { return *(char*)(--__f->__bufpos); } + +// Decrements the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_postdecr(FILE *__f) { return *(char*)(__f->__bufpos--); } + +// Increments the current read/write position by __n. +inline void _FILE_I_bump(FILE *__f, int __n) { __f->__bufpos += __n; } + +// Sets the beginning of the bufer to __begin, the current read/write +// position to __next, and the buffer's past-the-end pointer to __end. +// If any of those pointers is null, then all of them must be null. +inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) +{ + __f->__bufstart = (unsigned char*)__begin; + __f->__bufpos = (unsigned char*)__next; + __f->__bufend = (unsigned char*)__end; + __f->__bufgetc_u = (unsigned char*)__begin; + __f->__bufputc_u = (unsigned char*)__end; +} + +# define _STLP_FILE_I_O_IDENTICAL + +#else // Support old stdio for a little while. + +inline int _FILE_fd(const FILE *__f) { return __f->filedes; } + +// Returns a pointer to the beginning of the buffer. +inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->bufstart; } + +// Returns the current read/write position within the buffer. +inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->bufpos; } + +// Returns a pointer immediately past the end of the buffer. +inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->bufend; } + +// Returns the number of characters remaining in the buffer, i.e. +// _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f). +inline ptrdiff_t _FILE_I_avail(const FILE *__f) + { return __f->bufgetc - __f->bufpos; } + +// Increments the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_preincr(FILE *__f) { return *(char*)(++__f->bufpos); } + +// Increments the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_postincr(FILE *__f) { return *(char*)(__f->bufpos++); } + +// Decrements the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_predecr(FILE *__f) { return *(char*)(--__f->bufpos); } + +// Decrements the current read/write position by 1, returning the +// character at the old position. +inline char& _FILE_I_postdecr(FILE *__f) { return *(char*)(__f->bufpos--); } + +// Increments the current read/write position by __n. +inline void _FILE_I_bump(FILE *__f, int __n) { __f->bufpos += __n; } + +// Sets the beginning of the bufer to __begin, the current read/write +// position to __next, and the buffer's past-the-end pointer to __end. +// If any of those pointers is null, then all of them must be null. +inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) +{ + __f->bufstart = (unsigned char*)__begin; + __f->bufpos = (unsigned char*)__next; + __f->bufend = (unsigned char*)__end; + __f->bufgetc = (unsigned char*)__begin; + __f->bufputc = (unsigned char*)__end; +} + +# define _STLP_FILE_I_O_IDENTICAL + +#endif + #else /* A C library that we don't have an implementation for. */ # error The C++ I/O library is not configured for this compiler diff -urN STLport-4.5.3/stlport/stl/c_locale.h STLport-4.5.3-devel/stlport/stl/c_locale.h --- STLport-4.5.3/stlport/stl/c_locale.h Fri Jan 18 15:07:00 2002 +++ STLport-4.5.3-devel/stlport/stl/c_locale.h Wed Jan 8 10:58:10 2003 @@ -401,6 +401,21 @@ # define _Locale_SPACE _S # define _Locale_PRINT (_P | _U | _L | _N | _B) # define _Locale_ALPHA (_U | _L) + +# elif defined(_STLP_USE_UCLIBC) /* linux, using the gnu compiler */ + +# define _Locale_CNTRL _IScntrl +# define _Locale_UPPER _ISupper +# define _Locale_LOWER _ISlower +# define _Locale_DIGIT _ISdigit +# define _Locale_XDIGIT _ISxdigit +# define _Locale_PUNCT _ISpunct +# define _Locale_SPACE _ISspace +# define _Locale_PRINT _ISprint +# define _Locale_ALPHA _ISalpha + +#else +# error Unknown Locale #endif # endif /* _STLP_C_LOCALE_H */